diff --git a/QodeAssist.json.in b/QodeAssist.json.in index 37cd649..993742d 100644 --- a/QodeAssist.json.in +++ b/QodeAssist.json.in @@ -1,6 +1,6 @@ { "Name" : "QodeAssist", - "Version" : "0.3.6", + "Version" : "0.3.7", "CompatVersion" : "${IDE_VERSION_COMPAT}", "Vendor" : "Petr Mironychev", "Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd", diff --git a/settings/ContextSettings.cpp b/settings/ContextSettings.cpp deleted file mode 100644 index c66683a..0000000 --- a/settings/ContextSettings.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (C) 2024 Petr Mironychev - * - * This file is part of QodeAssist. - * - * QodeAssist is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QodeAssist is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QodeAssist. If not, see . - */ - -#include "ContextSettings.hpp" - -#include -#include -#include -#include - -#include "SettingsConstants.hpp" -#include "SettingsTr.hpp" -#include "SettingsUtils.hpp" - -namespace QodeAssist::Settings { -ContextSettings &contextSettings() -{ - static ContextSettings settings; - return settings; -} - -ContextSettings::ContextSettings() -{ - setAutoApply(false); - - setDisplayName(Tr::tr("Context")); - - readFullFile.setSettingsKey(Constants::CC_READ_FULL_FILE); - readFullFile.setLabelText(Tr::tr("Read Full File")); - readFullFile.setDefaultValue(false); - - readStringsBeforeCursor.setSettingsKey(Constants::CC_READ_STRINGS_BEFORE_CURSOR); - readStringsBeforeCursor.setLabelText(Tr::tr("Read Strings Before Cursor")); - readStringsBeforeCursor.setRange(0, 10000); - readStringsBeforeCursor.setDefaultValue(50); - - readStringsAfterCursor.setSettingsKey(Constants::CC_READ_STRINGS_AFTER_CURSOR); - readStringsAfterCursor.setLabelText(Tr::tr("Read Strings After Cursor")); - readStringsAfterCursor.setRange(0, 10000); - readStringsAfterCursor.setDefaultValue(30); - - useFilePathInContext.setSettingsKey(Constants::CC_USE_FILE_PATH_IN_CONTEXT); - useFilePathInContext.setDefaultValue(false); - useFilePathInContext.setLabelText(Tr::tr("Use File Path in Context")); - - useSystemPrompt.setSettingsKey(Constants::CC_USE_SYSTEM_PROMPT); - useSystemPrompt.setDefaultValue(true); - useSystemPrompt.setLabelText(Tr::tr("Use System Prompt")); - - systemPrompt.setSettingsKey(Constants::CC_SYSTEM_PROMPT); - systemPrompt.setDisplayStyle(Utils::StringAspect::TextEditDisplay); - systemPrompt.setDefaultValue( - "You are an expert C++, Qt, and QML code completion AI. Your task is to provide accurate " - "and " - "contextually appropriate code suggestions. Focus on completing the code in a way that " - "follows best practices, is efficient, and matches the surrounding code style. Prioritize " - "Qt and QML-specific completions when appropriate. Avoid adding comments or explanations " - "in your completions."); - - useChatSystemPrompt.setSettingsKey(Constants::CA_SYSTEM_PROMPT); - useChatSystemPrompt.setDefaultValue(true); - useChatSystemPrompt.setLabelText(Tr::tr("Use System Prompt for chat")); - - chatSystemPrompt.setSettingsKey(Constants::CA_SYSTEM_PROMPT); - chatSystemPrompt.setDisplayStyle(Utils::StringAspect::TextEditDisplay); - chatSystemPrompt.setDefaultValue( - "You are an advanced AI assistant specializing in C++, Qt, and QML development. Your role " - "is " - "to provide helpful, accurate, and detailed responses to questions about coding, " - "debugging, " - "and best practices in these technologies. Offer clear explanations, code examples when " - "appropriate, and guidance on Qt Creator usage. Always prioritize officially recommended " - "Qt " - "and C++ practices. If you're unsure about something, state it clearly and suggest where " - "the " - "user might find more information."); - - resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults"); - - useProjectChangesCache.setSettingsKey(Constants::CC_USE_PROJECT_CHANGES_CACHE); - useProjectChangesCache.setDefaultValue(true); - useProjectChangesCache.setLabelText(Tr::tr("Use Project Changes Cache")); - - maxChangesCacheSize.setSettingsKey(Constants::CC_MAX_CHANGES_CACHE_SIZE); - maxChangesCacheSize.setLabelText(Tr::tr("Max Changes Cache Size")); - maxChangesCacheSize.setRange(2, 1000); - maxChangesCacheSize.setDefaultValue(20); - - readSettings(); - - readStringsAfterCursor.setEnabled(!readFullFile()); - readStringsBeforeCursor.setEnabled(!readFullFile()); - systemPrompt.setEnabled(useSystemPrompt()); - - setupConnection(); - - setLayouter([this]() { - using namespace Layouting; - return Column{Row{Stretch{1}, resetToDefaults}, - Group{title(Tr::tr("AI Suggestions Context")), - Column{Row{readFullFile, Stretch{1}}, - Row{readStringsBeforeCursor, Stretch{1}}, - Row{readStringsAfterCursor, Stretch{1}}, - useFilePathInContext, - useSystemPrompt, - systemPrompt, - useProjectChangesCache, - Row{maxChangesCacheSize, Stretch{1}}, - Stretch{1}}}, - Space{16}, - Group{title(Tr::tr("AI Chat Context")), - Column{useChatSystemPrompt, chatSystemPrompt}}}; - }); -} - -void ContextSettings::setupConnection() -{ - connect(&readFullFile, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - readStringsAfterCursor.setEnabled(!readFullFile.volatileValue()); - readStringsBeforeCursor.setEnabled(!readFullFile.volatileValue()); - }); - connect(&useSystemPrompt, &Utils::BoolAspect::volatileValueChanged, this, [this]() { - systemPrompt.setEnabled(useSystemPrompt.volatileValue()); - }); - connect(&resetToDefaults, &ButtonAspect::clicked, this, &ContextSettings::resetPageToDefaults); -} - -void ContextSettings::resetPageToDefaults() -{ - 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(readFullFile); - resetAspect(readStringsBeforeCursor); - resetAspect(readStringsAfterCursor); - resetAspect(useFilePathInContext); - resetAspect(useSystemPrompt); - resetAspect(systemPrompt); - resetAspect(useChatSystemPrompt); - resetAspect(chatSystemPrompt); - } -} - -class ContextSettingsPage : public Core::IOptionsPage -{ -public: - ContextSettingsPage() - { - setId(Constants::QODE_ASSIST_CONTEXT_SETTINGS_PAGE_ID); - setDisplayName(Tr::tr("Context")); - setCategory(Constants::QODE_ASSIST_GENERAL_OPTIONS_CATEGORY); - setDisplayCategory(Constants::QODE_ASSIST_GENERAL_OPTIONS_DISPLAY_CATEGORY); - setCategoryIconPath(":/resources/images/qoderassist-icon.png"); - setSettingsProvider([] { return &contextSettings(); }); - } -}; - -const ContextSettingsPage contextSettingsPage; - -} // namespace QodeAssist::Settings diff --git a/settings/ContextSettings.hpp b/settings/ContextSettings.hpp deleted file mode 100644 index e207af0..0000000 --- a/settings/ContextSettings.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2024 Petr Mironychev - * - * This file is part of QodeAssist. - * - * QodeAssist is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QodeAssist is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QodeAssist. If not, see . - */ - -#pragma once - -#include - -#include "ButtonAspect.hpp" - -namespace QodeAssist::Settings { - -class ContextSettings : public Utils::AspectContainer -{ -public: - ContextSettings(); - - Utils::BoolAspect readFullFile{this}; - Utils::IntegerAspect readStringsBeforeCursor{this}; - Utils::IntegerAspect readStringsAfterCursor{this}; - - Utils::BoolAspect useSystemPrompt{this}; - Utils::StringAspect systemPrompt{this}; - Utils::BoolAspect useFilePathInContext{this}; - Utils::BoolAspect useProjectChangesCache{this}; - Utils::IntegerAspect maxChangesCacheSize{this}; - Utils::BoolAspect useChatSystemPrompt{this}; - Utils::StringAspect chatSystemPrompt{this}; - - ButtonAspect resetToDefaults{this}; - -private: - void setupConnection(); - void resetPageToDefaults(); -}; - -ContextSettings &contextSettings(); - -} // namespace QodeAssist::Settings diff --git a/settings/GeneralSettings.cpp b/settings/GeneralSettings.cpp index ea39e9b..efba2a3 100644 --- a/settings/GeneralSettings.cpp +++ b/settings/GeneralSettings.cpp @@ -200,6 +200,8 @@ public: setId(Constants::QODE_ASSIST_GENERAL_SETTINGS_PAGE_ID); setDisplayName(TrConstants::GENERAL); setCategory(Constants::QODE_ASSIST_GENERAL_OPTIONS_CATEGORY); + setDisplayCategory(Constants::QODE_ASSIST_GENERAL_OPTIONS_DISPLAY_CATEGORY); + setCategoryIconPath(":/resources/images/qoderassist-icon.png"); setSettingsProvider([] { return &generalSettings(); }); } }; diff --git a/settings/PresetPromptsSettings.cpp b/settings/PresetPromptsSettings.cpp deleted file mode 100644 index 3132c7f..0000000 --- a/settings/PresetPromptsSettings.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright (C) 2024 Petr Mironychev - * - * This file is part of QodeAssist. - * - * QodeAssist is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QodeAssist is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QodeAssist. If not, see . - */ - -#include "PresetPromptsSettings.hpp" - -#include -#include -#include -#include - -#include "SettingsConstants.hpp" -#include "SettingsTr.hpp" -#include "SettingsUtils.hpp" - -namespace QodeAssist::Settings { - -PresetPromptsSettings &presetPromptsSettings() -{ - static PresetPromptsSettings settings; - return settings; -} - -PresetPromptsSettings::PresetPromptsSettings() -{ - setAutoApply(false); - - setDisplayName(Tr::tr("Preset Prompts Params")); - - fimTemperature.setSettingsKey(Constants::CC_TEMPERATURE); - fimTemperature.setLabelText(Tr::tr("Temperature:")); - fimTemperature.setDefaultValue(0.2); - fimTemperature.setRange(0.0, 10.0); - fimTemperature.setSingleStep(0.1); - - chatTemperature.setSettingsKey(Constants::CA_TEMPERATURE); - chatTemperature.setLabelText(Tr::tr("Temperature:")); - chatTemperature.setDefaultValue(0.5); - chatTemperature.setRange(0.0, 10.0); - chatTemperature.setSingleStep(0.1); - - fimOllamaLivetime.setSettingsKey(Constants::CC_OLLAMA_LIVETIME); - fimOllamaLivetime.setLabelText( - Tr::tr("Time to suspend Ollama after completion request (in minutes), " - "Only Ollama, -1 to disable")); - fimOllamaLivetime.setDefaultValue("5m"); - fimOllamaLivetime.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - - chatOllamaLivetime.setSettingsKey(Constants::CA_OLLAMA_LIVETIME); - chatOllamaLivetime.setLabelText( - Tr::tr("Time to suspend Ollama after completion request (in minutes), " - "Only Ollama, -1 to disable")); - chatOllamaLivetime.setDefaultValue("5m"); - chatOllamaLivetime.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - - fimMaxTokens.setSettingsKey(Constants::CC_MAX_TOKENS); - fimMaxTokens.setLabelText(Tr::tr("Max Tokens")); - fimMaxTokens.setRange(-1, 10000); - fimMaxTokens.setDefaultValue(50); - - chatMaxTokens.setSettingsKey(Constants::CA_MAX_TOKENS); - chatMaxTokens.setLabelText(Tr::tr("Max Tokens")); - chatMaxTokens.setRange(-1, 10000); - chatMaxTokens.setDefaultValue(2000); - - fimUseTopP.setSettingsKey(Constants::CC_USE_TOP_P); - fimUseTopP.setDefaultValue(false); - - fimTopP.setSettingsKey(Constants::CC_TOP_P); - fimTopP.setLabelText(Tr::tr("use top_p")); - fimTopP.setDefaultValue(0.9); - fimTopP.setRange(0.0, 1.0); - fimTopP.setSingleStep(0.1); - - chatUseTopP.setSettingsKey(Constants::CA_USE_TOP_P); - chatUseTopP.setDefaultValue(false); - - chatTopP.setSettingsKey(Constants::CA_TOP_P); - chatTopP.setLabelText(Tr::tr("use top_p")); - chatTopP.setDefaultValue(0.9); - chatTopP.setRange(0.0, 1.0); - chatTopP.setSingleStep(0.1); - - fimUseTopK.setSettingsKey(Constants::CC_USE_TOP_K); - fimUseTopK.setDefaultValue(false); - - fimTopK.setSettingsKey(Constants::CC_TOP_K); - fimTopK.setLabelText(Tr::tr("use top_k")); - fimTopK.setDefaultValue(50); - fimTopK.setRange(1, 1000); - - chatUseTopK.setSettingsKey(Constants::CA_USE_TOP_K); - chatUseTopK.setDefaultValue(false); - - chatTopK.setSettingsKey(Constants::CA_TOP_K); - chatTopK.setLabelText(Tr::tr("use top_k")); - chatTopK.setDefaultValue(50); - chatTopK.setRange(1, 1000); - - fimUsePresencePenalty.setSettingsKey(Constants::CC_USE_PRESENCE_PENALTY); - fimUsePresencePenalty.setDefaultValue(false); - - fimPresencePenalty.setSettingsKey(Constants::CC_PRESENCE_PENALTY); - fimPresencePenalty.setLabelText(Tr::tr("use presence_penalty")); - fimPresencePenalty.setDefaultValue(0.0); - fimPresencePenalty.setRange(-2.0, 2.0); - fimPresencePenalty.setSingleStep(0.1); - - chatUsePresencePenalty.setSettingsKey(Constants::CA_USE_PRESENCE_PENALTY); - chatUsePresencePenalty.setDefaultValue(false); - - chatPresencePenalty.setSettingsKey(Constants::CA_PRESENCE_PENALTY); - chatPresencePenalty.setLabelText(Tr::tr("use presence_penalty")); - chatPresencePenalty.setDefaultValue(0.0); - chatPresencePenalty.setRange(-2.0, 2.0); - chatPresencePenalty.setSingleStep(0.1); - - fimUseFrequencyPenalty.setSettingsKey(Constants::CC_USE_FREQUENCY_PENALTY); - fimUseFrequencyPenalty.setDefaultValue(false); - - fimFrequencyPenalty.setSettingsKey(Constants::CC_FREQUENCY_PENALTY); - fimFrequencyPenalty.setLabelText(Tr::tr("use frequency_penalty")); - fimFrequencyPenalty.setDefaultValue(0.0); - fimFrequencyPenalty.setRange(-2.0, 2.0); - fimFrequencyPenalty.setSingleStep(0.1); - - chatUseFrequencyPenalty.setSettingsKey(Constants::CA_USE_FREQUENCY_PENALTY); - chatUseFrequencyPenalty.setDefaultValue(false); - - chatFrequencyPenalty.setSettingsKey(Constants::CA_FREQUENCY_PENALTY); - chatFrequencyPenalty.setLabelText(Tr::tr("use frequency_penalty")); - chatFrequencyPenalty.setDefaultValue(0.0); - chatFrequencyPenalty.setRange(-2.0, 2.0); - chatFrequencyPenalty.setSingleStep(0.1); - - fimApiKey.setSettingsKey(Constants::CC_API_KEY); - fimApiKey.setLabelText(Tr::tr("API Key:")); - fimApiKey.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - fimApiKey.setPlaceHolderText(Tr::tr("Enter your API key here")); - - chatApiKey.setSettingsKey(Constants::CA_API_KEY); - chatApiKey.setLabelText(Tr::tr("API Key:")); - chatApiKey.setDisplayStyle(Utils::StringAspect::LineEditDisplay); - chatApiKey.setPlaceHolderText(Tr::tr("Enter your API key here")); - - resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults"); - - readSettings(); - - setupConnections(); - - setLayouter([this]() { - using namespace Layouting; - return Column{Row{Stretch{1}, resetToDefaults}, - Group{title(Tr::tr("Prompt settings for FIM")), - Column{Row{fimTemperature, Stretch{1}}, - Row{fimMaxTokens, Stretch{1}}, - Row{fimUseTopP, fimTopP, Stretch{1}}, - Row{fimUseTopK, fimTopK, Stretch{1}}, - Row{fimUsePresencePenalty, fimPresencePenalty, Stretch{1}}, - Row{fimUseFrequencyPenalty, fimFrequencyPenalty, Stretch{1}}, - Row{fimOllamaLivetime, Stretch{1}}, - fimApiKey}}, - Space{16}, - Group{title(Tr::tr("Prompt settings for Chat")), - Column{Row{chatTemperature, Stretch{1}}, - Row{chatMaxTokens, Stretch{1}}, - Row{chatUseTopP, chatTopP, Stretch{1}}, - Row{chatUseTopK, chatTopK, Stretch{1}}, - Row{fimUsePresencePenalty, fimPresencePenalty, Stretch{1}}, - Row{fimUseFrequencyPenalty, fimFrequencyPenalty, Stretch{1}}, - Row{chatOllamaLivetime, Stretch{1}}, - chatApiKey}}, - Stretch{1}}; - }); -} - -PresetPromptsSettings::PromptSettings PresetPromptsSettings::getSettings(int type) const -{ - PromptSettings settings; - if (type == 0) { - settings.temperature = fimTemperature(); - settings.maxTokens = fimMaxTokens(); - settings.useTopP = fimUseTopP(); - settings.topP = fimTopP(); - settings.useTopK = fimUseTopK(); - settings.topK = fimTopK(); - settings.usePresencePenalty = fimUsePresencePenalty(); - settings.presencePenalty = fimPresencePenalty(); - settings.useFrequencyPenalty = fimUseFrequencyPenalty(); - settings.frequencyPenalty = fimFrequencyPenalty(); - settings.ollamaLivetime = fimOllamaLivetime(); - settings.apiKey = fimApiKey(); - } else if (type = 1) { - settings.temperature = chatTemperature(); - settings.maxTokens = chatMaxTokens(); - settings.useTopP = chatUseTopP(); - settings.topP = chatTopP(); - settings.useTopK = chatUseTopK(); - settings.topK = chatTopK(); - settings.usePresencePenalty = chatUsePresencePenalty(); - settings.presencePenalty = chatPresencePenalty(); - settings.useFrequencyPenalty = chatUseFrequencyPenalty(); - settings.frequencyPenalty = chatFrequencyPenalty(); - settings.ollamaLivetime = chatOllamaLivetime(); - settings.apiKey = chatApiKey(); - } - return settings; -} - -void PresetPromptsSettings::setupConnections() -{ - 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(fimTemperature); - resetAspect(fimMaxTokens); - resetAspect(fimOllamaLivetime); - resetAspect(fimUseTopP); - resetAspect(fimTopP); - resetAspect(fimUseTopK); - resetAspect(fimTopK); - resetAspect(fimUsePresencePenalty); - resetAspect(fimPresencePenalty); - resetAspect(fimUseFrequencyPenalty); - resetAspect(fimFrequencyPenalty); - resetAspect(chatTemperature); - resetAspect(chatMaxTokens); - resetAspect(chatUseTopP); - resetAspect(chatTopP); - resetAspect(chatUseTopK); - resetAspect(chatTopK); - resetAspect(chatUsePresencePenalty); - resetAspect(chatPresencePenalty); - resetAspect(chatUseFrequencyPenalty); - resetAspect(chatFrequencyPenalty); - resetAspect(chatOllamaLivetime); - } -} - -class PresetPromptsSettingsPage : public Core::IOptionsPage -{ -public: - PresetPromptsSettingsPage() - { - setId(Constants::QODE_ASSIST_PRESET_PROMPTS_SETTINGS_PAGE_ID); - setDisplayName(Tr::tr("Preset Prompts Params")); - setCategory(Constants::QODE_ASSIST_GENERAL_OPTIONS_CATEGORY); - setSettingsProvider([] { return &presetPromptsSettings(); }); - } -}; - -const PresetPromptsSettingsPage presetPromptsSettingsPage; - -} // namespace QodeAssist::Settings diff --git a/settings/PresetPromptsSettings.hpp b/settings/PresetPromptsSettings.hpp deleted file mode 100644 index 9cae0f1..0000000 --- a/settings/PresetPromptsSettings.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2024 Petr Mironychev - * - * This file is part of QodeAssist. - * - * QodeAssist is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QodeAssist is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QodeAssist. If not, see . - */ - -#pragma once - -#include - -#include "ButtonAspect.hpp" - -namespace QodeAssist::Settings { - -class PresetPromptsSettings : public Utils::AspectContainer -{ -public: - struct PromptSettings - { - double temperature; - int maxTokens; - bool useTopP; - double topP; - bool useTopK; - int topK; - bool usePresencePenalty; - double presencePenalty; - bool useFrequencyPenalty; - double frequencyPenalty; - QString ollamaLivetime; - QString apiKey; - }; - - PresetPromptsSettings(); - - Utils::DoubleAspect fimTemperature{this}; - Utils::IntegerAspect fimMaxTokens{this}; - - Utils::DoubleAspect chatTemperature{this}; - Utils::IntegerAspect chatMaxTokens{this}; - - Utils::BoolAspect fimUseTopP{this}; - Utils::DoubleAspect fimTopP{this}; - - Utils::BoolAspect chatUseTopP{this}; - Utils::DoubleAspect chatTopP{this}; - - Utils::BoolAspect fimUseTopK{this}; - Utils::IntegerAspect fimTopK{this}; - - Utils::BoolAspect chatUseTopK{this}; - Utils::IntegerAspect chatTopK{this}; - - Utils::BoolAspect fimUsePresencePenalty{this}; - Utils::DoubleAspect fimPresencePenalty{this}; - - Utils::BoolAspect chatUsePresencePenalty{this}; - Utils::DoubleAspect chatPresencePenalty{this}; - - Utils::BoolAspect fimUseFrequencyPenalty{this}; - Utils::DoubleAspect fimFrequencyPenalty{this}; - - Utils::BoolAspect chatUseFrequencyPenalty{this}; - Utils::DoubleAspect chatFrequencyPenalty{this}; - - Utils::StringAspect fimOllamaLivetime{this}; - Utils::StringAspect chatOllamaLivetime{this}; - Utils::StringAspect fimApiKey{this}; - Utils::StringAspect chatApiKey{this}; - - ButtonAspect resetToDefaults{this}; - - PromptSettings getSettings(int type) const; - -private: - void setupConnections(); - void resetSettingsToDefaults(); -}; - -PresetPromptsSettings &presetPromptsSettings(); - -} // namespace QodeAssist::Settings