C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 9s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Failing after 11s
JS/TS / lint (pull_request) Successful in 9s
Python / static (pull_request) Failing after 31s
Rust / build (pull_request) Successful in 49s
Python / verify (pull_request) Successful in 1m37s
Rust / fmt (pull_request) Successful in 27s
Rust / clippy (pull_request) Successful in 58s
92 lines
2.6 KiB
C++
92 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QtQml>
|
|
|
|
#include "chatstore.hpp"
|
|
|
|
class QQmlEngine;
|
|
class QJSEngine;
|
|
|
|
namespace ZShell::llm {
|
|
|
|
class LlmClient;
|
|
|
|
class Chat : public QObject {
|
|
Q_OBJECT
|
|
QML_ELEMENT
|
|
QML_SINGLETON
|
|
|
|
Q_PROPERTY(bool busy READ busy NOTIFY busyChanged)
|
|
Q_PROPERTY(QString endpoint READ endpoint NOTIFY endpointChanged)
|
|
Q_PROPERTY(QString model READ model NOTIFY modelChanged)
|
|
Q_PROPERTY(
|
|
QStringList availableModels READ availableModels NOTIFY
|
|
availableModelsChanged)
|
|
Q_PROPERTY(int contextSize READ contextSize NOTIFY contextSizeChanged)
|
|
Q_PROPERTY(
|
|
bool toolsEnabled READ toolsEnabled WRITE setToolsEnabled NOTIFY
|
|
toolsEnabledChanged)
|
|
Q_PROPERTY(
|
|
bool sandboxEnabled READ sandboxEnabled WRITE setSandboxEnabled NOTIFY
|
|
sandboxEnabledChanged)
|
|
Q_PROPERTY(bool error READ error NOTIFY errorChanged)
|
|
Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY errorChanged)
|
|
Q_PROPERTY(QString serverError READ serverError NOTIFY serverErrorChanged)
|
|
Q_PROPERTY(ZShell::llm::ChatStore* chats READ chats CONSTANT)
|
|
Q_PROPERTY(
|
|
QString streamingChatId READ streamingChatId NOTIFY
|
|
streamingChatIdChanged)
|
|
|
|
public:
|
|
explicit Chat(QObject* parent = nullptr);
|
|
|
|
[[nodiscard]] bool busy() const;
|
|
[[nodiscard]] QString endpoint() const;
|
|
[[nodiscard]] QString model() const;
|
|
[[nodiscard]] QStringList availableModels() const;
|
|
[[nodiscard]] int contextSize() const;
|
|
[[nodiscard]] bool toolsEnabled() const;
|
|
void setToolsEnabled(bool value);
|
|
[[nodiscard]] bool sandboxEnabled() const;
|
|
void setSandboxEnabled(bool value);
|
|
[[nodiscard]] bool error() const { return m_hasError; }
|
|
[[nodiscard]] QString errorMessage() const { return m_errorMessage; }
|
|
[[nodiscard]] QString serverError() const;
|
|
[[nodiscard]] ChatStore* chats() const { return m_store; }
|
|
[[nodiscard]] QString streamingChatId() const;
|
|
|
|
Q_INVOKABLE void stop();
|
|
Q_INVOKABLE void dismissError();
|
|
Q_INVOKABLE void refreshModels();
|
|
Q_INVOKABLE void refreshFromServer();
|
|
Q_INVOKABLE void selectModel(const QString& id);
|
|
|
|
static Chat* create(QQmlEngine*, QJSEngine*);
|
|
|
|
Q_SIGNALS:
|
|
void busyChanged();
|
|
void endpointChanged();
|
|
void modelChanged();
|
|
void availableModelsChanged();
|
|
void contextSizeChanged();
|
|
void toolsEnabledChanged();
|
|
void sandboxEnabledChanged();
|
|
void errorOccurred(const QString& message);
|
|
void errorChanged();
|
|
void serverErrorChanged();
|
|
void streamingChatIdChanged();
|
|
|
|
private:
|
|
ChatStore* m_store = nullptr;
|
|
LlmClient* m_client = nullptr;
|
|
bool m_hasError = false;
|
|
QString m_errorMessage;
|
|
|
|
static Chat* s_instance;
|
|
};
|
|
|
|
} // namespace ZShell::llm
|