[libraries/ktextaddons] textautogeneratetext/plugins/genericnetworkplugin: Add orca router support

Laurent Montel <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 58b52d1973e79d74771d63452a363d7d0d3e3a1d by Laurent Montel.
Committed on 03/08/2026 at 11:24.
Pushed by mlaurent into branch 'master'.

Add orca router support

M  +6    -0    textautogeneratetext/plugins/genericnetworkplugin/autotests/genericnetworkserverinfotest.cpp
M  +5    -4    textautogeneratetext/plugins/genericnetworkplugin/genericnetworkmanager.h
M  +15   -0    textautogeneratetext/plugins/genericnetworkplugin/genericnetworkserverinfo.cpp

https://invent.kde.org/libraries/ktextaddons/-/commit/58b52d1973e79d74771d63452a363d7d0d3e3a1d

diff --git a/textautogeneratetext/plugins/genericnetworkplugin/autotests/genericnetworkserverinfotest.cpp b/textautogeneratetext/plugins/genericnetworkplugin/autotests/genericnetworkserverinfotest.cpp
index bfee36777..47a8bfc6d 100644
--- a/textautogeneratetext/plugins/genericnetworkplugin/autotests/genericnetworkserverinfotest.cpp
+++ b/textautogeneratetext/plugins/genericnetworkplugin/autotests/genericnetworkserverinfotest.cpp
@@ -38,6 +38,7 @@ void GenericNetworkServerInfoTest::shouldConvertPluginNetworkTypeFromString()
     QCOMPARE(info.pluginNetworkTypeFromString(u"sarvamai"_s), GenericNetworkManager::PluginNetworkType::SarvamAI);
     QCOMPARE(info.pluginNetworkTypeFromString(u"atlascloudai"_s), GenericNetworkManager::PluginNetworkType::AtlasCloud);
     QCOMPARE(info.pluginNetworkTypeFromString(u"gemini"_s), GenericNetworkManager::PluginNetworkType::Gemini);
+    QCOMPARE(info.pluginNetworkTypeFromString(u"orcarouterai"_s), GenericNetworkManager::PluginNetworkType::OrcaRouterAI);
 }
 
 void GenericNetworkServerInfoTest::shouldCheckApiUrl()
@@ -61,6 +62,7 @@ void GenericNetworkServerInfoTest::shouldCheckApiUrl()
     QCOMPARE(info.apiUrl(GenericNetworkManager::PluginNetworkType::OpenRouterAI), u"https://openrouter.ai/api/v1/"_s);
     QCOMPARE(info.apiUrl(GenericNetworkManager::PluginNetworkType::SarvamAI), u"https://api.sarvam.ai/v1/"_s);
     QCOMPARE(info.apiUrl(GenericNetworkManager::PluginNetworkType::AtlasCloud), u"https://api.atlascloud.ai/v1/"_s);
+    QCOMPARE(info.apiUrl(GenericNetworkManager::PluginNetworkType::OrcaRouterAI), u"https://api.orcarouter.ai/v1/"_s);
     QCOMPARE(info.apiUrl(GenericNetworkManager::PluginNetworkType::Gemini), u"https://generativelanguage.googleapis.com/v1beta/openai/"_s);
 }
 
@@ -86,6 +88,7 @@ void GenericNetworkServerInfoTest::shouldChatCompletionPath()
     QCOMPARE(info.chatCompletionPath(GenericNetworkManager::PluginNetworkType::SarvamAI), u"chat/completions"_s);
     QCOMPARE(info.chatCompletionPath(GenericNetworkManager::PluginNetworkType::AtlasCloud), u"chat/completions"_s);
     QCOMPARE(info.chatCompletionPath(GenericNetworkManager::PluginNetworkType::Gemini), u"chat/completions"_s);
+    QCOMPARE(info.chatCompletionPath(GenericNetworkManager::PluginNetworkType::OrcaRouterAI), u"chat/completions"_s);
 }
 
 void GenericNetworkServerInfoTest::shouldResponsesPath()
@@ -110,6 +113,7 @@ void GenericNetworkServerInfoTest::shouldResponsesPath()
     QCOMPARE(info.responsesPath(GenericNetworkManager::PluginNetworkType::SarvamAI), u"responses"_s);
     QCOMPARE(info.responsesPath(GenericNetworkManager::PluginNetworkType::AtlasCloud), u"responses"_s);
     QCOMPARE(info.responsesPath(GenericNetworkManager::PluginNetworkType::Gemini), u"responses"_s);
+    QCOMPARE(info.responsesPath(GenericNetworkManager::PluginNetworkType::OrcaRouterAI), u"responses"_s);
 }
 
 void GenericNetworkServerInfoTest::shouldDefinePluginName()
@@ -134,6 +138,7 @@ void GenericNetworkServerInfoTest::shouldDefinePluginName()
     QCOMPARE(info.pluginName(GenericNetworkManager::PluginNetworkType::SarvamAI), u"sarvamai"_s);
     QCOMPARE(info.pluginName(GenericNetworkManager::PluginNetworkType::AtlasCloud), u"atlascloudai"_s);
     QCOMPARE(info.pluginName(GenericNetworkManager::PluginNetworkType::Gemini), u"gemini"_s);
+    QCOMPARE(info.pluginName(GenericNetworkManager::PluginNetworkType::OrcaRouterAI), u"orcarouterai"_s);
 }
 
 void GenericNetworkServerInfoTest::shouldDefineLimitations()
