Version 0.2.1

- Fix getting models list from providers
- Fix clearing message history in chat
- Remove unnecessary logs
This commit is contained in:
Petr Mironychev 2024-09-24 09:31:40 +02:00 committed by GitHub
commit d7f0cc92e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 25 additions and 17 deletions

View File

@ -1,6 +1,6 @@
{ {
"Name" : "QodeAssist", "Name" : "QodeAssist",
"Version" : "0.2.0", "Version" : "0.2.1",
"CompatVersion" : "${IDE_VERSION_COMPAT}", "CompatVersion" : "${IDE_VERSION_COMPAT}",
"Vendor" : "Petr Mironychev", "Vendor" : "Petr Mironychev",
"Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd", "Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd",

View File

@ -103,10 +103,17 @@ void ChatClientInterface::sendMessage(const QString &message)
m_requestHandler->sendLLMRequest(config, request); m_requestHandler->sendLLMRequest(config, request);
} }
void ChatClientInterface::clearMessages()
{
m_chatHistory = {};
m_accumulatedResponse.clear();
m_pendingMessage.clear();
logMessage("Chat history cleared");
}
void ChatClientInterface::handleLLMResponse(const QString &response, bool isComplete) void ChatClientInterface::handleLLMResponse(const QString &response, bool isComplete)
{ {
m_accumulatedResponse += response; m_accumulatedResponse += response;
logMessage("Accumulated response: " + m_accumulatedResponse);
if (isComplete) { if (isComplete) {
logMessage("Message completed. Final response: " + m_accumulatedResponse); logMessage("Message completed. Final response: " + m_accumulatedResponse);

View File

@ -35,6 +35,7 @@ public:
~ChatClientInterface(); ~ChatClientInterface();
void sendMessage(const QString &message); void sendMessage(const QString &message);
void clearMessages();
signals: signals:
void messageReceived(const QString &message); void messageReceived(const QString &message);

View File

@ -77,7 +77,6 @@ void ChatWidget::sendMessage()
void ChatWidget::receiveMessage(const QString &message) void ChatWidget::receiveMessage(const QString &message)
{ {
logMessage("Received message: " + message);
updateLastAIMessage(message); updateLastAIMessage(message);
} }
@ -90,7 +89,6 @@ void ChatWidget::receivePartialMessage(const QString &partialMessage)
void ChatWidget::onMessageCompleted() void ChatWidget::onMessageCompleted()
{ {
logMessage("Message completed. Final response: " + m_currentAIResponse);
updateLastAIMessage(m_currentAIResponse); updateLastAIMessage(m_currentAIResponse);
m_currentAIResponse.clear(); m_currentAIResponse.clear();
scrollToBottom(); scrollToBottom();
@ -107,14 +105,12 @@ void ChatWidget::addMessage(const QString &message, bool fromUser)
auto prefix = fromUser ? "You: " : "AI: "; auto prefix = fromUser ? "You: " : "AI: ";
QString timestamp = m_showTimestamp ? QDateTime::currentDateTime().toString("[hh:mm:ss] ") : ""; QString timestamp = m_showTimestamp ? QDateTime::currentDateTime().toString("[hh:mm:ss] ") : "";
QString fullMessage = timestamp + prefix + message; QString fullMessage = timestamp + prefix + message;
logMessage("Adding message to display: " + fullMessage);
m_chatDisplay->append(fullMessage); m_chatDisplay->append(fullMessage);
scrollToBottom(); scrollToBottom();
} }
void ChatWidget::updateLastAIMessage(const QString &message) void ChatWidget::updateLastAIMessage(const QString &message)
{ {
logMessage("Updating last AI message: " + message);
QTextCursor cursor = m_chatDisplay->textCursor(); QTextCursor cursor = m_chatDisplay->textCursor();
cursor.movePosition(QTextCursor::End); cursor.movePosition(QTextCursor::End);
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor); cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor);
@ -134,6 +130,7 @@ void ChatWidget::clear()
{ {
m_chatDisplay->clear(); m_chatDisplay->clear();
m_currentAIResponse.clear(); m_currentAIResponse.clear();
m_chatClient->clearMessages();
} }
void ChatWidget::scrollToBottom() void ChatWidget::scrollToBottom()

View File

@ -40,6 +40,7 @@ public:
void setShowTimestamp(bool show); void setShowTimestamp(bool show);
void receiveMessage(const QString &message); void receiveMessage(const QString &message);
private slots: private slots:
void sendMessage(); void sendMessage();
void receivePartialMessage(const QString &partialMessage); void receivePartialMessage(const QString &partialMessage);

View File

@ -39,7 +39,7 @@ public:
virtual void prepareRequest(QJsonObject &request) = 0; virtual void prepareRequest(QJsonObject &request) = 0;
virtual bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) = 0; virtual bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) = 0;
virtual QList<QString> getInstalledModels(const Utils::Environment &env) = 0; virtual QList<QString> getInstalledModels(const Utils::Environment &env, const QString &url) = 0;
}; };
} // namespace QodeAssist::Providers } // namespace QodeAssist::Providers

