Skip to content

Commit 5a20650

Browse files
committed
#3407 add: start of ai autocompletion implementation
Signed-off-by: Patrizio Bekerle <[email protected]>
1 parent 13711af commit 5a20650

File tree

6 files changed

+362
-5
lines changed

6 files changed

+362
-5
lines changed

src/dialogs/settingsdialog.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,8 @@ void SettingsDialog::storeSettings() {
784784
CryptoService::instance()->encryptToString(ui->openAiApiKeyLineEdit->text()));
785785
settings.setValue(QStringLiteral("ai/responseTimeout"),
786786
ui->openAiResponseTimeoutSpinBox->value());
787+
settings.setValue(QStringLiteral("ai/autocompleteEnabled"),
788+
ui->aiAutocompleteCheckBox->isChecked());
787789
}
788790

789791
/**
@@ -1266,6 +1268,8 @@ void SettingsDialog::readSettings() {
12661268

12671269
ui->openAiApiKeyLineEdit->setText(CryptoService::instance()->decryptToString(
12681270
settings.value(QStringLiteral("ai/openai/apiKey")).toString()));
1271+
ui->aiAutocompleteCheckBox->setChecked(
1272+
settings.value(QStringLiteral("ai/autocompleteEnabled"), false).toBool());
12691273

12701274
ui->openAiResponseTimeoutSpinBox->setValue(OpenAiService::getResponseTimeout());
12711275
}

src/dialogs/settingsdialog.ui

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7395,6 +7395,16 @@ Just test yourself if you get sync conflicts and set a higher value if so.</stri
73957395
</property>
73967396
</spacer>
73977397
</item>
7398+
<item row="1" column="0" colspan="3">
7399+
<widget class="QCheckBox" name="aiAutocompleteCheckBox">
7400+
<property name="toolTip">
7401+
<string>Enable AI-powered text autocomplete suggestions in the note editor. Suggestions can be accepted with Tab or dismissed with Escape.</string>
7402+
</property>
7403+
<property name="text">
7404+
<string>Enable AI autocomplete in note editor</string>
7405+
</property>
7406+
</widget>
7407+
</item>
73987408
</layout>
73997409
</widget>
74007410
</item>

src/services/openaiservice.cpp

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,17 @@ OpenAiService::OpenAiService(QObject* parent) : QObject(parent) {
3434
initializeBackends();
3535
initializeCompleter(parent);
3636

37-
QObject::connect(_completer, &OpenAiCompleter::completed, this,
38-
[this](const QString& result) { qDebug() << "'result': " << result; });
39-
QObject::connect(
40-
_completer, &OpenAiCompleter::errorOccurred, this,
41-
[this](const QString& errorString) { qDebug() << "'errorString': " << errorString; });
37+
QObject::connect(_completer, &OpenAiCompleter::completed, this, [this](const QString& result) {
38+
qDebug() << "'result': " << result;
39+
qDebug() << "OpenAiService - emitting autocompleteCompleted signal";
40+
emit autocompleteCompleted(result);
41+
qDebug() << "OpenAiService - autocompleteCompleted signal emitted";
42+
});
43+
QObject::connect(_completer, &OpenAiCompleter::errorOccurred, this,
44+
[this](const QString& errorString) {
45+
qDebug() << "'errorString': " << errorString;
46+
emit autocompleteErrorOccurred(errorString);
47+
});
4248
}
4349

4450
void OpenAiService::initializeCompleter(QObject* parent) {
@@ -271,6 +277,31 @@ bool OpenAiService::getEnabled() {
271277
return settings.value(QStringLiteral("ai/enabled")).toBool();
272278
}
273279

280+
bool OpenAiService::setAutocompleteEnabled(bool enabled) {
281+
SettingsService settings;
282+
settings.setValue(QStringLiteral("ai/autocompleteEnabled"), enabled);
283+
284+
return true;
285+
}
286+
287+
bool OpenAiService::getAutocompleteEnabled() {
288+
SettingsService settings;
289+
return settings.value(QStringLiteral("ai/autocompleteEnabled"), false).toBool();
290+
}
291+
292+
void OpenAiService::completeAsync(const QString& prompt) {
293+
qDebug() << __func__ << " - called with prompt:" << prompt.left(50);
294+
295+
if (!getEnabled() || !getAutocompleteEnabled()) {
296+
qDebug() << __func__ << " - not enabled, returning";
297+
return;
298+
}
299+
300+
qDebug() << __func__ << " - calling _completer->complete()";
301+
_completer->complete(prompt);
302+
qDebug() << __func__ << " - _completer->complete() called";
303+
}
304+
274305
QString OpenAiService::complete(const QString& prompt) {
275306
if (!getEnabled()) {
276307
return tr("AI system is disabled. Please enable it in the main menu or the AI toolbar.");

src/services/openaiservice.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,19 @@ class OpenAiService : public QObject {
6262
QString getModelId();
6363
static bool setEnabled(bool enabled);
6464
static bool getEnabled();
65+
static bool setAutocompleteEnabled(bool enabled);
66+
static bool getAutocompleteEnabled();
6567
QString complete(const QString& prompt);
68+
void completeAsync(const QString& prompt);
6669
void setApiKeyForCurrentBackend();
6770
void setApiKeyForCurrentBackend(const QString& apiKey);
6871
QMap<QString, QString> getBackendNames();
6972
QString getApiBaseUrlForBackend(const QString& backendId);
7073

74+
signals:
75+
void autocompleteCompleted(QString result);
76+
void autocompleteErrorOccurred(QString errorString);
77+
7178
private:
7279
QMap<QString, QStringList> _backendModels;
7380
QMap<QString, QString> _backendApiBaseUrls;

0 commit comments

Comments
 (0)