diff --git a/LLMClientInterface.cpp b/LLMClientInterface.cpp index 57a0893..48b7bc8 100644 --- a/LLMClientInterface.cpp +++ b/LLMClientInterface.cpp @@ -23,7 +23,6 @@ #include #include -#include #include #include "CodeHandler.hpp" @@ -35,6 +34,7 @@ #include "logger/Logger.hpp" #include "settings/CodeCompletionSettings.hpp" #include "settings/GeneralSettings.hpp" +#include namespace QodeAssist { @@ -43,12 +43,13 @@ LLMClientInterface::LLMClientInterface( const Settings::CodeCompletionSettings &completeSettings, LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider, + LLMCore::RequestHandlerBase &requestHandler, IRequestPerformanceLogger &performanceLogger) - : m_requestHandler(this) - , m_generalSettings(generalSettings) + : m_generalSettings(generalSettings) , m_completeSettings(completeSettings) , m_providerRegistry(providerRegistry) , m_promptProvider(promptProvider) + , m_requestHandler(requestHandler) , m_performanceLogger(performanceLogger) { connect( diff --git a/LLMClientInterface.hpp b/LLMClientInterface.hpp index f6bde8a..5878ebf 100644 --- a/LLMClientInterface.hpp +++ b/LLMClientInterface.hpp @@ -46,6 +46,7 @@ public: const Settings::CodeCompletionSettings &completeSettings, LLMCore::IProviderRegistry &providerRegistry, LLMCore::IPromptProvider *promptProvider, + LLMCore::RequestHandlerBase &requestHandler, IRequestPerformanceLogger &performanceLogger); Utils::FilePath serverDeviceTemplate() const override; @@ -75,7 +76,7 @@ private: const Settings::GeneralSettings &m_generalSettings; LLMCore::IPromptProvider *m_promptProvider = nullptr; LLMCore::IProviderRegistry &m_providerRegistry; - LLMCore::RequestHandler m_requestHandler; + LLMCore::RequestHandlerBase &m_requestHandler; IRequestPerformanceLogger &m_performanceLogger; QElapsedTimer m_completionTimer; }; diff --git a/llmcore/CMakeLists.txt b/llmcore/CMakeLists.txt index 3e6d910..2aaf91a 100644 --- a/llmcore/CMakeLists.txt +++ b/llmcore/CMakeLists.txt @@ -10,6 +10,7 @@ add_library(LLMCore STATIC PromptTemplate.hpp PromptTemplateManager.hpp PromptTemplateManager.cpp RequestConfig.hpp + RequestHandlerBase.hpp RequestHandlerBase.cpp RequestHandler.hpp RequestHandler.cpp OllamaMessage.hpp OllamaMessage.cpp OpenAIMessage.hpp OpenAIMessage.cpp diff --git a/llmcore/RequestHandler.cpp b/llmcore/RequestHandler.cpp index 9425d56..8b41a83 100644 --- a/llmcore/RequestHandler.cpp +++ b/llmcore/RequestHandler.cpp @@ -26,7 +26,7 @@ namespace QodeAssist::LLMCore { RequestHandler::RequestHandler(QObject *parent) - : QObject(parent) + : RequestHandlerBase(parent) , m_manager(new QNetworkAccessManager(this)) {} diff --git a/llmcore/RequestHandler.hpp b/llmcore/RequestHandler.hpp index 08eeb2c..3d5cab7 100644 --- a/llmcore/RequestHandler.hpp +++ b/llmcore/RequestHandler.hpp @@ -24,26 +24,20 @@ #include #include "RequestConfig.hpp" +#include "RequestHandlerBase.hpp" class QNetworkReply; namespace QodeAssist::LLMCore { -class RequestHandler : public QObject +class RequestHandler : public RequestHandlerBase { - Q_OBJECT - public: explicit RequestHandler(QObject *parent = nullptr); - void sendLLMRequest(const LLMConfig &config, const QJsonObject &request); + void sendLLMRequest(const LLMConfig &config, const QJsonObject &request) override; + bool cancelRequest(const QString &id) override; void handleLLMResponse(QNetworkReply *reply, const QJsonObject &request, const LLMConfig &config); - bool cancelRequest(const QString &id); - -signals: - void completionReceived(const QString &completion, const QJsonObject &request, bool isComplete); - void requestFinished(const QString &requestId, bool success, const QString &errorString); - void requestCancelled(const QString &id); private: QNetworkAccessManager *m_manager; diff --git a/llmcore/RequestHandlerBase.cpp b/llmcore/RequestHandlerBase.cpp new file mode 100644 index 0000000..3db5f18 --- /dev/null +++ b/llmcore/RequestHandlerBase.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2024 Petr Mironychev + * + * 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 . + */ + +#include "RequestHandlerBase.hpp" + +namespace QodeAssist::LLMCore { + +RequestHandlerBase::RequestHandlerBase(QObject *parent) + : QObject(parent) +{} + +RequestHandlerBase::~RequestHandlerBase() = default; + +} // namespace QodeAssist::LLMCore diff --git a/llmcore/RequestHandlerBase.hpp b/llmcore/RequestHandlerBase.hpp new file mode 100644 index 0000000..146b9c7 --- /dev/null +++ b/llmcore/RequestHandlerBase.hpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2024 Petr Mironychev + * + * 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 "RequestConfig.hpp" +#include +#include + +namespace QodeAssist::LLMCore { + +class RequestHandlerBase : public QObject +{ + Q_OBJECT + +public: + explicit RequestHandlerBase(QObject *parent = nullptr); + ~RequestHandlerBase() override; + + virtual void sendLLMRequest(const LLMConfig &config, const QJsonObject &request) = 0; + virtual bool cancelRequest(const QString &id) = 0; + +signals: + void completionReceived(const QString &completion, const QJsonObject &request, bool isComplete); + void requestFinished(const QString &requestId, bool success, const QString &errorString); + void requestCancelled(const QString &id); +}; + +} // namespace QodeAssist::LLMCore diff --git a/qodeassist.cpp b/qodeassist.cpp index 802f9f4..ed727b0 100644 --- a/qodeassist.cpp +++ b/qodeassist.cpp @@ -72,6 +72,7 @@ public: QodeAssistPlugin() : m_updater(new PluginUpdater(this)) , m_promptProvider(LLMCore::PromptTemplateManager::instance()) + , m_requestHandler(this) {} ~QodeAssistPlugin() final @@ -144,6 +145,7 @@ public: Settings::codeCompletionSettings(), LLMCore::ProvidersManager::instance(), &m_promptProvider, + m_requestHandler, m_performanceLogger)); } @@ -186,6 +188,7 @@ private: QPointer m_qodeAssistClient; LLMCore::PromptProviderFim m_promptProvider; + LLMCore::RequestHandler m_requestHandler{this}; RequestPerformanceLogger m_performanceLogger; QPointer m_chatOutputPane; QPointer m_navigationPanel;