kateai/kateai.h
2024-06-11 14:15:08 +02:00

80 lines
1.9 KiB
C++

#pragma once
#include <ktexteditor/cursor.h>
#include <unordered_map>
#include <KTextEditor/MainWindow>
#include <KTextEditor/Plugin>
#include <KXMLGUIClient>
#include <QSet>
#include <QAction>
#include <QPointer>
#include <QtCore>
#include "backend.h"
class KateAiPlugin : public KTextEditor::Plugin
{
Q_OBJECT
private:
QPointer<AiBackend> m_ai;
QUrl m_serverUrl;
private:
int configPages() const override
{
return 1;
}
KTextEditor::ConfigPage *configPage(int number = 0, QWidget *parent = nullptr) override;
public:
explicit KateAiPlugin(QObject *parent = nullptr, const QList<QVariant> & = QList<QVariant>());
~KateAiPlugin() override;
QObject *createView(KTextEditor::MainWindow *mainWindow) override;
void readConfig();
void reconnect();
Q_SIGNAL void instructChanged();
};
class KateAiPluginView : public QObject, public KXMLGUIClient
{
Q_OBJECT
private:
struct Request
{
KTextEditor::Cursor cursor;
QPointer<KTextEditor::Document> document;
};
KTextEditor::MainWindow *m_mainWindow;
inline static QPointer<AiBackend> m_ai;
inline static bool m_useInstruct = false;
inline static QString m_systemPrompt;
inline static int m_maxContext;
inline static QString m_lastInstruct;
private:
void generate();
void gotResponse(AiBackend::Response respons);
static QStringList getIncludePaths(const QString& text);
QString assembleContext(QPointer<KTextEditor::Document> document, const KTextEditor::Cursor& cursor, const QString& instruction = QString());
QPointer<KTextEditor::Document> activeDocument() const;
KTextEditor::Cursor getCurrentCursor() const;
QHash<uint32_t, Request> m_requests;
public:
KateAiPluginView(KateAiPlugin *plugin, KTextEditor::MainWindow *mainwindow);
~KateAiPluginView() override;
static void setInstruct(bool instruct);
static void setSystemPrompt(const QString& in);
static void setMaxContext(int maxContext);
static void setAi(QPointer<AiBackend> ai);
Q_SIGNAL void reconnect();
};