diff --git a/LLMClientInterface.cpp b/LLMClientInterface.cpp index 0784ba9..c609637 100644 --- a/LLMClientInterface.cpp +++ b/LLMClientInterface.cpp @@ -204,7 +204,10 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request) QString systemPrompt; if (completeSettings.useSystemPrompt()) - systemPrompt.append(completeSettings.systemPrompt()); + systemPrompt.append(completeSettings.useUserMessageTemplateForCC() + && promptTemplate->type() == LLMCore::TemplateType::Chat + ? completeSettings.systemPromptForNonFimModels() + : completeSettings.systemPrompt()); if (updatedContext.fileContext.has_value()) systemPrompt.append(updatedContext.fileContext.value()); @@ -291,8 +294,8 @@ void LLMClientInterface::sendCompletionToClient(const QString &completion, QString processedCompletion = promptTemplate->type() == LLMCore::TemplateType::Chat && Settings::codeCompletionSettings().smartProcessInstuctText() - ? CodeHandler::processText(completion) - : completion; + ? CodeHandler::processText(completion) + : completion; completionItem[LanguageServerProtocol::textKey] = processedCompletion; QJsonObject range; @@ -312,7 +315,7 @@ void LLMClientInterface::sendCompletionToClient(const QString &completion, .arg(QString::fromUtf8(QJsonDocument(completions).toJson(QJsonDocument::Indented)))); LOG_MESSAGE(QString("Full response: \n%1") - .arg(QString::fromUtf8(QJsonDocument(response).toJson(QJsonDocument::Indented)))); + .arg(QString::fromUtf8(QJsonDocument(response).toJson(QJsonDocument::Indented)))); QString requestId = request["id"].toString(); endTimeMeasurement(requestId); diff --git a/settings/CodeCompletionSettings.cpp b/settings/CodeCompletionSettings.cpp index 6b2dc38..cb7dca2 100644 --- a/settings/CodeCompletionSettings.cpp +++ b/settings/CodeCompletionSettings.cpp @@ -151,7 +151,20 @@ CodeCompletionSettings::CodeCompletionSettings() systemPrompt.setSettingsKey(Constants::CC_SYSTEM_PROMPT); systemPrompt.setDisplayStyle(Utils::StringAspect::TextEditDisplay); + systemPromptForNonFimModels.setLabelText(Tr::tr("System prompt for FIM models:")); systemPrompt.setDefaultValue( + "You are an expert C++, Qt, and QML code completion assistant. Your task is to provide " + "precise and contextually appropriate code completions.\n\n"); + + useUserMessageTemplateForCC.setSettingsKey(Constants::CC_USE_USER_TEMPLATE); + useUserMessageTemplateForCC.setDefaultValue(true); + useUserMessageTemplateForCC.setLabelText( + Tr::tr("Use special system prompt and user message for non FIM models")); + + systemPromptForNonFimModels.setSettingsKey(Constants::CC_SYSTEM_PROMPT_FOR_NON_FIM); + systemPromptForNonFimModels.setDisplayStyle(Utils::StringAspect::TextEditDisplay); + systemPromptForNonFimModels.setLabelText(Tr::tr("System prompt for non FIM models:")); + systemPromptForNonFimModels.setDefaultValue( "You are an expert C++, Qt, and QML code completion assistant. Your task is to provide " "precise and contextually appropriate code completions.\n\n" "Core Requirements:\n" @@ -173,15 +186,12 @@ CodeCompletionSettings::CodeCompletionSettings() "- Only include new characters needed to create valid code\n" "- Should be codeblock with language\n"); - useUserMessageTemplateForCC.setSettingsKey(Constants::CC_USE_USER_TEMPLATE); - useUserMessageTemplateForCC.setDefaultValue(true); - useUserMessageTemplateForCC.setLabelText(Tr::tr("Use User Template for code completion message for non-FIM models")); - userMessageTemplateForCC.setSettingsKey(Constants::CC_USER_TEMPLATE); userMessageTemplateForCC.setDisplayStyle(Utils::StringAspect::TextEditDisplay); + userMessageTemplateForCC.setLabelText(Tr::tr("User message for non FIM models:")); userMessageTemplateForCC.setDefaultValue( "Here is the code context with insertion points:\n" - "\n${prefix}${suffix}\n\n"); + "\n${prefix}${suffix}\n\n\n"); useProjectChangesCache.setSettingsKey(Constants::CC_USE_PROJECT_CHANGES_CACHE); useProjectChangesCache.setDefaultValue(true); @@ -242,9 +252,14 @@ CodeCompletionSettings::CodeCompletionSettings() auto contextItem = Column{Row{contextGrid, Stretch{1}}, Row{useSystemPrompt, Stretch{1}}, - systemPrompt, - Row{useUserMessageTemplateForCC, Stretch{1}}, - userMessageTemplateForCC, + Group{title(Tr::tr("Prompts for FIM models")), + Column{systemPrompt}}, + Group{title(Tr::tr("Prompts for Non FIM models")), + Column{ + Row{useUserMessageTemplateForCC, Stretch{1}}, + systemPromptForNonFimModels, + userMessageTemplateForCC, + }}, Row{useProjectChangesCache, maxChangesCacheSize, Stretch{1}}}; return Column{ @@ -338,6 +353,7 @@ void CodeCompletionSettings::resetSettingsToDefaults() resetAspect(contextWindow); resetAspect(useUserMessageTemplateForCC); resetAspect(userMessageTemplateForCC); + resetAspect(systemPromptForNonFimModels); } } diff --git a/settings/CodeCompletionSettings.hpp b/settings/CodeCompletionSettings.hpp index 33c215b..cef2ca8 100644 --- a/settings/CodeCompletionSettings.hpp +++ b/settings/CodeCompletionSettings.hpp @@ -67,6 +67,7 @@ public: Utils::BoolAspect useSystemPrompt{this}; Utils::StringAspect systemPrompt{this}; Utils::BoolAspect useUserMessageTemplateForCC{this}; + Utils::StringAspect systemPromptForNonFimModels{this}; Utils::StringAspect userMessageTemplateForCC{this}; Utils::BoolAspect useProjectChangesCache{this}; Utils::IntegerAspect maxChangesCacheSize{this}; diff --git a/settings/SettingsConstants.hpp b/settings/SettingsConstants.hpp index a1ea181..fe6412c 100644 --- a/settings/SettingsConstants.hpp +++ b/settings/SettingsConstants.hpp @@ -112,6 +112,7 @@ const char CC_READ_STRINGS_BEFORE_CURSOR[] = "QodeAssist.ccReadStringsBeforeCurs const char CC_READ_STRINGS_AFTER_CURSOR[] = "QodeAssist.ccReadStringsAfterCursor"; const char CC_USE_SYSTEM_PROMPT[] = "QodeAssist.ccUseSystemPrompt"; const char CC_SYSTEM_PROMPT[] = "QodeAssist.ccSystemPrompt"; +const char CC_SYSTEM_PROMPT_FOR_NON_FIM[] = "QodeAssist.ccSystemPromptForNonFim"; const char CC_USE_USER_TEMPLATE[] = "QodeAssist.ccUseUserTemplate"; const char CC_USER_TEMPLATE[] = "QodeAssist.ccUserTemplate"; const char CC_USE_PROJECT_CHANGES_CACHE[] = "QodeAssist.ccUseProjectChangesCache";