Skip to content

Commit

Permalink
Optimize request handler
Browse files Browse the repository at this point in the history
  • Loading branch information
Palm1r committed Sep 17, 2024
1 parent 35c4ac6 commit 36f29ca
Show file tree
Hide file tree
Showing 12 changed files with 30 additions and 30 deletions.
12 changes: 9 additions & 3 deletions LLMClientInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,14 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request)
config.promptTemplate = PromptTemplateManager::instance().getCurrentTemplate();
config.url = QUrl(QString("%1%2").arg(Settings::generalSettings().url(),
Settings::generalSettings().endPoint()));
config.modelName = Settings::generalSettings().modelName.value();

m_requestHandler.sendLLMRequest(config, request, updatedContext);
config.providerRequest = {{"model", Settings::generalSettings().modelName.value()},
{"stream", true}};

config.promptTemplate->prepareRequest(config.providerRequest, updatedContext);
config.provider->prepareRequest(config.providerRequest);

m_requestHandler.sendLLMRequest(config, request);
}

ContextData LLMClientInterface::prepareContext(const QJsonObject &request,
Expand Down Expand Up @@ -183,9 +188,10 @@ ContextData LLMClientInterface::prepareContext(const QJsonObject &request,

void LLMClientInterface::sendCompletionToClient(const QString &completion,
const QJsonObject &request,
const QJsonObject &position,
bool isComplete)
{
QJsonObject position = request["params"].toObject()["doc"].toObject()["position"].toObject();

QJsonObject response;
response["jsonrpc"] = "2.0";
response[LanguageServerProtocol::idKey] = request["id"];
Expand Down
1 change: 0 additions & 1 deletion LLMClientInterface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ class LLMClientInterface : public LanguageClient::BaseClientInterface

void sendCompletionToClient(const QString &completion,
const QJsonObject &request,
const QJsonObject &position,
bool isComplete);

void handleCompletion(const QJsonObject &request);
Expand Down
2 changes: 1 addition & 1 deletion core/LLMRequestConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ struct LLMConfig
QUrl url;
Providers::LLMProvider *provider;
Templates::PromptTemplate *promptTemplate;
QString modelName;
QJsonObject providerRequest;
};

} // namespace QodeAssist
26 changes: 8 additions & 18 deletions core/LLMRequestHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,24 +31,18 @@ LLMRequestHandler::LLMRequestHandler(QObject *parent)
, m_manager(new QNetworkAccessManager(this))
{}

void LLMRequestHandler::sendLLMRequest(const LLMConfig &config,
const QJsonObject &request,
const ContextData &prompt)
void LLMRequestHandler::sendLLMRequest(const LLMConfig &config, const QJsonObject &request)
{
QJsonObject providerRequest = {{"model", config.modelName}, {"stream", true}};

config.promptTemplate->prepareRequest(providerRequest, prompt);
config.provider->prepareRequest(providerRequest);

logMessage(QString("Sending request to llm: \nurl: %1\nRequest body:\n%2")
.arg(config.url.toString(),
QString::fromUtf8(
QJsonDocument(providerRequest).toJson(QJsonDocument::Indented))));
QJsonDocument(config.providerRequest).toJson(QJsonDocument::Indented))));

QNetworkRequest networkRequest(config.url);
prepareNetworkRequest(networkRequest, providerRequest);
prepareNetworkRequest(networkRequest, config.providerRequest);