@@ -158,6 +163,7 @@ void GenericNetworkServerInfoTest::shouldDefineLimitations()
     QCOMPARE(info.limitations(GenericNetworkManager::PluginNetworkType::SarvamAI), GenericNetworkManager::Limitation::None);
     QCOMPARE(info.limitations(GenericNetworkManager::PluginNetworkType::AtlasCloud), GenericNetworkManager::Limitation::None);
     QCOMPARE(info.limitations(GenericNetworkManager::PluginNetworkType::Gemini), GenericNetworkManager::Limitation::None);
+    QCOMPARE(info.limitations(GenericNetworkManager::PluginNetworkType::OrcaRouterAI), GenericNetworkManager::Limitation::None);
 }
 
 #include "moc_genericnetworkserverinfotest.cpp"
diff --git a/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkmanager.h b/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkmanager.h
index d9d4dbcc8..ffeedc389 100644
--- a/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkmanager.h
+++ b/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkmanager.h
@@ -32,10 +32,11 @@ public:
         Qwen = 13,
         ChatGPT = 14,
         OpenRouterAI = 15,
-        SarvamAI = 16,
-        AtlasCloud = 17,
-        Gemini = 18,
-        KimiAI = 19,
+        OrcaRouterAI = 16,
+        SarvamAI = 17,
+        AtlasCloud = 18,
+        Gemini = 19,
+        KimiAI = 20,
         LastElement = KimiAI,
     };
 
diff --git a/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkserverinfo.cpp b/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkserverinfo.cpp
index 640c57880..4637d7bb4 100644
--- a/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkserverinfo.cpp
+++ b/textautogeneratetext/plugins/genericnetworkplugin/genericnetworkserverinfo.cpp
@@ -52,6 +52,8 @@ QString GenericNetworkServerInfo::translatedName(GenericNetworkManager::PluginNe
         return i18n("CompactifAI");
     case GenericNetworkManager::PluginNetworkType::OpenRouterAI:
         return i18n("OpenRouter AI");
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
+        return i18n("OrcaRouter AI");
     case GenericNetworkManager::PluginNetworkType::SarvamAI:
         return i18n("Sarvam AI");
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
@@ -87,6 +89,7 @@ QString GenericNetworkServerInfo::responsesPath(GenericNetworkManager::PluginNet
     case GenericNetworkManager::PluginNetworkType::SarvamAI:
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
     case GenericNetworkManager::PluginNetworkType::Gemini:
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
         return u"responses"_s;
     }
     return {};
@@ -117,6 +120,7 @@ QString GenericNetworkServerInfo::chatCompletionPath(GenericNetworkManager::Plug
     case GenericNetworkManager::PluginNetworkType::SarvamAI:
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
     case GenericNetworkManager::PluginNetworkType::Gemini:
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
         return u"chat/completions"_s;
     }
     return {};
@@ -166,6 +170,8 @@ QString GenericNetworkServerInfo::webSite(GenericNetworkManager::PluginNetworkTy
         return u"https://www.atlascloud.ai/"_s;
     case GenericNetworkManager::PluginNetworkType::Gemini:
         return u"https://gemini.google.com"_s;
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
+        return u"https://www.orcarouter.ai/"_s;
     }
     return {};
 }
@@ -212,6 +218,8 @@ QString GenericNetworkServerInfo::apiUrl(GenericNetworkManager::PluginNetworkTyp
         return u"https://api.sarvam.ai/v1/"_s;
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
         return u"https://api.atlascloud.ai/v1/"_s;
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
+        return u"https://api.orcarouter.ai/v1/"_s;
     case GenericNetworkManager::PluginNetworkType::Gemini:
         return u"https://generativelanguage.googleapis.com/v1beta/openai/"_s;
     }
@@ -257,6 +265,8 @@ QString GenericNetworkServerInfo::description(GenericNetworkManager::PluginNetwo
         return i18n("Sarvam AI instance");
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
         return i18n("AtlasCloud OpenAI-compatible API");
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
+        return i18n("Orca Router OpenAI-compatible API");
     }
     return {};
 }
@@ -305,6 +315,8 @@ QString GenericNetworkServerInfo::pluginName(GenericNetworkManager::PluginNetwor
         return u"atlascloudai"_s;
     case GenericNetworkManager::PluginNetworkType::Gemini:
         return u"gemini"_s;
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
+        return u"orcarouterai"_s;
     }
     return {};
 }
@@ -349,6 +361,8 @@ GenericNetworkManager::PluginNetworkType GenericNetworkServerInfo::pluginNetwork
         return GenericNetworkManager::PluginNetworkType::AtlasCloud;
     } else if (str == QLatin1StringView("gemini")) {
         return GenericNetworkManager::PluginNetworkType::Gemini;
+    } else if (str == QLatin1StringView("orcarouterai")) {
+        return GenericNetworkManager::PluginNetworkType::OrcaRouterAI;
     } else {
         qCWarning(AUTOGENERATETEXT_GENERICNETWORK_LOG) << "PluginNetworkType is unknown. It's a bug" << str;
         return GenericNetworkManager::PluginNetworkType::Unknown;
@@ -407,6 +421,7 @@ GenericNetworkManager::Limitations GenericNetworkServerInfo::limitations(Generic
     case GenericNetworkManager::PluginNetworkType::DeepInfra:
     case GenericNetworkManager::PluginNetworkType::CompactifAI:
     case GenericNetworkManager::PluginNetworkType::OpenRouterAI:
+    case GenericNetworkManager::PluginNetworkType::OrcaRouterAI:
     case GenericNetworkManager::PluginNetworkType::SarvamAI:
     case GenericNetworkManager::PluginNetworkType::AtlasCloud:
         return limits;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.