Add stopping chat requests and button

This commit is contained in:
Petr Mironychev 2024-10-17 00:03:12 +02:00
parent 2257e6e45f
commit 9c2516cd4c
7 changed files with 33 additions and 3 deletions

View File

@ -187,4 +187,9 @@ int ChatModel::tokensThreshold() const
return settings.chatTokensThreshold(); return settings.chatTokensThreshold();
} }
QString ChatModel::lastMessageId() const
{
return !m_messages.isEmpty() ? m_messages.last().id : "";
}
} // namespace QodeAssist::Chat } // namespace QodeAssist::Chat

View File

@ -66,6 +66,7 @@ public:
int tokensThreshold() const; int tokensThreshold() const;
QString currentModel() const; QString currentModel() const;
QString lastMessageId() const;
signals: signals:
void totalTokensChanged(); void totalTokensChanged();

View File

@ -60,6 +60,11 @@ void ChatRootView::copyToClipboard(const QString &text)
QGuiApplication::clipboard()->setText(text); QGuiApplication::clipboard()->setText(text);
} }
void ChatRootView::cancelRequest()
{
m_clientInterface->cancelRequest();
}
void ChatRootView::generateColors() void ChatRootView::generateColors()
{ {
QColor baseColor = backgroundColor(); QColor baseColor = backgroundColor();

View File

@ -52,6 +52,7 @@ public:
public slots: public slots:
void sendMessage(const QString &message) const; void sendMessage(const QString &message) const;
void copyToClipboard(const QString &text); void copyToClipboard(const QString &text);
void cancelRequest();
signals: signals:
void chatModelChanged(); void chatModelChanged();

View File

@ -56,6 +56,8 @@ ClientInterface::~ClientInterface() = default;
void ClientInterface::sendMessage(const QString &message) void ClientInterface::sendMessage(const QString &message)
{ {
cancelRequest();
LOG_MESSAGE("Sending message: " + message); LOG_MESSAGE("Sending message: " + message);
LOG_MESSAGE("chatProvider " + Settings::generalSettings().chatLlmProviders.stringValue()); LOG_MESSAGE("chatProvider " + Settings::generalSettings().chatLlmProviders.stringValue());
LOG_MESSAGE("chatTemplate " + Settings::generalSettings().chatPrompts.stringValue()); LOG_MESSAGE("chatTemplate " + Settings::generalSettings().chatPrompts.stringValue());
@ -74,6 +76,9 @@ void ClientInterface::sendMessage(const QString &message)
providerRequest["stream"] = true; providerRequest["stream"] = true;
providerRequest["messages"] = m_chatModel->prepareMessagesForRequest(context); providerRequest["messages"] = m_chatModel->prepareMessagesForRequest(context);
if (!chatTemplate || !chatProvider) {
LOG_MESSAGE("Check settings, provider or template are not set");
}
chatTemplate->prepareRequest(providerRequest, context); chatTemplate->prepareRequest(providerRequest, context);
chatProvider->prepareRequest(providerRequest, LLMCore::RequestType::Chat); chatProvider->prepareRequest(providerRequest, LLMCore::RequestType::Chat);
@ -89,7 +94,6 @@ void ClientInterface::sendMessage(const QString &message)
QJsonObject request; QJsonObject request;
request["id"] = QUuid::createUuid().toString(); request["id"] = QUuid::createUuid().toString();
m_accumulatedResponse.clear();
m_chatModel->addMessage(message, ChatModel::ChatRole::User, ""); m_chatModel->addMessage(message, ChatModel::ChatRole::User, "");
m_requestHandler->sendLLMRequest(config, request); m_requestHandler->sendLLMRequest(config, request);
} }
@ -97,10 +101,15 @@ void ClientInterface::sendMessage(const QString &message)
void ClientInterface::clearMessages() void ClientInterface::clearMessages()
{ {
m_chatModel->clear(); m_chatModel->clear();
m_accumulatedResponse.clear();
LOG_MESSAGE("Chat history cleared"); LOG_MESSAGE("Chat history cleared");
} }
void ClientInterface::cancelRequest()
{
auto id = m_chatModel->lastMessageId();
m_requestHandler->cancelRequest(id);
}
void ClientInterface::handleLLMResponse(const QString &response, void ClientInterface::handleLLMResponse(const QString &response,
const QJsonObject &request, const QJsonObject &request,
bool isComplete) bool isComplete)

View File

@ -38,6 +38,7 @@ public:
void sendMessage(const QString &message); void sendMessage(const QString &message);
void clearMessages(); void clearMessages();
void cancelRequest();
signals: signals:
void errorOccurred(const QString &error); void errorOccurred(const QString &error);
@ -46,7 +47,6 @@ private:
void handleLLMResponse(const QString &response, const QJsonObject &request, bool isComplete); void handleLLMResponse(const QString &response, const QJsonObject &request, bool isComplete);
LLMCore::RequestHandler *m_requestHandler; LLMCore::RequestHandler *m_requestHandler;
QString m_accumulatedResponse;
ChatModel *m_chatModel; ChatModel *m_chatModel;
}; };

View File

@ -121,6 +121,15 @@ ChatRootView {
text: qsTr("Send") text: qsTr("Send")
onClicked: sendChatMessage() onClicked: sendChatMessage()
} }
Button {
id: stopButton
Layout.alignment: Qt.AlignBottom
text: qsTr("Stop")
onClicked: root.cancelRequest()
}
Button { Button {
id: clearButton id: clearButton