diff --git a/ChatView/ClientInterface.cpp b/ChatView/ClientInterface.cpp index f95b9b0..cd6d21b 100644 --- a/ChatView/ClientInterface.cpp +++ b/ChatView/ClientInterface.cpp @@ -266,8 +266,6 @@ void ClientInterface::sendMessage( = {{"model", Settings::generalSettings().caModel()}, {"stream", true}}; } - config.apiKey = provider->apiKey(); - config.provider->prepareRequest( config.providerRequest, promptTemplate, diff --git a/LLMClientInterface.cpp b/LLMClientInterface.cpp index 0d3b603..eea6ce3 100644 --- a/LLMClientInterface.cpp +++ b/LLMClientInterface.cpp @@ -283,7 +283,6 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request) QString("%1%2").arg(url, endpoint(provider, promptTemplate->type(), isPreset1Active))); config.providerRequest = {{"model", modelName}, {"stream", true}}; } - config.apiKey = provider->apiKey(); config.multiLineCompletion = m_completeSettings.multiLineCompletion(); const auto stopWords = QJsonArray::fromStringList(config.promptTemplate->stopWords()); diff --git a/QuickRefactorHandler.cpp b/QuickRefactorHandler.cpp index b96124d..84cbb44 100644 --- a/QuickRefactorHandler.cpp +++ b/QuickRefactorHandler.cpp @@ -146,7 +146,6 @@ void QuickRefactorHandler::prepareAndSendRequest( config.provider = provider; config.promptTemplate = promptTemplate; config.url = QString("%1%2").arg(settings.qrUrl(), provider->chatEndpoint()); - config.apiKey = provider->apiKey(); if (provider->providerID() == PluginLLMCore::ProviderID::GoogleAI) { QString stream = QString{"streamGenerateContent?alt=sse"}; diff --git a/pluginllmcore/Provider.cpp b/pluginllmcore/Provider.cpp index fd2e03b..d626ca6 100644 --- a/pluginllmcore/Provider.cpp +++ b/pluginllmcore/Provider.cpp @@ -47,6 +47,13 @@ RequestID Provider::sendRequest(const QUrl &url, const QJsonObject &payload) return requestId; } +QString Provider::apiKey() const +{ + if (m_apiKeyGetter) + return m_apiKeyGetter(); + return {}; +} + void Provider::cancelRequest(const RequestID &requestId) { LOG_MESSAGE(QString("%1: Cancelling request %2").arg(name(), requestId)); diff --git a/pluginllmcore/Provider.hpp b/pluginllmcore/Provider.hpp index abd5eb2..9346451 100644 --- a/pluginllmcore/Provider.hpp +++ b/pluginllmcore/Provider.hpp @@ -21,11 +21,12 @@ #include #include -#include #include #include #include +#include + #include "ContextData.hpp" #include "IToolsManager.hpp" #include "PromptTemplate.hpp" @@ -53,6 +54,8 @@ class Provider : public QObject { Q_OBJECT public: + using ApiKeyGetter = std::function; + explicit Provider(QObject *parent = nullptr); virtual ~Provider() = default; @@ -70,16 +73,18 @@ public: bool isThinkingEnabled) = 0; virtual QFuture> getInstalledModels(const QString &url) = 0; - virtual QString apiKey() const = 0; - virtual void prepareNetworkRequest(QNetworkRequest &networkRequest) const = 0; virtual ProviderID providerID() const = 0; virtual ProviderCapabilities capabilities() const { return {}; } virtual ::LLMCore::BaseClient *client() const = 0; + QString apiKey() const; RequestID sendRequest(const QUrl &url, const QJsonObject &payload); void cancelRequest(const RequestID &requestId); ::LLMCore::ToolsManager *toolsManager() const; + +protected: + ApiKeyGetter m_apiKeyGetter; }; } // namespace QodeAssist::PluginLLMCore diff --git a/pluginllmcore/RequestConfig.hpp b/pluginllmcore/RequestConfig.hpp index 55b4bf3..113536a 100644 --- a/pluginllmcore/RequestConfig.hpp +++ b/pluginllmcore/RequestConfig.hpp @@ -35,7 +35,6 @@ struct LLMConfig QJsonObject providerRequest; RequestType requestType; bool multiLineCompletion; - QString apiKey; }; } // namespace QodeAssist::PluginLLMCore diff --git a/providers/ClaudeProvider.cpp b/providers/ClaudeProvider.cpp index f755a3f..75a12df 100644 --- a/providers/ClaudeProvider.cpp +++ b/providers/ClaudeProvider.cpp @@ -37,9 +37,9 @@ namespace QodeAssist::Providers { ClaudeProvider::ClaudeProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::ClaudeClient( - url(), Settings::providerSettings().claudeApiKey(), QString(), this)) + , m_client(new ::LLMCore::ClaudeClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().claudeApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -135,21 +135,6 @@ QFuture> ClaudeProvider::getInstalledModels(const QString &baseUr return m_client->listModels(); } -QString ClaudeProvider::apiKey() const -{ - return Settings::providerSettings().claudeApiKey(); -} - -void ClaudeProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - networkRequest.setRawHeader("anthropic-version", "2023-06-01"); - - if (!apiKey().isEmpty()) { - networkRequest.setRawHeader("x-api-key", apiKey().toUtf8()); - } -} - PluginLLMCore::ProviderID ClaudeProvider::providerID() const { return PluginLLMCore::ProviderID::Claude; diff --git a/providers/ClaudeProvider.hpp b/providers/ClaudeProvider.hpp index ec443dd..c42b029 100644 --- a/providers/ClaudeProvider.hpp +++ b/providers/ClaudeProvider.hpp @@ -43,8 +43,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/CodestralProvider.cpp b/providers/CodestralProvider.cpp index 63a87db..e6b8c63 100644 --- a/providers/CodestralProvider.cpp +++ b/providers/CodestralProvider.cpp @@ -23,6 +23,12 @@ namespace QodeAssist::Providers { +CodestralProvider::CodestralProvider(QObject *parent) + : MistralAIProvider(parent) +{ + m_apiKeyGetter = [] { return Settings::providerSettings().codestralApiKey(); }; +} + QString CodestralProvider::name() const { return "Codestral"; @@ -38,9 +44,4 @@ PluginLLMCore::ProviderCapabilities CodestralProvider::capabilities() const return PluginLLMCore::ProviderCapability::Tools | PluginLLMCore::ProviderCapability::Image; } -QString CodestralProvider::apiKey() const -{ - return Settings::providerSettings().codestralApiKey(); -} - } // namespace QodeAssist::Providers diff --git a/providers/CodestralProvider.hpp b/providers/CodestralProvider.hpp index a907827..3e29b01 100644 --- a/providers/CodestralProvider.hpp +++ b/providers/CodestralProvider.hpp @@ -26,9 +26,10 @@ namespace QodeAssist::Providers { class CodestralProvider : public MistralAIProvider { public: + explicit CodestralProvider(QObject *parent = nullptr); + QString name() const override; QString url() const override; - QString apiKey() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; }; diff --git a/providers/GoogleAIProvider.cpp b/providers/GoogleAIProvider.cpp index ca7c90f..3484f05 100644 --- a/providers/GoogleAIProvider.cpp +++ b/providers/GoogleAIProvider.cpp @@ -38,8 +38,9 @@ namespace QodeAssist::Providers { GoogleAIProvider::GoogleAIProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::GoogleAIClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::GoogleAIClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().googleAiApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -148,22 +149,6 @@ QFuture> GoogleAIProvider::getInstalledModels(const QString &base return m_client->listModels(); } -QString GoogleAIProvider::apiKey() const -{ - return Settings::providerSettings().googleAiApiKey(); -} - -void GoogleAIProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - QUrl url = networkRequest.url(); - QUrlQuery query(url.query()); - query.addQueryItem("key", apiKey()); - url.setQuery(query); - networkRequest.setUrl(url); -} - PluginLLMCore::ProviderID GoogleAIProvider::providerID() const { return PluginLLMCore::ProviderID::GoogleAI; diff --git a/providers/GoogleAIProvider.hpp b/providers/GoogleAIProvider.hpp index d5fb640..351cc54 100644 --- a/providers/GoogleAIProvider.hpp +++ b/providers/GoogleAIProvider.hpp @@ -43,8 +43,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/LMStudioProvider.cpp b/providers/LMStudioProvider.cpp index 282b3a8..d62f780 100644 --- a/providers/LMStudioProvider.cpp +++ b/providers/LMStudioProvider.cpp @@ -37,7 +37,7 @@ namespace QodeAssist::Providers { LMStudioProvider::LMStudioProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OpenAIClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OpenAIClient(QString(), QString(), QString(), this)) { Tools::registerQodeAssistTools(m_client->tools()); } @@ -69,16 +69,6 @@ QFuture> LMStudioProvider::getInstalledModels(const QString &url) return m_client->listModels(); } -QString LMStudioProvider::apiKey() const -{ - return {}; -} - -void LMStudioProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); -} - PluginLLMCore::ProviderID LMStudioProvider::providerID() const { return PluginLLMCore::ProviderID::LMStudio; diff --git a/providers/LMStudioProvider.hpp b/providers/LMStudioProvider.hpp index ca2a304..9432050 100644 --- a/providers/LMStudioProvider.hpp +++ b/providers/LMStudioProvider.hpp @@ -42,8 +42,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/LlamaCppProvider.cpp b/providers/LlamaCppProvider.cpp index 5c738f1..07dcc9f 100644 --- a/providers/LlamaCppProvider.cpp +++ b/providers/LlamaCppProvider.cpp @@ -35,7 +35,7 @@ namespace QodeAssist::Providers { LlamaCppProvider::LlamaCppProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::LlamaCppClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::LlamaCppClient(QString(), QString(), QString(), this)) { Tools::registerQodeAssistTools(m_client->tools()); } @@ -110,16 +110,6 @@ QFuture> LlamaCppProvider::getInstalledModels(const QString &) return QtFuture::makeReadyFuture(QList{}); } -QString LlamaCppProvider::apiKey() const -{ - return {}; -} - -void LlamaCppProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); -} - PluginLLMCore::ProviderID LlamaCppProvider::providerID() const { return PluginLLMCore::ProviderID::LlamaCpp; diff --git a/providers/LlamaCppProvider.hpp b/providers/LlamaCppProvider.hpp index 2ed307c..c1bdf97 100644 --- a/providers/LlamaCppProvider.hpp +++ b/providers/LlamaCppProvider.hpp @@ -43,8 +43,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/MistralAIProvider.cpp b/providers/MistralAIProvider.cpp index bbd4f7b..e89823c 100644 --- a/providers/MistralAIProvider.cpp +++ b/providers/MistralAIProvider.cpp @@ -36,8 +36,9 @@ namespace QodeAssist::Providers { MistralAIProvider::MistralAIProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OpenAIClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OpenAIClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().mistralAiApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -68,20 +69,6 @@ QFuture> MistralAIProvider::getInstalledModels(const QString &url return m_client->listModels(); } -QString MistralAIProvider::apiKey() const -{ - return Settings::providerSettings().mistralAiApiKey(); -} - -void MistralAIProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - if (!apiKey().isEmpty()) { - networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey()).toUtf8()); - } -} - PluginLLMCore::ProviderID MistralAIProvider::providerID() const { return PluginLLMCore::ProviderID::MistralAI; diff --git a/providers/MistralAIProvider.hpp b/providers/MistralAIProvider.hpp index 112788f..e0cd547 100644 --- a/providers/MistralAIProvider.hpp +++ b/providers/MistralAIProvider.hpp @@ -42,8 +42,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/OllamaProvider.cpp b/providers/OllamaProvider.cpp index e2f014c..d3d0b95 100644 --- a/providers/OllamaProvider.cpp +++ b/providers/OllamaProvider.cpp @@ -37,8 +37,9 @@ namespace QodeAssist::Providers { OllamaProvider::OllamaProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OllamaClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OllamaClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().ollamaBasicAuthApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -139,20 +140,6 @@ QFuture> OllamaProvider::getInstalledModels(const QString &baseUr return m_client->listModels(); } -QString OllamaProvider::apiKey() const -{ - return {}; -} - -void OllamaProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - const auto key = Settings::providerSettings().ollamaBasicAuthApiKey(); - if (!key.isEmpty()) { - networkRequest.setRawHeader("Authorization", "Basic " + key.toLatin1()); - } -} - PluginLLMCore::ProviderID OllamaProvider::providerID() const { return PluginLLMCore::ProviderID::Ollama; diff --git a/providers/OllamaProvider.hpp b/providers/OllamaProvider.hpp index afd3b2a..e7539eb 100644 --- a/providers/OllamaProvider.hpp +++ b/providers/OllamaProvider.hpp @@ -43,8 +43,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/OpenAICompatProvider.cpp b/providers/OpenAICompatProvider.cpp index 1227663..a24c67a 100644 --- a/providers/OpenAICompatProvider.cpp +++ b/providers/OpenAICompatProvider.cpp @@ -36,8 +36,9 @@ namespace QodeAssist::Providers { OpenAICompatProvider::OpenAICompatProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OpenAIClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OpenAIClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().openAiCompatApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -112,20 +113,6 @@ QFuture> OpenAICompatProvider::getInstalledModels(const QString & return QtFuture::makeReadyFuture(QList{}); } -QString OpenAICompatProvider::apiKey() const -{ - return Settings::providerSettings().openAiCompatApiKey(); -} - -void OpenAICompatProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - if (!apiKey().isEmpty()) { - networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey()).toUtf8()); - } -} - PluginLLMCore::ProviderID OpenAICompatProvider::providerID() const { return PluginLLMCore::ProviderID::OpenAICompatible; diff --git a/providers/OpenAICompatProvider.hpp b/providers/OpenAICompatProvider.hpp index 9413fb4..66b0681 100644 --- a/providers/OpenAICompatProvider.hpp +++ b/providers/OpenAICompatProvider.hpp @@ -42,8 +42,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/OpenAIProvider.cpp b/providers/OpenAIProvider.cpp index 5f388da..07baa6c 100644 --- a/providers/OpenAIProvider.cpp +++ b/providers/OpenAIProvider.cpp @@ -36,8 +36,9 @@ namespace QodeAssist::Providers { OpenAIProvider::OpenAIProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OpenAIClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OpenAIClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().openAiApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -142,20 +143,6 @@ QFuture> OpenAIProvider::getInstalledModels(const QString &baseUr }); } -QString OpenAIProvider::apiKey() const -{ - return Settings::providerSettings().openAiApiKey(); -} - -void OpenAIProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - if (!apiKey().isEmpty()) { - networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey()).toUtf8()); - } -} - PluginLLMCore::ProviderID OpenAIProvider::providerID() const { return PluginLLMCore::ProviderID::OpenAI; diff --git a/providers/OpenAIProvider.hpp b/providers/OpenAIProvider.hpp index 12461d8..bc4b9ba 100644 --- a/providers/OpenAIProvider.hpp +++ b/providers/OpenAIProvider.hpp @@ -42,8 +42,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/OpenAIResponsesProvider.cpp b/providers/OpenAIResponsesProvider.cpp index 910f4eb..1cb96f6 100644 --- a/providers/OpenAIResponsesProvider.cpp +++ b/providers/OpenAIResponsesProvider.cpp @@ -36,8 +36,9 @@ namespace QodeAssist::Providers { OpenAIResponsesProvider::OpenAIResponsesProvider(QObject *parent) : PluginLLMCore::Provider(parent) - , m_client(new ::LLMCore::OpenAIResponsesClient(url(), apiKey(), QString(), this)) + , m_client(new ::LLMCore::OpenAIResponsesClient(QString(), QString(), QString(), this)) { + m_apiKeyGetter = [] { return Settings::providerSettings().openAiApiKey(); }; Tools::registerQodeAssistTools(m_client->tools()); } @@ -162,20 +163,6 @@ QFuture> OpenAIResponsesProvider::getInstalledModels(const QStrin }); } -QString OpenAIResponsesProvider::apiKey() const -{ - return Settings::providerSettings().openAiApiKey(); -} - -void OpenAIResponsesProvider::prepareNetworkRequest(QNetworkRequest &networkRequest) const -{ - networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); - - if (!apiKey().isEmpty()) { - networkRequest.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey()).toUtf8()); - } -} - PluginLLMCore::ProviderID OpenAIResponsesProvider::providerID() const { return PluginLLMCore::ProviderID::OpenAIResponses; diff --git a/providers/OpenAIResponsesProvider.hpp b/providers/OpenAIResponsesProvider.hpp index 1dfc983..8422f61 100644 --- a/providers/OpenAIResponsesProvider.hpp +++ b/providers/OpenAIResponsesProvider.hpp @@ -42,8 +42,6 @@ public: bool isToolsEnabled, bool isThinkingEnabled) override; QFuture> getInstalledModels(const QString &url) override; - QString apiKey() const override; - void prepareNetworkRequest(QNetworkRequest &networkRequest) const override; PluginLLMCore::ProviderID providerID() const override; PluginLLMCore::ProviderCapabilities capabilities() const override; diff --git a/providers/OpenRouterAIProvider.cpp b/providers/OpenRouterAIProvider.cpp index 2aacfdc..23bc38a 100644 --- a/providers/OpenRouterAIProvider.cpp +++ b/providers/OpenRouterAIProvider.cpp @@ -28,6 +28,12 @@ namespace QodeAssist::Providers { +OpenRouterProvider::OpenRouterProvider(QObject *parent) + : OpenAICompatProvider(parent) +{ + m_apiKeyGetter = [] { return Settings::providerSettings().openRouterApiKey(); }; +} + QString OpenRouterProvider::name() const { return "OpenRouter"; @@ -38,11 +44,6 @@ QString OpenRouterProvider::url() const return "https://openrouter.ai/api"; } -QString OpenRouterProvider::apiKey() const -{ - return Settings::providerSettings().openRouterApiKey(); -} - PluginLLMCore::ProviderID OpenRouterProvider::providerID() const { return PluginLLMCore::ProviderID::OpenRouter; diff --git a/providers/OpenRouterAIProvider.hpp b/providers/OpenRouterAIProvider.hpp index 0dfb3d0..beedc2f 100644 --- a/providers/OpenRouterAIProvider.hpp +++ b/providers/OpenRouterAIProvider.hpp @@ -26,9 +26,10 @@ namespace QodeAssist::Providers { class OpenRouterProvider : public OpenAICompatProvider { public: + explicit OpenRouterProvider(QObject *parent = nullptr); + QString name() const override; QString url() const override; - QString apiKey() const override; PluginLLMCore::ProviderID providerID() const override; }; diff --git a/test/LLMClientInterfaceTests.cpp b/test/LLMClientInterfaceTests.cpp index 6a4f472..0b31cc5 100644 --- a/test/LLMClientInterfaceTests.cpp +++ b/test/LLMClientInterfaceTests.cpp @@ -83,8 +83,6 @@ public: return QtFuture::makeReadyFuture(QList{}); } - QString apiKey() const override { return "mock_api_key"; } - void prepareNetworkRequest(QNetworkRequest &request) const override {} LLMCore::ProviderID providerID() const override { return LLMCore::ProviderID::OpenAI; } };