80 lines
1.9 KiB
C++
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();
|
|
};
|