diff --git a/QodeAssistSettings.cpp b/QodeAssistSettings.cpp index ac98392..85faa5c 100644 --- a/QodeAssistSettings.cpp +++ b/QodeAssistSettings.cpp @@ -45,47 +45,14 @@ QodeAssistSettings::QodeAssistSettings() { setAutoApply(false); - resetToDefaults.m_buttonText = Tr::tr("Reset to Defaults"); - - customJsonTemplate.setSettingsKey(Constants::CUSTOM_JSON_TEMPLATE); - customJsonTemplate.setLabelText("Custom JSON Template:"); - customJsonTemplate.setDisplayStyle(Utils::StringAspect::TextEditDisplay); - customJsonTemplate.setDefaultValue(R"({ - "prompt": "{{QODE_INSTRUCTIONS}}{{QODE_PREFIX}}{{QODE_SUFFIX}}", - "options": { - "temperature": 0.7, - "top_p": 0.95, - "top_k": 40, - "num_predict": 100, - "stop": [ - "<|endoftext|>", - "", - "", - "", - "" - ], - "frequency_penalty": 0, - "presence_penalty": 0 - }, - "stream": true -})"); - - saveCustomTemplateButton.m_buttonText = (Tr::tr("Save Custom Template to JSON")); - loadCustomTemplateButton.m_buttonText = (Tr::tr("Load Custom Template from JSON")); - readSettings(); - customJsonTemplate.setVisible(PromptTemplateManager::instance().getCurrentTemplate()->name() - == "Custom Template"); - setLayouter([this]() { using namespace Layouting; return Column{Group{title(Tr::tr("FIM Prompt Settings")), - Form{Column{Column{customJsonTemplate, - Row{saveCustomTemplateButton, - loadCustomTemplateButton, - Stretch{1}}}, + Form{Column{Column{ + }, // readFullFile, // maxFileThreshold, // readStringsBeforeCursor, @@ -110,19 +77,7 @@ QodeAssistSettings::QodeAssistSettings() void QodeAssistSettings::setupConnections() { - connect(&resetToDefaults, - &ButtonAspect::clicked, - this, - &QodeAssistSettings::resetSettingsToDefaults); - connect(&saveCustomTemplateButton, - &ButtonAspect::clicked, - this, - &QodeAssistSettings::saveCustomTemplate); - connect(&loadCustomTemplateButton, - &ButtonAspect::clicked, - this, - &QodeAssistSettings::loadCustomTemplate); } QStringList QodeAssistSettings::getInstalledModels() @@ -173,7 +128,7 @@ void QodeAssistSettings::resetSettingsToDefaults() // resetAspect(multiLineCompletion); // resetAspect(useFilePathInContext); // resetAspect(useSpecificInstructions); - resetAspect(customJsonTemplate); + // resetAspect(customJsonTemplate); // fimPrompts.setStringValue("StarCoder2"); // llmProviders.setStringValue("Ollama"); @@ -188,60 +143,60 @@ void QodeAssistSettings::resetSettingsToDefaults() void QodeAssistSettings::saveCustomTemplate() { - QString fileName = QFileDialog::getSaveFileName(nullptr, - Tr::tr("Save JSON Template"), - QString(), - Tr::tr("JSON Files (*.json)")); - if (fileName.isEmpty()) - return; + // QString fileName = QFileDialog::getSaveFileName(nullptr, + // Tr::tr("Save JSON Template"), + // QString(), + // Tr::tr("JSON Files (*.json)")); + // if (fileName.isEmpty()) + // return; - QFile file(fileName); - if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { - QTextStream out(&file); - out << customJsonTemplate.value(); - file.close(); - QMessageBox::information(nullptr, - Tr::tr("Save Successful"), - Tr::tr("JSON template has been saved successfully.")); - } else { - QMessageBox::critical(nullptr, - Tr::tr("Save Failed"), - Tr::tr("Failed to save JSON template.")); - } + // QFile file(fileName); + // if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { + // QTextStream out(&file); + // out << customJsonTemplate.value(); + // file.close(); + // QMessageBox::information(nullptr, + // Tr::tr("Save Successful"), + // Tr::tr("JSON template has been saved successfully.")); + // } else { + // QMessageBox::critical(nullptr, + // Tr::tr("Save Failed"), + // Tr::tr("Failed to save JSON template.")); + // } } void QodeAssistSettings::loadCustomTemplate() { - QString fileName = QFileDialog::getOpenFileName(nullptr, - Tr::tr("Load JSON Template"), - QString(), - Tr::tr("JSON Files (*.json)")); - if (fileName.isEmpty()) - return; + // QString fileName = QFileDialog::getOpenFileName(nullptr, + // Tr::tr("Load JSON Template"), + // QString(), + // Tr::tr("JSON Files (*.json)")); + // if (fileName.isEmpty()) + // return; - QFile file(fileName); - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&file); - QString jsonContent = in.readAll(); - file.close(); + // QFile file(fileName); + // if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + // QTextStream in(&file); + // QString jsonContent = in.readAll(); + // file.close(); - QJsonParseError parseError; - QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError); - if (parseError.error == QJsonParseError::NoError) { - customJsonTemplate.setValue(jsonContent); - QMessageBox::information(nullptr, - Tr::tr("Load Successful"), - Tr::tr("JSON template has been loaded successfully.")); - } else { - QMessageBox::critical(nullptr, - Tr::tr("Invalid JSON"), - Tr::tr("The selected file contains invalid JSON.")); - } - } else { - QMessageBox::critical(nullptr, - Tr::tr("Load Failed"), - Tr::tr("Failed to load JSON template.")); - } + // QJsonParseError parseError; + // QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError); + // if (parseError.error == QJsonParseError::NoError) { + // customJsonTemplate.setValue(jsonContent); + // QMessageBox::information(nullptr, + // Tr::tr("Load Successful"), + // Tr::tr("JSON template has been loaded successfully.")); + // } else { + // QMessageBox::critical(nullptr, + // Tr::tr("Invalid JSON"), + // Tr::tr("The selected file contains invalid JSON.")); + // } + // } else { + // QMessageBox::critical(nullptr, + // Tr::tr("Load Failed"), + // Tr::tr("Failed to load JSON template.")); + // } } class QodeAssistSettingsPage : public Core::IOptionsPage diff --git a/QodeAssistSettings.hpp b/QodeAssistSettings.hpp index eb7032c..753ea98 100644 --- a/QodeAssistSettings.hpp +++ b/QodeAssistSettings.hpp @@ -57,12 +57,6 @@ class QodeAssistSettings : public Utils::AspectContainer public: QodeAssistSettings(); - Utils::StringAspect customJsonTemplate{this}; - ButtonAspect saveCustomTemplateButton{this}; - ButtonAspect loadCustomTemplateButton{this}; - - ButtonAspect resetToDefaults{this}; - private: void setupConnections(); QStringList getInstalledModels(); diff --git a/settings/CustomPromptSettings.cpp b/settings/CustomPromptSettings.cpp index aa64ca7..1c98b67 100644 --- a/settings/CustomPromptSettings.cpp +++ b/settings/CustomPromptSettings.cpp @@ -19,7 +19,11 @@ #include "CustomPromptSettings.hpp" +#include +#include +#include #include +#include #include #include "QodeAssistConstants.hpp" @@ -39,12 +43,138 @@ CustomPromptSettings::CustomPromptSettings() setDisplayName(Tr::tr("Custom Prompt")); + customJsonLabel.setLabelText("Custom JSON Template:"); + customJsonLabel.setDisplayStyle(Utils::StringAspect::LabelDisplay); + + customJsonTemplate.setSettingsKey(Constants::CUSTOM_JSON_TEMPLATE); + customJsonTemplate.setDisplayStyle(Utils::StringAspect::TextEditDisplay); + customJsonTemplate.setDefaultValue(R"({ + "prompt": "{{QODE_INSTRUCTIONS}}{{QODE_PREFIX}}{{QODE_SUFFIX}}", + "options": { + "temperature": 0.7, + "top_p": 0.95, + "top_k": 40, + "num_predict": 100, + "stop": [ + "<|endoftext|>", + "", + "", + "", + "" + ], + "frequency_penalty": 0, + "presence_penalty": 0 + }, + "stream": true +})"); + saveCustomTemplateButton.m_buttonText = (Tr::tr("Save Custom Template to JSON")); + loadCustomTemplateButton.m_buttonText = (Tr::tr("Load Custom Template from JSON")); + resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults"); + + readSettings(); + + setupConnection(); + setLayouter([this]() { using namespace Layouting; - return Column{Stretch{1}}; + return Column{Row{customJsonLabel, Stretch{1}, resetToDefaults}, + Row{customJsonTemplate, + Column{saveCustomTemplateButton, loadCustomTemplateButton, Stretch{1}}}}; }); } +void CustomPromptSettings::setupConnection() +{ + connect(&resetToDefaults, + &ButtonAspect::clicked, + this, + &CustomPromptSettings::resetSettingsToDefaults); + connect(&saveCustomTemplateButton, + &ButtonAspect::clicked, + this, + &CustomPromptSettings::saveCustomTemplate); + connect(&loadCustomTemplateButton, + &ButtonAspect::clicked, + this, + &CustomPromptSettings::loadCustomTemplate); +} + +void CustomPromptSettings::resetSettingsToDefaults() +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question( + Core::ICore::dialogParent(), + Tr::tr("Reset Settings"), + Tr::tr("Are you sure you want to reset all settings to default values?"), + QMessageBox::Yes | QMessageBox::No); + + if (reply == QMessageBox::Yes) { + resetAspect(customJsonTemplate); + } + + QMessageBox::information(Core::ICore::dialogParent(), + Tr::tr("Settings Reset"), + Tr::tr("All settings have been reset to their default values.")); +} + +void CustomPromptSettings::saveCustomTemplate() +{ + QString fileName = QFileDialog::getSaveFileName(nullptr, + Tr::tr("Save JSON Template"), + QString(), + Tr::tr("JSON Files (*.json)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream out(&file); + out << customJsonTemplate.value(); + file.close(); + QMessageBox::information(nullptr, + Tr::tr("Save Successful"), + Tr::tr("JSON template has been saved successfully.")); + } else { + QMessageBox::critical(nullptr, + Tr::tr("Save Failed"), + Tr::tr("Failed to save JSON template.")); + } +} + +void CustomPromptSettings::loadCustomTemplate() +{ + QString fileName = QFileDialog::getOpenFileName(nullptr, + Tr::tr("Load JSON Template"), + QString(), + Tr::tr("JSON Files (*.json)")); + if (fileName.isEmpty()) + return; + + QFile file(fileName); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&file); + QString jsonContent = in.readAll(); + file.close(); + + QJsonParseError parseError; + QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError); + if (parseError.error == QJsonParseError::NoError) { + customJsonTemplate.setValue(jsonContent); + QMessageBox::information(nullptr, + Tr::tr("Load Successful"), + Tr::tr("JSON template has been loaded successfully.")); + } else { + QMessageBox::critical(nullptr, + Tr::tr("Invalid JSON"), + Tr::tr("The selected file contains invalid JSON.")); + } + } else { + QMessageBox::critical(nullptr, + Tr::tr("Load Failed"), + Tr::tr("Failed to load JSON template.")); + } +} + class CustomPromptSettingsPage : public Core::IOptionsPage { public: diff --git a/settings/CustomPromptSettings.hpp b/settings/CustomPromptSettings.hpp index 980b28d..0c83bda 100644 --- a/settings/CustomPromptSettings.hpp +++ b/settings/CustomPromptSettings.hpp @@ -19,6 +19,7 @@ #pragma once +#include "settings/SettingsUtils.hpp" #include namespace QodeAssist::Settings { @@ -27,6 +28,18 @@ class CustomPromptSettings : public Utils::AspectContainer { public: CustomPromptSettings(); + + Utils::StringAspect customJsonLabel{this}; + Utils::StringAspect customJsonTemplate{this}; + ButtonAspect saveCustomTemplateButton{this}; + ButtonAspect loadCustomTemplateButton{this}; + ButtonAspect resetToDefaults{this}; + +private: + void setupConnection(); + void resetSettingsToDefaults(); + void saveCustomTemplate(); + void loadCustomTemplate(); }; CustomPromptSettings &customPromptSettings(); diff --git a/templates/CustomTemplate.hpp b/templates/CustomTemplate.hpp index ac4173c..0c41824 100644 --- a/templates/CustomTemplate.hpp +++ b/templates/CustomTemplate.hpp @@ -26,6 +26,7 @@ #include "QodeAssistSettings.hpp" #include "QodeAssistUtils.hpp" +#include "settings/CustomPromptSettings.hpp" namespace QodeAssist::Templates { @@ -33,7 +34,10 @@ class CustomTemplate : public PromptTemplate { public: QString name() const override { return "Custom Template"; } - QString promptTemplate() const override { return settings().customJsonTemplate(); } + QString promptTemplate() const override + { + return Settings::customPromptSettings().customJsonTemplate(); + } QStringList stopWords() const override { return QStringList(); } void prepareRequest(QJsonObject &request, const ContextData &context) const override