QNetworkReply *reply = m_manager->post(networkRequest, QJsonDocument(providerRequest).toJson());
QNetworkReply *reply = m_manager->post(networkRequest,
QJsonDocument(config.providerRequest).toJson());
if (!reply) {
logMessage("Error: Failed to create network reply");
return;
Expand Down Expand Up @@ -82,8 +76,6 @@ void LLMRequestHandler::handleLLMResponse(QNetworkReply *reply,

bool isComplete = config.provider->handleResponse(reply, accumulatedResponse);

QJsonObject position = request["params"].toObject()["doc"].toObject()["position"].toObject();

if (!Settings::generalSettings().multiLineCompletion()
&& processSingleLineCompletion(reply, request, accumulatedResponse, config)) {
return;
Expand All @@ -93,9 +85,9 @@ void LLMRequestHandler::handleLLMResponse(QNetworkReply *reply,
if (isComplete) {
auto cleanedCompletion = removeStopWords(accumulatedResponse,
config.promptTemplate->stopWords());
emit completionReceived(cleanedCompletion, request, position, true);
emit completionReceived(cleanedCompletion, request, true);
} else {
emit completionReceived(accumulatedResponse, request, position, false);
emit completionReceived(accumulatedResponse, request, false);
}
m_accumulatedResponses.remove(reply);
}
Expand Down Expand Up @@ -137,9 +129,7 @@ bool LLMRequestHandler::processSingleLineCompletion(QNetworkReply *reply,
singleLineCompletion = removeStopWords(singleLineCompletion,
config.promptTemplate->stopWords());

QJsonObject position = request["params"].toObject()["doc"].toObject()["position"].toObject();

emit completionReceived(singleLineCompletion, request, position, true);
emit completionReceived(singleLineCompletion, request, true);
m_accumulatedResponses.remove(reply);
reply->abort();

Expand Down
9 changes: 2 additions & 7 deletions core/LLMRequestHandler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,14 @@ class LLMRequestHandler : public QObject
public:
explicit LLMRequestHandler(QObject *parent = nullptr);

void sendLLMRequest(const LLMConfig &config,
const QJsonObject &request,
const ContextData &prompt);
void sendLLMRequest(const LLMConfig &config, const QJsonObject &request);
void handleLLMResponse(QNetworkReply *reply,
const QJsonObject &request,
const LLMConfig &config);
bool cancelRequest(const QString &id);

signals:
void completionReceived(const QString &completion,
const QJsonObject &request,
const QJsonObject &position,
bool isComplete);
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);

Expand Down
1 change: 1 addition & 0 deletions providers/LLMProvider.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class LLMProvider
virtual QString completionEndpoint() const = 0;

virtual void prepareRequest(QJsonObject &request) = 0;
virtual void prepareChatRequest(QJsonObject &request) = 0;
virtual bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) = 0;
virtual QList<QString> getInstalledModels(const Utils::Environment &env) = 0;
};
Expand Down
2 changes: 2 additions & 0 deletions providers/LMStudioProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ void LMStudioProvider::prepareRequest(QJsonObject &request)
request["presence_penalty"] = settings.presencePenalty();
}

void LMStudioProvider::prepareChatRequest(QJsonObject &request) {}

bool LMStudioProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse)
{
bool isComplete = false;
Expand Down
1 change: 1 addition & 0 deletions providers/LMStudioProvider.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class LMStudioProvider : public LLMProvider
QString url() const override;
QString completionEndpoint() const override;
void prepareRequest(QJsonObject &request) override;
void prepareChatRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override;
};
Expand Down
2 changes: 2 additions & 0 deletions providers/OllamaProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ void OllamaProvider::prepareRequest(QJsonObject &request)
request["options"] = options;
}

void OllamaProvider::prepareChatRequest(QJsonObject &request) {}

bool OllamaProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse)
{
bool isComplete = false;
Expand Down
1 change: 1 addition & 0 deletions providers/OllamaProvider.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class OllamaProvider : public LLMProvider
QString url() const override;
QString completionEndpoint() const override;
void prepareRequest(QJsonObject &request) override;
void prepareChatRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override;
};
Expand Down
2 changes: 2 additions & 0 deletions providers/OpenAICompatProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ void OpenAICompatProvider::prepareRequest(QJsonObject &request)
}
}

void OpenAICompatProvider::prepareChatRequest(QJsonObject &request) {}

bool OpenAICompatProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse)
{
bool isComplete = false;
Expand Down
1 change: 1 addition & 0 deletions providers/OpenAICompatProvider.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class OpenAICompatProvider : public LLMProvider
QString url() const override;
QString completionEndpoint() const override;
void prepareRequest(QJsonObject &request) override;
void prepareChatRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override;
};
Expand Down

0 comments on commit 36f29ca

Please sign in to comment.