mirror of
				https://github.com/Palm1r/QodeAssist.git
				synced 2025-10-31 16:25:26 -04:00 
			
		
		
		
	feat: Add language-specific LLM preset configuration
- Add ability to configure separate provider/model/template for specific programming language - Add UI controls for language preset configuration - Support custom provider selection per language - Support custom model selection per language - Support custom template selection per language
This commit is contained in:
		| @ -35,11 +35,26 @@ public: | ||||
|     void addToLayoutImpl(Layouting::Layout &parent) override | ||||
|     { | ||||
|         auto button = new QPushButton(m_buttonText); | ||||
|         button->setVisible(m_visible); | ||||
|         connect(button, &QPushButton::clicked, this, &ButtonAspect::clicked); | ||||
|         connect(this, &ButtonAspect::visibleChanged, button, &QPushButton::setVisible); | ||||
|         parent.addItem(button); | ||||
|     } | ||||
|  | ||||
|     void updateVisibility(bool visible) | ||||
|     { | ||||
|         if (m_visible == visible) | ||||
|             return; | ||||
|         m_visible = visible; | ||||
|         emit visibleChanged(visible); | ||||
|     } | ||||
|  | ||||
|     QString m_buttonText; | ||||
|  | ||||
| signals: | ||||
|     void clicked(); | ||||
|     void visibleChanged(bool state); | ||||
|  | ||||
| private: | ||||
|     bool m_visible = true; | ||||
| }; | ||||
|  | ||||
| @ -89,6 +89,39 @@ GeneralSettings::GeneralSettings() | ||||
|     ccStatus.setDefaultValue(""); | ||||
|     ccTest.m_buttonText = TrConstants::TEST; | ||||
|  | ||||
|     // preset1 | ||||
|     specifyPreset1.setSettingsKey(Constants::CC_SPECIFY_PRESET1); | ||||
|     specifyPreset1.setLabelText(TrConstants::ADD_NEW_PRESET); | ||||
|     specifyPreset1.setDefaultValue(false); | ||||
|  | ||||
|     preset1Language.setSettingsKey(Constants::CC_PRESET1_LANGUAGE); | ||||
|     preset1Language.setDisplayStyle(Utils::SelectionAspect::DisplayStyle::ComboBox); | ||||
|     // see ProgrammingLanguageUtils | ||||
|     preset1Language.addOption("qml"); | ||||
|     preset1Language.addOption("c/c++"); | ||||
|     preset1Language.addOption("python"); | ||||
|  | ||||
|     initStringAspect( | ||||
|         ccPreset1Provider, Constants::CC_PRESET1_PROVIDER, TrConstants::PROVIDER, "Ollama"); | ||||
|     ccPreset1Provider.setReadOnly(true); | ||||
|     ccPreset1SelectProvider.m_buttonText = TrConstants::SELECT; | ||||
|  | ||||
|     initStringAspect( | ||||
|         ccPreset1Url, Constants::CC_PRESET1_URL, TrConstants::URL, "http://localhost:11434"); | ||||
|     ccPreset1Url.setHistoryCompleter(Constants::CC_PRESET1_URL_HISTORY); | ||||
|     ccPreset1SetUrl.m_buttonText = TrConstants::SELECT; | ||||
|  | ||||
|     initStringAspect( | ||||
|         ccPreset1Model, Constants::CC_PRESET1_MODEL, TrConstants::MODEL, "qwen2.5-coder:7b"); | ||||
|     ccPreset1Model.setHistoryCompleter(Constants::CC_PRESET1_MODEL_HISTORY); | ||||
|     ccPreset1SelectModel.m_buttonText = TrConstants::SELECT; | ||||
|  | ||||
|     initStringAspect( | ||||
|         ccPreset1Template, Constants::CC_PRESET1_TEMPLATE, TrConstants::TEMPLATE, "Ollama Auto FIM"); | ||||
|     ccPreset1Template.setReadOnly(true); | ||||
|     ccPreset1SelectTemplate.m_buttonText = TrConstants::SELECT; | ||||
|  | ||||
|     // chat assistance | ||||
|     initStringAspect(caProvider, Constants::CA_PROVIDER, TrConstants::PROVIDER, "Ollama"); | ||||
|     caProvider.setReadOnly(true); | ||||
|     caSelectProvider.m_buttonText = TrConstants::SELECT; | ||||
| @ -117,6 +150,8 @@ GeneralSettings::GeneralSettings() | ||||
|  | ||||
|     setupConnections(); | ||||
|  | ||||
|     updatePreset1Visiblity(specifyPreset1.value()); | ||||
|  | ||||
|     setLayouter([this]() { | ||||
|         using namespace Layouting; | ||||
|  | ||||
| @ -126,13 +161,21 @@ GeneralSettings::GeneralSettings() | ||||
|         ccGrid.addRow({ccModel, ccSelectModel}); | ||||
|         ccGrid.addRow({ccTemplate, ccSelectTemplate}); | ||||
|  | ||||
|         auto ccPreset1Grid = Grid{}; | ||||
|         ccPreset1Grid.addRow({ccPreset1Provider, ccPreset1SelectProvider}); | ||||
|         ccPreset1Grid.addRow({ccPreset1Url, ccPreset1SetUrl}); | ||||
|         ccPreset1Grid.addRow({ccPreset1Model, ccPreset1SelectModel}); | ||||
|         ccPreset1Grid.addRow({ccPreset1Template, ccPreset1SelectTemplate}); | ||||
|  | ||||
|         auto caGrid = Grid{}; | ||||
|         caGrid.addRow({caProvider, caSelectProvider}); | ||||
|         caGrid.addRow({caUrl, caSetUrl}); | ||||
|         caGrid.addRow({caModel, caSelectModel}); | ||||
|         caGrid.addRow({caTemplate, caSelectTemplate}); | ||||
|  | ||||
|         auto ccGroup = Group{title(TrConstants::CODE_COMPLETION), ccGrid}; | ||||
|         auto ccGroup = Group{ | ||||
|             title(TrConstants::CODE_COMPLETION), | ||||
|             Column{ccGrid, Row{specifyPreset1, preset1Language, Stretch{1}}, ccPreset1Grid}}; | ||||
|         auto caGroup = Group{title(TrConstants::CHAT_ASSISTANT), caGrid}; | ||||
|  | ||||
|         auto rootLayout = Column{ | ||||
| @ -267,9 +310,11 @@ void GeneralSettings::showUrlSelectionDialog( | ||||
|     dialog.addSpacing(); | ||||
|  | ||||
|     QStringList allUrls = predefinedUrls; | ||||
|     QString key | ||||
|         = QString("CompleterHistory/") | ||||
|               .append((&aspect == &ccUrl) ? Constants::CC_URL_HISTORY : Constants::CA_URL_HISTORY); | ||||
|     QString key = QString("CompleterHistory/") | ||||
|                       .append( | ||||
|                           (&aspect == &ccUrl)          ? Constants::CC_URL_HISTORY | ||||
|                           : (&aspect == &ccPreset1Url) ? Constants::CC_PRESET1_URL_HISTORY | ||||
|                                                        : Constants::CA_URL_HISTORY); | ||||
|     QStringList historyList = qtcSettings()->value(Utils::Key(key.toLocal8Bit())).toStringList(); | ||||
|     allUrls.append(historyList); | ||||
|     allUrls.removeDuplicates(); | ||||
| @ -297,6 +342,18 @@ void GeneralSettings::showUrlSelectionDialog( | ||||
|     dialog.exec(); | ||||
| } | ||||
|  | ||||
| void GeneralSettings::updatePreset1Visiblity(bool state) | ||||
| { | ||||
|     ccPreset1Provider.setVisible(specifyPreset1.volatileValue()); | ||||
|     ccPreset1SelectProvider.updateVisibility(specifyPreset1.volatileValue()); | ||||
|     ccPreset1Url.setVisible(specifyPreset1.volatileValue()); | ||||
|     ccPreset1SetUrl.updateVisibility(specifyPreset1.volatileValue()); | ||||
|     ccPreset1Model.setVisible(specifyPreset1.volatileValue()); | ||||
|     ccPreset1SelectModel.updateVisibility(specifyPreset1.volatileValue()); | ||||
|     ccPreset1Template.setVisible(specifyPreset1.volatileValue()); | ||||
|     ccPreset1SelectTemplate.updateVisibility(specifyPreset1.volatileValue()); | ||||
| } | ||||
|  | ||||
| void GeneralSettings::setupConnections() | ||||
| { | ||||
|     connect(&enableLogging, &Utils::BoolAspect::volatileValueChanged, this, [this]() { | ||||
| @ -306,6 +363,10 @@ void GeneralSettings::setupConnections() | ||||
|     connect(&checkUpdate, &ButtonAspect::clicked, this, [this]() { | ||||
|         QodeAssist::UpdateDialog::checkForUpdatesAndShow(Core::ICore::dialogParent()); | ||||
|     }); | ||||
|  | ||||
|     connect(&specifyPreset1, &Utils::BoolAspect::volatileValueChanged, this, [this]() { | ||||
|         updatePreset1Visiblity(specifyPreset1.volatileValue()); | ||||
|     }); | ||||
| } | ||||
|  | ||||
| void GeneralSettings::resetPageToDefaults() | ||||
| @ -328,6 +389,12 @@ void GeneralSettings::resetPageToDefaults() | ||||
|         resetAspect(caTemplate); | ||||
|         resetAspect(caUrl); | ||||
|         resetAspect(enableCheckUpdate); | ||||
|         resetAspect(specifyPreset1); | ||||
|         resetAspect(preset1Language); | ||||
|         resetAspect(ccPreset1Provider); | ||||
|         resetAspect(ccPreset1Model); | ||||
|         resetAspect(ccPreset1Template); | ||||
|         resetAspect(ccPreset1Url); | ||||
|         writeSettings(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -55,6 +55,23 @@ public: | ||||
|     Utils::StringAspect ccStatus{this}; | ||||
|     ButtonAspect ccTest{this}; | ||||
|  | ||||
|     // TODO create dynamic presets system | ||||
|     // preset1 for code completion settings | ||||
|     Utils::BoolAspect specifyPreset1{this}; | ||||
|     Utils::SelectionAspect preset1Language{this}; | ||||
|  | ||||
|     Utils::StringAspect ccPreset1Provider{this}; | ||||
|     ButtonAspect ccPreset1SelectProvider{this}; | ||||
|  | ||||
|     Utils::StringAspect ccPreset1Url{this}; | ||||
|     ButtonAspect ccPreset1SetUrl{this}; | ||||
|  | ||||
|     Utils::StringAspect ccPreset1Model{this}; | ||||
|     ButtonAspect ccPreset1SelectModel{this}; | ||||
|  | ||||
|     Utils::StringAspect ccPreset1Template{this}; | ||||
|     ButtonAspect ccPreset1SelectTemplate{this}; | ||||
|  | ||||
|     // chat assistant settings | ||||
|     Utils::StringAspect caProvider{this}; | ||||
|     ButtonAspect caSelectProvider{this}; | ||||
| @ -82,6 +99,8 @@ public: | ||||
|  | ||||
|     void showUrlSelectionDialog(Utils::StringAspect &aspect, const QStringList &predefinedUrls); | ||||
|  | ||||
|     void updatePreset1Visiblity(bool state); | ||||
|  | ||||
| private: | ||||
|     void setupConnections(); | ||||
|     void resetPageToDefaults(); | ||||
|  | ||||
| @ -46,6 +46,15 @@ const char CA_TEMPLATE[] = "QodeAssist.caTemplate"; | ||||
| const char CA_URL[] = "QodeAssist.caUrl"; | ||||
| const char CA_URL_HISTORY[] = "QodeAssist.caUrlHistory"; | ||||
|  | ||||
| const char CC_SPECIFY_PRESET1[] = "QodeAssist.ccSpecifyPreset1"; | ||||
| const char CC_PRESET1_LANGUAGE[] = "QodeAssist.ccPreset1Language"; | ||||
| const char CC_PRESET1_PROVIDER[] = "QodeAssist.ccPreset1Provider"; | ||||
| const char CC_PRESET1_MODEL[] = "QodeAssist.ccPreset1Model"; | ||||
| const char CC_PRESET1_MODEL_HISTORY[] = "QodeAssist.ccPreset1ModelHistory"; | ||||
| const char CC_PRESET1_TEMPLATE[] = "QodeAssist.ccPreset1Template"; | ||||
| const char CC_PRESET1_URL[] = "QodeAssist.ccPreset1Url"; | ||||
| const char CC_PRESET1_URL_HISTORY[] = "QodeAssist.ccPreset1UrlHistory"; | ||||
|  | ||||
| // settings | ||||
| const char ENABLE_QODE_ASSIST[] = "QodeAssist.enableQodeAssist"; | ||||
| const char CC_AUTO_COMPLETION[] = "QodeAssist.ccAutoCompletion"; | ||||
|  | ||||
| @ -86,6 +86,9 @@ inline const char ENTER_MODEL_MANUALLY_BUTTON[] | ||||
| inline const char AUTO_COMPLETION_SETTINGS[] | ||||
|     = QT_TRANSLATE_NOOP("QtC::QodeAssist", "Auto Completion Settings"); | ||||
|  | ||||
| inline const char ADD_NEW_PRESET[] | ||||
|     = QT_TRANSLATE_NOOP("QtC::QodeAssist", "Add new preset for language"); | ||||
|  | ||||
| } // namespace TrConstants | ||||
|  | ||||
| struct Tr | ||||
|  | ||||
		Reference in New Issue
	
	Block a user