diff --git a/QodeAssistSettings.cpp b/QodeAssistSettings.cpp index 56c6725..f6938ca 100644 --- a/QodeAssistSettings.cpp +++ b/QodeAssistSettings.cpp @@ -45,56 +45,6 @@ QodeAssistSettings::QodeAssistSettings() { setAutoApply(false); - temperature.setSettingsKey(Constants::TEMPERATURE); - temperature.setLabelText(Tr::tr("Temperature:")); - temperature.setDefaultValue(0.2); - temperature.setRange(0.0, 10.0); - - - ollamaLivetime.setSettingsKey(Constants::OLLAMA_LIVETIME); - ollamaLivetime.setLabelText( - Tr::tr("Time to suspend Ollama after completion request (in minutes), " - "Only Ollama, -1 to disable")); - ollamaLivetime.setDefaultValue("5m"); - ollamaLivetime.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - - maxTokens.setSettingsKey(Constants::MAX_TOKENS); - maxTokens.setLabelText(Tr::tr("Max Tokens")); - maxTokens.setRange(-1, 10000); - maxTokens.setDefaultValue(150); - - useTopP.setSettingsKey(Constants::USE_TOP_P); - useTopP.setDefaultValue(false); - - topP.setSettingsKey(Constants::TOP_P); - topP.setLabelText(Tr::tr("top_p")); - topP.setDefaultValue(0.9); - topP.setRange(0.0, 1.0); - - useTopK.setSettingsKey(Constants::USE_TOP_K); - useTopK.setDefaultValue(false); - - topK.setSettingsKey(Constants::TOP_K); - topK.setLabelText(Tr::tr("top_k")); - topK.setDefaultValue(50); - topK.setRange(1, 1000); - - usePresencePenalty.setSettingsKey(Constants::USE_PRESENCE_PENALTY); - usePresencePenalty.setDefaultValue(false); - - presencePenalty.setSettingsKey(Constants::PRESENCE_PENALTY); - presencePenalty.setLabelText(Tr::tr("presence_penalty")); - presencePenalty.setDefaultValue(0.0); - presencePenalty.setRange(-2.0, 2.0); - - useFrequencyPenalty.setSettingsKey(Constants::USE_FREQUENCY_PENALTY); - useFrequencyPenalty.setDefaultValue(false); - - frequencyPenalty.setSettingsKey(Constants::FREQUENCY_PENALTY); - frequencyPenalty.setLabelText(Tr::tr("frequency_penalty")); - frequencyPenalty.setDefaultValue(0.0); - frequencyPenalty.setRange(-2.0, 2.0); - startSuggestionTimer.setSettingsKey(Constants::START_SUGGESTION_TIMER); startSuggestionTimer.setLabelText(Tr::tr("Start Suggestion Timer:")); startSuggestionTimer.setRange(10, 10000); @@ -102,11 +52,6 @@ QodeAssistSettings::QodeAssistSettings() resetToDefaults.m_buttonText = Tr::tr("Reset to Defaults"); - apiKey.setSettingsKey(Constants::API_KEY); - apiKey.setLabelText(Tr::tr("API Key:")); - apiKey.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - apiKey.setPlaceHolderText(Tr::tr("Enter your API key here")); - customJsonTemplate.setSettingsKey(Constants::CUSTOM_JSON_TEMPLATE); customJsonTemplate.setLabelText("Custom JSON Template:"); customJsonTemplate.setDisplayStyle(Utils::StringAspect::TextEditDisplay); @@ -135,11 +80,6 @@ QodeAssistSettings::QodeAssistSettings() readSettings(); - topK.setEnabled(useTopK()); - topP.setEnabled(useTopP()); - presencePenalty.setEnabled(usePresencePenalty()); - frequencyPenalty.setEnabled(useFrequencyPenalty()); - customJsonTemplate.setVisible(PromptTemplateManager::instance().getCurrentTemplate()->name() == "Custom Template"); @@ -155,18 +95,18 @@ QodeAssistSettings::QodeAssistSettings() // maxFileThreshold, // readStringsBeforeCursor, // readStringsAfterCursor, - ollamaLivetime, - apiKey, + // ollamaLivetime, + // apiKey, // useFilePathInContext, // useSpecificInstructions, // specificInstractions, - temperature, - maxTokens, - startSuggestionTimer, - Row{useTopP, topP, Stretch{1}}, - Row{useTopK, topK, Stretch{1}}, - Row{usePresencePenalty, presencePenalty, Stretch{1}}, - Row{useFrequencyPenalty, frequencyPenalty, Stretch{1}}}}}, + // temperature, + // maxTokens, + // startSuggestionTimer, + // Row{useTopP, topP, Stretch{1}}, + // Row{useTopK, topK, Stretch{1}}, +/* Row{usePresencePenalty, presencePenalty, Stretch{1}}, + Row{useFrequencyPenalty, frequencyPenalty, Stretch{1}}*/}}}, st}; }); @@ -175,19 +115,6 @@ QodeAssistSettings::QodeAssistSettings() void QodeAssistSettings::setupConnections() { - connect(&useTopP, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - topP.setEnabled(useTopP.volatileValue()); - }); - connect(&useTopK, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - topK.setEnabled(useTopK.volatileValue()); - }); - connect(&usePresencePenalty, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - presencePenalty.setEnabled(usePresencePenalty.volatileValue()); - }); - connect(&useFrequencyPenalty, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - frequencyPenalty.setEnabled(useFrequencyPenalty.volatileValue()); - }); - connect(&resetToDefaults, &ButtonAspect::clicked, this, @@ -230,23 +157,23 @@ void QodeAssistSettings::resetSettingsToDefaults() // resetAspect(endPoint); // resetAspect(modelName); // resetAspect(fimPrompts); - resetAspect(temperature); - resetAspect(maxTokens); + // resetAspect(temperature); + // resetAspect(maxTokens); // resetAspect(readFullFile); // resetAspect(maxFileThreshold); // resetAspect(readStringsBeforeCursor); // resetAspect(readStringsAfterCursor); - resetAspect(useTopP); - resetAspect(topP); - resetAspect(useTopK); - resetAspect(topK); - resetAspect(usePresencePenalty); - resetAspect(presencePenalty); - resetAspect(useFrequencyPenalty); - resetAspect(frequencyPenalty); + // resetAspect(useTopP); + // resetAspect(topP); + // resetAspect(useTopK); + // resetAspect(topK); + // resetAspect(usePresencePenalty); + // resetAspect(presencePenalty); + // resetAspect(useFrequencyPenalty); + // resetAspect(frequencyPenalty); resetAspect(startSuggestionTimer); // resetAspect(enableLogging); - resetAspect(ollamaLivetime); + // resetAspect(ollamaLivetime); // resetAspect(specificInstractions); // resetAspect(multiLineCompletion); // resetAspect(useFilePathInContext); diff --git a/QodeAssistSettings.hpp b/QodeAssistSettings.hpp index 797e333..2323443 100644 --- a/QodeAssistSettings.hpp +++ b/QodeAssistSettings.hpp @@ -57,29 +57,11 @@ class QodeAssistSettings : public Utils::AspectContainer public: QodeAssistSettings(); - Utils::DoubleAspect temperature{this}; - Utils::IntegerAspect maxTokens{this}; - - Utils::BoolAspect useTopP{this}; - Utils::DoubleAspect topP{this}; - - Utils::BoolAspect useTopK{this}; - Utils::IntegerAspect topK{this}; - - Utils::BoolAspect usePresencePenalty{this}; - Utils::DoubleAspect presencePenalty{this}; - - Utils::BoolAspect useFrequencyPenalty{this}; - Utils::DoubleAspect frequencyPenalty{this}; - Utils::IntegerAspect startSuggestionTimer{this}; - Utils::StringAspect ollamaLivetime{this}; - Utils::StringAspect customJsonTemplate{this}; ButtonAspect saveCustomTemplateButton{this}; ButtonAspect loadCustomTemplateButton{this}; - Utils::StringAspect apiKey{this}; ButtonAspect resetToDefaults{this}; diff --git a/providers/LMStudioProvider.cpp b/providers/LMStudioProvider.cpp index ca00925..96cf058 100644 --- a/providers/LMStudioProvider.cpp +++ b/providers/LMStudioProvider.cpp @@ -28,6 +28,7 @@ #include "PromptTemplateManager.hpp" #include "QodeAssistSettings.hpp" #include "QodeAssistUtils.hpp" +#include "settings/PresetPromptsSettings.hpp" namespace QodeAssist::Providers { @@ -50,6 +51,7 @@ QString LMStudioProvider::completionEndpoint() const void LMStudioProvider::prepareRequest(QJsonObject &request) { + auto &settings = Settings::presetPromptsSettings(); const auto ¤tTemplate = PromptTemplateManager::instance().getCurrentTemplate(); if (currentTemplate->name() == "Custom Template") return; @@ -59,17 +61,17 @@ void LMStudioProvider::prepareRequest(QJsonObject &request) request["messages"] = std::move(messages); } - request["max_tokens"] = settings().maxTokens(); - request["temperature"] = settings().temperature(); + request["max_tokens"] = settings.maxTokens(); + request["temperature"] = settings.temperature(); request["stop"] = QJsonArray::fromStringList(currentTemplate->stopWords()); - if (settings().useTopP()) - request["top_p"] = settings().topP(); - if (settings().useTopK()) - request["top_k"] = settings().topK(); - if (settings().useFrequencyPenalty()) - request["frequency_penalty"] = settings().frequencyPenalty(); - if (settings().usePresencePenalty()) - request["presence_penalty"] = settings().presencePenalty(); + if (settings.useTopP()) + request["top_p"] = settings.topP(); + if (settings.useTopK()) + request["top_k"] = settings.topK(); + if (settings.useFrequencyPenalty()) + request["frequency_penalty"] = settings.frequencyPenalty(); + if (settings.usePresencePenalty()) + request["presence_penalty"] = settings.presencePenalty(); } bool LMStudioProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse) diff --git a/providers/OllamaProvider.cpp b/providers/OllamaProvider.cpp index 9bbbf29..d3900d5 100644 --- a/providers/OllamaProvider.cpp +++ b/providers/OllamaProvider.cpp @@ -28,6 +28,7 @@ #include "PromptTemplateManager.hpp" #include "QodeAssistSettings.hpp" #include "QodeAssistUtils.hpp" +#include "settings/PresetPromptsSettings.hpp" namespace QodeAssist::Providers { @@ -50,23 +51,24 @@ QString OllamaProvider::completionEndpoint() const void OllamaProvider::prepareRequest(QJsonObject &request) { + auto &settings = Settings::presetPromptsSettings(); auto currentTemplate = PromptTemplateManager::instance().getCurrentTemplate(); if (currentTemplate->name() == "Custom Template") return; QJsonObject options; - options["num_predict"] = settings().maxTokens(); - options["keep_alive"] = settings().ollamaLivetime(); - options["temperature"] = settings().temperature(); + options["num_predict"] = settings.maxTokens(); + options["keep_alive"] = settings.ollamaLivetime(); + options["temperature"] = settings.temperature(); options["stop"] = QJsonArray::fromStringList(currentTemplate->stopWords()); - if (settings().useTopP()) - options["top_p"] = settings().topP(); - if (settings().useTopK()) - options["top_k"] = settings().topK(); - if (settings().useFrequencyPenalty()) - options["frequency_penalty"] = settings().frequencyPenalty(); - if (settings().usePresencePenalty()) - options["presence_penalty"] = settings().presencePenalty(); + if (settings.useTopP()) + options["top_p"] = settings.topP(); + if (settings.useTopK()) + options["top_k"] = settings.topK(); + if (settings.useFrequencyPenalty()) + options["frequency_penalty"] = settings.frequencyPenalty(); + if (settings.usePresencePenalty()) + options["presence_penalty"] = settings.presencePenalty(); request["options"] = options; } diff --git a/providers/OpenAICompatProvider.cpp b/providers/OpenAICompatProvider.cpp index b3641e1..d55ca45 100644 --- a/providers/OpenAICompatProvider.cpp +++ b/providers/OpenAICompatProvider.cpp @@ -26,6 +26,7 @@ #include "PromptTemplateManager.hpp" #include "QodeAssistSettings.hpp" +#include "settings/PresetPromptsSettings.hpp" namespace QodeAssist::Providers { @@ -48,6 +49,7 @@ QString OpenAICompatProvider::completionEndpoint() const void OpenAICompatProvider::prepareRequest(QJsonObject &request) { + auto &settings = Settings::presetPromptsSettings(); const auto ¤tTemplate = PromptTemplateManager::instance().getCurrentTemplate(); if (currentTemplate->name() == "Custom Template") return; @@ -58,19 +60,19 @@ void OpenAICompatProvider::prepareRequest(QJsonObject &request) request["messages"] = std::move(messages); } - request["max_tokens"] = settings().maxTokens(); - request["temperature"] = settings().temperature(); + request["max_tokens"] = settings.maxTokens(); + request["temperature"] = settings.temperature(); request["stop"] = QJsonArray::fromStringList(currentTemplate->stopWords()); - if (settings().useTopP()) - request["top_p"] = settings().topP(); - if (settings().useTopK()) - request["top_k"] = settings().topK(); - if (settings().useFrequencyPenalty()) - request["frequency_penalty"] = settings().frequencyPenalty(); - if (settings().usePresencePenalty()) - request["presence_penalty"] = settings().presencePenalty(); + if (settings.useTopP()) + request["top_p"] = settings.topP(); + if (settings.useTopK()) + request["top_k"] = settings.topK(); + if (settings.useFrequencyPenalty()) + request["frequency_penalty"] = settings.frequencyPenalty(); + if (settings.usePresencePenalty()) + request["presence_penalty"] = settings.presencePenalty(); - const QString &apiKey = settings().apiKey.value(); + const QString &apiKey = settings.apiKey.value(); if (!apiKey.isEmpty()) { request["api_key"] = apiKey; } diff --git a/settings/PresetPromptsSettings.cpp b/settings/PresetPromptsSettings.cpp index 35d5c91..89c8de5 100644 --- a/settings/PresetPromptsSettings.cpp +++ b/settings/PresetPromptsSettings.cpp @@ -19,7 +19,9 @@ #include "PresetPromptsSettings.hpp" +#include #include +#include #include #include "QodeAssistConstants.hpp" @@ -39,12 +41,133 @@ PresetPromptsSettings::PresetPromptsSettings() setDisplayName(Tr::tr("Preset Prompts Params")); + temperature.setSettingsKey(Constants::TEMPERATURE); + temperature.setLabelText(Tr::tr("Temperature:")); + temperature.setDefaultValue(0.2); + temperature.setRange(0.0, 10.0); + + ollamaLivetime.setSettingsKey(Constants::OLLAMA_LIVETIME); + ollamaLivetime.setLabelText( + Tr::tr("Time to suspend Ollama after completion request (in minutes), " + "Only Ollama, -1 to disable")); + ollamaLivetime.setDefaultValue("5m"); + ollamaLivetime.setDisplayStyle(Utils::StringAspect::LineEditDisplay); + + maxTokens.setSettingsKey(Constants::MAX_TOKENS); + maxTokens.setLabelText(Tr::tr("Max Tokens")); + maxTokens.setRange(-1, 10000); + maxTokens.setDefaultValue(150); + + useTopP.setSettingsKey(Constants::USE_TOP_P); + useTopP.setDefaultValue(false); + + topP.setSettingsKey(Constants::TOP_P); + topP.setLabelText(Tr::tr("top_p")); + topP.setDefaultValue(0.9); + topP.setRange(0.0, 1.0); + + useTopK.setSettingsKey(Constants::USE_TOP_K); + useTopK.setDefaultValue(false); + + topK.setSettingsKey(Constants::TOP_K); + topK.setLabelText(Tr::tr("top_k")); + topK.setDefaultValue(50); + topK.setRange(1, 1000); + + usePresencePenalty.setSettingsKey(Constants::USE_PRESENCE_PENALTY); + usePresencePenalty.setDefaultValue(false); + + presencePenalty.setSettingsKey(Constants::PRESENCE_PENALTY); + presencePenalty.setLabelText(Tr::tr("presence_penalty")); + presencePenalty.setDefaultValue(0.0); + presencePenalty.setRange(-2.0, 2.0); + + useFrequencyPenalty.setSettingsKey(Constants::USE_FREQUENCY_PENALTY); + useFrequencyPenalty.setDefaultValue(false); + + frequencyPenalty.setSettingsKey(Constants::FREQUENCY_PENALTY); + frequencyPenalty.setLabelText(Tr::tr("frequency_penalty")); + frequencyPenalty.setDefaultValue(0.0); + frequencyPenalty.setRange(-2.0, 2.0); + + apiKey.setSettingsKey(Constants::API_KEY); + apiKey.setLabelText(Tr::tr("API Key:")); + apiKey.setDisplayStyle(Utils::StringAspect::LineEditDisplay); + apiKey.setPlaceHolderText(Tr::tr("Enter your API key here")); + + resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults"); + + readSettings(); + + topK.setEnabled(useTopK()); + topP.setEnabled(useTopP()); + presencePenalty.setEnabled(usePresencePenalty()); + frequencyPenalty.setEnabled(useFrequencyPenalty()); + + setupConnections(); + setLayouter([this]() { using namespace Layouting; - return Column{Stretch{1}}; + return Column{Row{temperature, Stretch{1}, resetToDefaults}, + maxTokens, + Row{useTopP, topP, Stretch{1}}, + Row{useTopK, topK, Stretch{1}}, + Row{usePresencePenalty, presencePenalty, Stretch{1}}, + Row{useFrequencyPenalty, frequencyPenalty, Stretch{1}}, + apiKey, + Stretch{1}}; }); } +void PresetPromptsSettings::setupConnections() +{ + connect(&useTopP, &Utils::BoolAspect::volatileValueChanged, this, [this]() { + topP.setEnabled(useTopP.volatileValue()); + }); + connect(&useTopK, &Utils::BoolAspect::volatileValueChanged, this, [this]() { + topK.setEnabled(useTopK.volatileValue()); + }); + connect(&usePresencePenalty, &Utils::BoolAspect::volatileValueChanged, this, [this]() { + presencePenalty.setEnabled(usePresencePenalty.volatileValue()); + }); + connect(&useFrequencyPenalty, &Utils::BoolAspect::volatileValueChanged, this, [this]() { + frequencyPenalty.setEnabled(useFrequencyPenalty.volatileValue()); + }); + + connect(&resetToDefaults, + &ButtonAspect::clicked, + this, + &PresetPromptsSettings::resetSettingsToDefaults); +} + +void PresetPromptsSettings::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(temperature); + resetAspect(maxTokens); + resetAspect(ollamaLivetime); + resetAspect(useTopP); + resetAspect(topP); + resetAspect(useTopK); + resetAspect(topK); + resetAspect(usePresencePenalty); + resetAspect(presencePenalty); + resetAspect(useFrequencyPenalty); + resetAspect(frequencyPenalty); + } + + QMessageBox::information(Core::ICore::dialogParent(), + Tr::tr("Settings Reset"), + Tr::tr("All settings have been reset to their default values.")); +} + class PresetPromptsSettingsPage : public Core::IOptionsPage { public: diff --git a/settings/PresetPromptsSettings.hpp b/settings/PresetPromptsSettings.hpp index 7f4e7c1..b953c4b 100644 --- a/settings/PresetPromptsSettings.hpp +++ b/settings/PresetPromptsSettings.hpp @@ -19,6 +19,7 @@ #pragma once +#include "settings/SettingsUtils.hpp" #include namespace QodeAssist::Settings { @@ -27,6 +28,30 @@ class PresetPromptsSettings : public Utils::AspectContainer { public: PresetPromptsSettings(); + + Utils::DoubleAspect temperature{this}; + Utils::IntegerAspect maxTokens{this}; + + Utils::BoolAspect useTopP{this}; + Utils::DoubleAspect topP{this}; + + Utils::BoolAspect useTopK{this}; + Utils::IntegerAspect topK{this}; + + Utils::BoolAspect usePresencePenalty{this}; + Utils::DoubleAspect presencePenalty{this}; + + Utils::BoolAspect useFrequencyPenalty{this}; + Utils::DoubleAspect frequencyPenalty{this}; + + Utils::StringAspect ollamaLivetime{this}; + Utils::StringAspect apiKey{this}; + + ButtonAspect resetToDefaults{this}; + +private: + void setupConnections(); + void resetSettingsToDefaults(); }; PresetPromptsSettings &presetPromptsSettings();