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";