View File

@ -25,7 +25,6 @@
#include <QJsonObject> #include <QJsonObject>
#include <QNetworkReply> #include <QNetworkReply>
#include "PromptTemplateManager.hpp"
#include "QodeAssistUtils.hpp" #include "QodeAssistUtils.hpp"
#include "settings/PresetPromptsSettings.hpp" #include "settings/PresetPromptsSettings.hpp"
@ -115,11 +114,12 @@ bool LMStudioProvider::handleResponse(QNetworkReply *reply, QString &accumulated
return isComplete; return isComplete;
} }
QList<QString> LMStudioProvider::getInstalledModels(const Utils::Environment &env) QList<QString> LMStudioProvider::getInstalledModels(const Utils::Environment &env,
const QString &url)
{ {
QList<QString> models; QList<QString> models;
QNetworkAccessManager manager; QNetworkAccessManager manager;
QNetworkRequest request(QUrl(url() + "/v1/models")); QNetworkRequest request(QString("%1%2").arg(url, "/v1/models"));
QNetworkReply *reply = manager.get(request); QNetworkReply *reply = manager.get(request);

View File

@ -34,7 +34,7 @@ public:
QString chatEndpoint() const override; QString chatEndpoint() const override;
void prepareRequest(QJsonObject &request) override; void prepareRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override; bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override; QList<QString> getInstalledModels(const Utils::Environment &env, const QString &url) override;
}; };
} // namespace QodeAssist::Providers } // namespace QodeAssist::Providers

View File

@ -123,11 +123,11 @@ bool OllamaProvider::handleResponse(QNetworkReply *reply, QString &accumulatedRe
return isComplete; return isComplete;
} }
QList<QString> OllamaProvider::getInstalledModels(const Utils::Environment &env) QList<QString> OllamaProvider::getInstalledModels(const Utils::Environment &env, const QString &url)
{ {
QList<QString> models; QList<QString> models;
QNetworkAccessManager manager; QNetworkAccessManager manager;
QNetworkRequest request(QUrl(url() + "/api/tags")); QNetworkRequest request(QString("%1%2").arg(url, "/api/tags"));
QNetworkReply *reply = manager.get(request); QNetworkReply *reply = manager.get(request);
QEventLoop loop; QEventLoop loop;

View File

@ -34,7 +34,7 @@ public:
QString chatEndpoint() const override; QString chatEndpoint() const override;
void prepareRequest(QJsonObject &request) override; void prepareRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override; bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override; QList<QString> getInstalledModels(const Utils::Environment &env, const QString &url) override;
}; };
} // namespace QodeAssist::Providers } // namespace QodeAssist::Providers

View File

@ -118,7 +118,8 @@ bool OpenAICompatProvider::handleResponse(QNetworkReply *reply, QString &accumul
return isComplete; return isComplete;
} }
QList<QString> OpenAICompatProvider::getInstalledModels(const Utils::Environment &env) QList<QString> OpenAICompatProvider::getInstalledModels(const Utils::Environment &env,
const QString &url)
{ {
return QStringList(); return QStringList();
} }

View File

@ -34,7 +34,7 @@ public:
QString chatEndpoint() const override; QString chatEndpoint() const override;
void prepareRequest(QJsonObject &request) override; void prepareRequest(QJsonObject &request) override;
bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override; bool handleResponse(QNetworkReply *reply, QString &accumulatedResponse) override;
QList<QString> getInstalledModels(const Utils::Environment &env) override; QList<QString> getInstalledModels(const Utils::Environment &env, const QString &url) override;
}; };
} // namespace QodeAssist::Providers } // namespace QodeAssist::Providers

View File

@ -237,9 +237,10 @@ void GeneralSettings::showModelSelectionDialog(Utils::StringAspect *modelNameObj
Providers::LLMProvider *provider) Providers::LLMProvider *provider)
{ {
Utils::Environment env = Utils::Environment::systemEnvironment(); Utils::Environment env = Utils::Environment::systemEnvironment();
QString providerUrl = (modelNameObj == &modelName) ? url() : chatUrl();
if (provider) { if (provider) {
QStringList models = provider->getInstalledModels(env); QStringList models = provider->getInstalledModels(env, providerUrl);
bool ok; bool ok;
QString selectedModel = QInputDialog::getItem(Core::ICore::dialogParent(), QString selectedModel = QInputDialog::getItem(Core::ICore::dialogParent(),
Tr::tr("Select LLM Model"), Tr::tr("Select LLM Model"),