diff --git a/LLMClientInterface.cpp b/LLMClientInterface.cpp index 598358a..45f840c 100644 --- a/LLMClientInterface.cpp +++ b/LLMClientInterface.cpp @@ -41,10 +41,12 @@ namespace QodeAssist { LLMClientInterface::LLMClientInterface( const Settings::GeneralSettings &generalSettings, const Settings::CodeCompletionSettings &completeSettings, + LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider) : m_requestHandler(this) , m_generalSettings(generalSettings) , m_completeSettings(completeSettings) + , m_providerRegistry(providerRegistry) , m_promptProvider(promptProvider) { connect( @@ -167,7 +169,7 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request) const auto url = !isPreset1Active ? m_generalSettings.ccUrl() : m_generalSettings.ccPreset1Url(); - const auto provider = LLMCore::ProvidersManager::instance().getProviderByName(providerName); + const auto provider = m_providerRegistry.getProviderByName(providerName); if (!provider) { LOG_MESSAGE(QString("No provider found with name: %1").arg(providerName)); diff --git a/LLMClientInterface.hpp b/LLMClientInterface.hpp index 5de2beb..809d38d 100644 --- a/LLMClientInterface.hpp +++ b/LLMClientInterface.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -42,6 +43,7 @@ public: LLMClientInterface( const Settings::GeneralSettings &generalSettings, const Settings::CodeCompletionSettings &completeSettings, + LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider); Utils::FilePath serverDeviceTemplate() const override; @@ -70,6 +72,7 @@ private: const Settings::CodeCompletionSettings &m_completeSettings; const Settings::GeneralSettings &m_generalSettings; LLMCore::IPromptProvider *m_promptProvider = nullptr; + LLMCore::IProviderRegistry &m_providerRegistry; LLMCore::RequestHandler m_requestHandler; QElapsedTimer m_completionTimer; QMap m_requestStartTimes; diff --git a/QodeAssistClient.cpp b/QodeAssistClient.cpp index 74a761d..c87bb35 100644 --- a/QodeAssistClient.cpp +++ b/QodeAssistClient.cpp @@ -44,9 +44,13 @@ using namespace Core; namespace QodeAssist { -QodeAssistClient::QodeAssistClient(LLMCore::IPromptProvider *promptProvider) +QodeAssistClient::QodeAssistClient( + LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider) : LanguageClient::Client(new LLMClientInterface( - Settings::generalSettings(), Settings::codeCompletionSettings(), promptProvider)) + Settings::generalSettings(), + Settings::codeCompletionSettings(), + providerRegistry, + promptProvider)) , m_recentCharCount(0) { setName("Qode Assist"); diff --git a/QodeAssistClient.hpp b/QodeAssistClient.hpp index 12cdbf1..615a6c6 100644 --- a/QodeAssistClient.hpp +++ b/QodeAssistClient.hpp @@ -27,13 +27,15 @@ #include "LSPCompletion.hpp" #include #include +#include namespace QodeAssist { class QodeAssistClient : public LanguageClient::Client { public: - explicit QodeAssistClient(LLMCore::IPromptProvider *promptProvider); + explicit QodeAssistClient( + LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider); ~QodeAssistClient() override; void openDocument(TextEditor::TextDocument *document) override; diff --git a/llmcore/CMakeLists.txt b/llmcore/CMakeLists.txt index 34b89f2..3e6d910 100644 --- a/llmcore/CMakeLists.txt +++ b/llmcore/CMakeLists.txt @@ -4,6 +4,7 @@ add_library(LLMCore STATIC ProvidersManager.hpp ProvidersManager.cpp ContextData.hpp IPromptProvider.hpp + IProviderRegistry.hpp PromptProviderChat.hpp PromptProviderFim.hpp PromptTemplate.hpp diff --git a/llmcore/IProviderRegistry.hpp b/llmcore/IProviderRegistry.hpp new file mode 100644 index 0000000..18b9dca --- /dev/null +++ b/llmcore/IProviderRegistry.hpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2025 Povilas Kanapickas + * + * This file is part of QodeAssist. + * + * QodeAssist is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QodeAssist is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QodeAssist. If not, see . + */ + +#pragma once + +#include "Provider.hpp" + +namespace QodeAssist::LLMCore { + +class IProviderRegistry +{ +public: + virtual ~IProviderRegistry() = default; + + virtual Provider *getProviderByName(const QString &providerName) = 0; + + virtual QStringList providersNames() const = 0; +}; + +} // namespace QodeAssist::LLMCore diff --git a/llmcore/ProvidersManager.hpp b/llmcore/ProvidersManager.hpp index dd0a329..ef66a2b 100644 --- a/llmcore/ProvidersManager.hpp +++ b/llmcore/ProvidersManager.hpp @@ -21,12 +21,12 @@ #include -#include "Provider.hpp" +#include "IProviderRegistry.hpp" #include namespace QodeAssist::LLMCore { -class ProvidersManager +class ProvidersManager : public IProviderRegistry { public: static ProvidersManager &instance(); @@ -41,9 +41,9 @@ public: m_providers[name] = provider; } - Provider *getProviderByName(const QString &providerName); + Provider *getProviderByName(const QString &providerName) override; - QStringList providersNames() const; + QStringList providersNames() const override; private: ProvidersManager() = default; diff --git a/qodeassist.cpp b/qodeassist.cpp index 1d7d54b..d5dbf89 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -47,6 +47,7 @@ #include "chat/ChatOutputPane.h" #include "chat/NavigationPanel.hpp" #include "llmcore/PromptProviderFim.hpp" +#include "llmcore/ProvidersManager.hpp" #include "settings/GeneralSettings.hpp" #include "settings/ProjectSettingsPanel.hpp" #include "settings/SettingsConstants.hpp" @@ -137,7 +138,8 @@ public: void restartClient() { LanguageClient::LanguageClientManager::shutdownClient(m_qodeAssistClient); - m_qodeAssistClient = new QodeAssistClient(&m_promptProvider); + m_qodeAssistClient + = new QodeAssistClient(LLMCore::ProvidersManager::instance(), &m_promptProvider); } bool delayedInitialize() final