new chatlistview component, file attachments, performance & primitive test
This commit is contained in:
+38
-10
@@ -4,6 +4,7 @@
|
||||
#include "filetool.hpp"
|
||||
#include "llm.hpp"
|
||||
#include "llmclient.hpp"
|
||||
#include "shelltool.hpp"
|
||||
#include "webfetchtool.hpp"
|
||||
|
||||
#include <QDebug>
|
||||
@@ -19,12 +20,14 @@ Chat::Chat(QObject* parent)
|
||||
m_store->setLlmClient(m_client);
|
||||
m_client->tools()->registerTool(new WebFetchTool(m_client->tools()));
|
||||
m_client->tools()->registerTool(new FileReadTool(m_client->tools()));
|
||||
m_client->tools()->registerTool(new ShellTool(m_client, m_client->tools()));
|
||||
|
||||
const auto* llm = config::Config::instance()->llm();
|
||||
m_client->setEndpoint(llm->endpoint());
|
||||
m_client->setModel(llm->model());
|
||||
m_client->setTemperature(llm->temperature());
|
||||
m_client->setToolsEnabled(llm->tools());
|
||||
m_client->setSandboxEnabled(llm->sandbox());
|
||||
|
||||
connect(llm, &config::Llm::endpointChanged, this, [this, llm]() {
|
||||
m_client->setEndpoint(llm->endpoint());
|
||||
@@ -38,11 +41,16 @@ Chat::Chat(QObject* parent)
|
||||
connect(llm, &config::Llm::toolsChanged, this, [this, llm]() {
|
||||
m_client->setToolsEnabled(llm->tools());
|
||||
});
|
||||
connect(llm, &config::Llm::sandboxChanged, this, [this, llm]() {
|
||||
m_client->setSandboxEnabled(llm->sandbox());
|
||||
Q_EMIT sandboxEnabledChanged();
|
||||
});
|
||||
|
||||
connect(m_client, &LlmClient::busyChanged, this, [this]() {
|
||||
if (m_client->busy() && !m_lastError.isEmpty()) {
|
||||
m_lastError.clear();
|
||||
Q_EMIT lastErrorChanged();
|
||||
if (m_client->busy() && (m_hasError || !m_errorMessage.isEmpty())) {
|
||||
m_hasError = false;
|
||||
m_errorMessage.clear();
|
||||
Q_EMIT errorChanged();
|
||||
}
|
||||
Q_EMIT busyChanged();
|
||||
});
|
||||
@@ -73,10 +81,16 @@ Chat::Chat(QObject* parent)
|
||||
&LlmClient::errorOccurred,
|
||||
this,
|
||||
[this](const QString& message) {
|
||||
m_lastError = message;
|
||||
Q_EMIT lastErrorChanged();
|
||||
m_hasError = !message.isEmpty();
|
||||
m_errorMessage = message;
|
||||
Q_EMIT errorChanged();
|
||||
Q_EMIT errorOccurred(message);
|
||||
});
|
||||
connect(
|
||||
m_client,
|
||||
&LlmClient::serverErrorChanged,
|
||||
this,
|
||||
&Chat::serverErrorChanged);
|
||||
connect(
|
||||
m_store,
|
||||
&ChatStore::sessionRemoved,
|
||||
@@ -134,11 +148,24 @@ void Chat::setToolsEnabled(bool value) {
|
||||
config->llm()->set_tools(value);
|
||||
}
|
||||
|
||||
bool Chat::sandboxEnabled() const {
|
||||
return m_client->sandboxEnabled();
|
||||
}
|
||||
|
||||
void Chat::setSandboxEnabled(bool value) {
|
||||
m_client->setSandboxEnabled(value);
|
||||
if (auto* config = config::Config::instance())
|
||||
config->llm()->set_sandbox(value);
|
||||
}
|
||||
|
||||
QString Chat::serverError() const {
|
||||
return m_client->serverError();
|
||||
}
|
||||
|
||||
QString Chat::streamingChatId() const {
|
||||
return m_client->streamingChatId();
|
||||
}
|
||||
|
||||
|
||||
Chat* Chat::s_instance = nullptr;
|
||||
|
||||
Chat* Chat::create(QQmlEngine*, QJSEngine*) {
|
||||
@@ -151,9 +178,10 @@ void Chat::stop() {
|
||||
}
|
||||
|
||||
void Chat::dismissError() {
|
||||
if (m_lastError.isEmpty()) return;
|
||||
m_lastError.clear();
|
||||
Q_EMIT lastErrorChanged();
|
||||
if (!m_hasError && m_errorMessage.isEmpty()) return;
|
||||
m_hasError = false;
|
||||
m_errorMessage.clear();
|
||||
Q_EMIT errorChanged();
|
||||
}
|
||||
|
||||
void Chat::refreshModels() {
|
||||
@@ -161,7 +189,7 @@ void Chat::refreshModels() {
|
||||
}
|
||||
|
||||
void Chat::refreshFromServer() {
|
||||
m_client->refreshFromServer();
|
||||
m_client->refreshAllStates();
|
||||
}
|
||||
|
||||
void Chat::selectModel(const QString& id) {
|
||||
|
||||
Reference in New Issue
Block a user