mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2025-07-18 13:04:28 -04:00
Move custom promt to settings page
This commit is contained in:
@ -45,47 +45,14 @@ QodeAssistSettings::QodeAssistSettings()
|
|||||||
{
|
{
|
||||||
setAutoApply(false);
|
setAutoApply(false);
|
||||||
|
|
||||||
resetToDefaults.m_buttonText = Tr::tr("Reset to Defaults");
|
|
||||||
|
|
||||||
customJsonTemplate.setSettingsKey(Constants::CUSTOM_JSON_TEMPLATE);
|
|
||||||
customJsonTemplate.setLabelText("Custom JSON Template:");
|
|
||||||
customJsonTemplate.setDisplayStyle(Utils::StringAspect::TextEditDisplay);
|
|
||||||
customJsonTemplate.setDefaultValue(R"({
|
|
||||||
"prompt": "{{QODE_INSTRUCTIONS}}<fim_prefix>{{QODE_PREFIX}}<fim_suffix>{{QODE_SUFFIX}}<fim_middle>",
|
|
||||||
"options": {
|
|
||||||
"temperature": 0.7,
|
|
||||||
"top_p": 0.95,
|
|
||||||
"top_k": 40,
|
|
||||||
"num_predict": 100,
|
|
||||||
"stop": [
|
|
||||||
"<|endoftext|>",
|
|
||||||
"<file_sep>",
|
|
||||||
"<fim_prefix>",
|
|
||||||
"<fim_suffix>",
|
|
||||||
"<fim_middle>"
|
|
||||||
],
|
|
||||||
"frequency_penalty": 0,
|
|
||||||
"presence_penalty": 0
|
|
||||||
},
|
|
||||||
"stream": true
|
|
||||||
})");
|
|
||||||
|
|
||||||
saveCustomTemplateButton.m_buttonText = (Tr::tr("Save Custom Template to JSON"));
|
|
||||||
loadCustomTemplateButton.m_buttonText = (Tr::tr("Load Custom Template from JSON"));
|
|
||||||
|
|
||||||
readSettings();
|
readSettings();
|
||||||
|
|
||||||
customJsonTemplate.setVisible(PromptTemplateManager::instance().getCurrentTemplate()->name()
|
|
||||||
== "Custom Template");
|
|
||||||
|
|
||||||
setLayouter([this]() {
|
setLayouter([this]() {
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
|
|
||||||
return Column{Group{title(Tr::tr("FIM Prompt Settings")),
|
return Column{Group{title(Tr::tr("FIM Prompt Settings")),
|
||||||
Form{Column{Column{customJsonTemplate,
|
Form{Column{Column{
|
||||||
Row{saveCustomTemplateButton,
|
},
|
||||||
loadCustomTemplateButton,
|
|
||||||
Stretch{1}}},
|
|
||||||
// readFullFile,
|
// readFullFile,
|
||||||
// maxFileThreshold,
|
// maxFileThreshold,
|
||||||
// readStringsBeforeCursor,
|
// readStringsBeforeCursor,
|
||||||
@ -110,19 +77,7 @@ QodeAssistSettings::QodeAssistSettings()
|
|||||||
|
|
||||||
void QodeAssistSettings::setupConnections()
|
void QodeAssistSettings::setupConnections()
|
||||||
{
|
{
|
||||||
connect(&resetToDefaults,
|
|
||||||
&ButtonAspect::clicked,
|
|
||||||
this,
|
|
||||||
&QodeAssistSettings::resetSettingsToDefaults);
|
|
||||||
|
|
||||||
connect(&saveCustomTemplateButton,
|
|
||||||
&ButtonAspect::clicked,
|
|
||||||
this,
|
|
||||||
&QodeAssistSettings::saveCustomTemplate);
|
|
||||||
connect(&loadCustomTemplateButton,
|
|
||||||
&ButtonAspect::clicked,
|
|
||||||
this,
|
|
||||||
&QodeAssistSettings::loadCustomTemplate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QodeAssistSettings::getInstalledModels()
|
QStringList QodeAssistSettings::getInstalledModels()
|
||||||
@ -173,7 +128,7 @@ void QodeAssistSettings::resetSettingsToDefaults()
|
|||||||
// resetAspect(multiLineCompletion);
|
// resetAspect(multiLineCompletion);
|
||||||
// resetAspect(useFilePathInContext);
|
// resetAspect(useFilePathInContext);
|
||||||
// resetAspect(useSpecificInstructions);
|
// resetAspect(useSpecificInstructions);
|
||||||
resetAspect(customJsonTemplate);
|
// resetAspect(customJsonTemplate);
|
||||||
|
|
||||||
// fimPrompts.setStringValue("StarCoder2");
|
// fimPrompts.setStringValue("StarCoder2");
|
||||||
// llmProviders.setStringValue("Ollama");
|
// llmProviders.setStringValue("Ollama");
|
||||||
@ -188,60 +143,60 @@ void QodeAssistSettings::resetSettingsToDefaults()
|
|||||||
|
|
||||||
void QodeAssistSettings::saveCustomTemplate()
|
void QodeAssistSettings::saveCustomTemplate()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getSaveFileName(nullptr,
|
// QString fileName = QFileDialog::getSaveFileName(nullptr,
|
||||||
Tr::tr("Save JSON Template"),
|
// Tr::tr("Save JSON Template"),
|
||||||
QString(),
|
// QString(),
|
||||||
Tr::tr("JSON Files (*.json)"));
|
// Tr::tr("JSON Files (*.json)"));
|
||||||
if (fileName.isEmpty())
|
// if (fileName.isEmpty())
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
QFile file(fileName);
|
// QFile file(fileName);
|
||||||
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
// if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
QTextStream out(&file);
|
// QTextStream out(&file);
|
||||||
out << customJsonTemplate.value();
|
// out << customJsonTemplate.value();
|
||||||
file.close();
|
// file.close();
|
||||||
QMessageBox::information(nullptr,
|
// QMessageBox::information(nullptr,
|
||||||
Tr::tr("Save Successful"),
|
// Tr::tr("Save Successful"),
|
||||||
Tr::tr("JSON template has been saved successfully."));
|
// Tr::tr("JSON template has been saved successfully."));
|
||||||
} else {
|
// } else {
|
||||||
QMessageBox::critical(nullptr,
|
// QMessageBox::critical(nullptr,
|
||||||
Tr::tr("Save Failed"),
|
// Tr::tr("Save Failed"),
|
||||||
Tr::tr("Failed to save JSON template."));
|
// Tr::tr("Failed to save JSON template."));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void QodeAssistSettings::loadCustomTemplate()
|
void QodeAssistSettings::loadCustomTemplate()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(nullptr,
|
// QString fileName = QFileDialog::getOpenFileName(nullptr,
|
||||||
Tr::tr("Load JSON Template"),
|
// Tr::tr("Load JSON Template"),
|
||||||
QString(),
|
// QString(),
|
||||||
Tr::tr("JSON Files (*.json)"));
|
// Tr::tr("JSON Files (*.json)"));
|
||||||
if (fileName.isEmpty())
|
// if (fileName.isEmpty())
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
QFile file(fileName);
|
// QFile file(fileName);
|
||||||
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
// if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
QTextStream in(&file);
|
// QTextStream in(&file);
|
||||||
QString jsonContent = in.readAll();
|
// QString jsonContent = in.readAll();
|
||||||
file.close();
|
// file.close();
|
||||||
|
|
||||||
QJsonParseError parseError;
|
// QJsonParseError parseError;
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError);
|
// QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError);
|
||||||
if (parseError.error == QJsonParseError::NoError) {
|
// if (parseError.error == QJsonParseError::NoError) {
|
||||||
customJsonTemplate.setValue(jsonContent);
|
// customJsonTemplate.setValue(jsonContent);
|
||||||
QMessageBox::information(nullptr,
|
// QMessageBox::information(nullptr,
|
||||||
Tr::tr("Load Successful"),
|
// Tr::tr("Load Successful"),
|
||||||
Tr::tr("JSON template has been loaded successfully."));
|
// Tr::tr("JSON template has been loaded successfully."));
|
||||||
} else {
|
// } else {
|
||||||
QMessageBox::critical(nullptr,
|
// QMessageBox::critical(nullptr,
|
||||||
Tr::tr("Invalid JSON"),
|
// Tr::tr("Invalid JSON"),
|
||||||
Tr::tr("The selected file contains invalid JSON."));
|
// Tr::tr("The selected file contains invalid JSON."));
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
QMessageBox::critical(nullptr,
|
// QMessageBox::critical(nullptr,
|
||||||
Tr::tr("Load Failed"),
|
// Tr::tr("Load Failed"),
|
||||||
Tr::tr("Failed to load JSON template."));
|
// Tr::tr("Failed to load JSON template."));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
class QodeAssistSettingsPage : public Core::IOptionsPage
|
class QodeAssistSettingsPage : public Core::IOptionsPage
|
||||||
|
@ -57,12 +57,6 @@ class QodeAssistSettings : public Utils::AspectContainer
|
|||||||
public:
|
public:
|
||||||
QodeAssistSettings();
|
QodeAssistSettings();
|
||||||
|
|
||||||
Utils::StringAspect customJsonTemplate{this};
|
|
||||||
ButtonAspect saveCustomTemplateButton{this};
|
|
||||||
ButtonAspect loadCustomTemplateButton{this};
|
|
||||||
|
|
||||||
ButtonAspect resetToDefaults{this};
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupConnections();
|
void setupConnections();
|
||||||
QStringList getInstalledModels();
|
QStringList getInstalledModels();
|
||||||
|
@ -19,7 +19,11 @@
|
|||||||
|
|
||||||
#include "CustomPromptSettings.hpp"
|
#include "CustomPromptSettings.hpp"
|
||||||
|
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QJsonParseError>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <coreplugin/dialogs/ioptionspage.h>
|
#include <coreplugin/dialogs/ioptionspage.h>
|
||||||
|
#include <coreplugin/icore.h>
|
||||||
#include <utils/layoutbuilder.h>
|
#include <utils/layoutbuilder.h>
|
||||||
|
|
||||||
#include "QodeAssistConstants.hpp"
|
#include "QodeAssistConstants.hpp"
|
||||||
@ -39,12 +43,138 @@ CustomPromptSettings::CustomPromptSettings()
|
|||||||
|
|
||||||
setDisplayName(Tr::tr("Custom Prompt"));
|
setDisplayName(Tr::tr("Custom Prompt"));
|
||||||
|
|
||||||
|
customJsonLabel.setLabelText("Custom JSON Template:");
|
||||||
|
customJsonLabel.setDisplayStyle(Utils::StringAspect::LabelDisplay);
|
||||||
|
|
||||||
|
customJsonTemplate.setSettingsKey(Constants::CUSTOM_JSON_TEMPLATE);
|
||||||
|
customJsonTemplate.setDisplayStyle(Utils::StringAspect::TextEditDisplay);
|
||||||
|
customJsonTemplate.setDefaultValue(R"({
|
||||||
|
"prompt": "{{QODE_INSTRUCTIONS}}<fim_prefix>{{QODE_PREFIX}}<fim_suffix>{{QODE_SUFFIX}}<fim_middle>",
|
||||||
|
"options": {
|
||||||
|
"temperature": 0.7,
|
||||||
|
"top_p": 0.95,
|
||||||
|
"top_k": 40,
|
||||||
|
"num_predict": 100,
|
||||||
|
"stop": [
|
||||||
|
"<|endoftext|>",
|
||||||
|
"<file_sep>",
|
||||||
|
"<fim_prefix>",
|
||||||
|
"<fim_suffix>",
|
||||||
|
"<fim_middle>"
|
||||||
|
],
|
||||||
|
"frequency_penalty": 0,
|
||||||
|
"presence_penalty": 0
|
||||||
|
},
|
||||||
|
"stream": true
|
||||||
|
})");
|
||||||
|
saveCustomTemplateButton.m_buttonText = (Tr::tr("Save Custom Template to JSON"));
|
||||||
|
loadCustomTemplateButton.m_buttonText = (Tr::tr("Load Custom Template from JSON"));
|
||||||
|
resetToDefaults.m_buttonText = Tr::tr("Reset Page to Defaults");
|
||||||
|
|
||||||
|
readSettings();
|
||||||
|
|
||||||
|
setupConnection();
|
||||||
|
|
||||||
setLayouter([this]() {
|
setLayouter([this]() {
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
return Column{Stretch{1}};
|
return Column{Row{customJsonLabel, Stretch{1}, resetToDefaults},
|
||||||
|
Row{customJsonTemplate,
|
||||||
|
Column{saveCustomTemplateButton, loadCustomTemplateButton, Stretch{1}}}};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CustomPromptSettings::setupConnection()
|
||||||
|
{
|
||||||
|
connect(&resetToDefaults,
|
||||||
|
&ButtonAspect::clicked,
|
||||||
|
this,
|
||||||
|
&CustomPromptSettings::resetSettingsToDefaults);
|
||||||
|
connect(&saveCustomTemplateButton,
|
||||||
|
&ButtonAspect::clicked,
|
||||||
|
this,
|
||||||
|
&CustomPromptSettings::saveCustomTemplate);
|
||||||
|
connect(&loadCustomTemplateButton,
|
||||||
|
&ButtonAspect::clicked,
|
||||||
|
this,
|
||||||
|
&CustomPromptSettings::loadCustomTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CustomPromptSettings::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(customJsonTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
QMessageBox::information(Core::ICore::dialogParent(),
|
||||||
|
Tr::tr("Settings Reset"),
|
||||||
|
Tr::tr("All settings have been reset to their default values."));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CustomPromptSettings::saveCustomTemplate()
|
||||||
|
{
|
||||||
|
QString fileName = QFileDialog::getSaveFileName(nullptr,
|
||||||
|
Tr::tr("Save JSON Template"),
|
||||||
|
QString(),
|
||||||
|
Tr::tr("JSON Files (*.json)"));
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QFile file(fileName);
|
||||||
|
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
|
QTextStream out(&file);
|
||||||
|
out << customJsonTemplate.value();
|
||||||
|
file.close();
|
||||||
|
QMessageBox::information(nullptr,
|
||||||
|
Tr::tr("Save Successful"),
|
||||||
|
Tr::tr("JSON template has been saved successfully."));
|
||||||
|
} else {
|
||||||
|
QMessageBox::critical(nullptr,
|
||||||
|
Tr::tr("Save Failed"),
|
||||||
|
Tr::tr("Failed to save JSON template."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CustomPromptSettings::loadCustomTemplate()
|
||||||
|
{
|
||||||
|
QString fileName = QFileDialog::getOpenFileName(nullptr,
|
||||||
|
Tr::tr("Load JSON Template"),
|
||||||
|
QString(),
|
||||||
|
Tr::tr("JSON Files (*.json)"));
|
||||||
|
if (fileName.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QFile file(fileName);
|
||||||
|
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
QTextStream in(&file);
|
||||||
|
QString jsonContent = in.readAll();
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
QJsonParseError parseError;
|
||||||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonContent.toUtf8(), &parseError);
|
||||||
|
if (parseError.error == QJsonParseError::NoError) {
|
||||||
|
customJsonTemplate.setValue(jsonContent);
|
||||||
|
QMessageBox::information(nullptr,
|
||||||
|
Tr::tr("Load Successful"),
|
||||||
|
Tr::tr("JSON template has been loaded successfully."));
|
||||||
|
} else {
|
||||||
|
QMessageBox::critical(nullptr,
|
||||||
|
Tr::tr("Invalid JSON"),
|
||||||
|
Tr::tr("The selected file contains invalid JSON."));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QMessageBox::critical(nullptr,
|
||||||
|
Tr::tr("Load Failed"),
|
||||||
|
Tr::tr("Failed to load JSON template."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class CustomPromptSettingsPage : public Core::IOptionsPage
|
class CustomPromptSettingsPage : public Core::IOptionsPage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "settings/SettingsUtils.hpp"
|
||||||
#include <utils/aspects.h>
|
#include <utils/aspects.h>
|
||||||
|
|
||||||
namespace QodeAssist::Settings {
|
namespace QodeAssist::Settings {
|
||||||
@ -27,6 +28,18 @@ class CustomPromptSettings : public Utils::AspectContainer
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CustomPromptSettings();
|
CustomPromptSettings();
|
||||||
|
|
||||||
|
Utils::StringAspect customJsonLabel{this};
|
||||||
|
Utils::StringAspect customJsonTemplate{this};
|
||||||
|
ButtonAspect saveCustomTemplateButton{this};
|
||||||
|
ButtonAspect loadCustomTemplateButton{this};
|
||||||
|
ButtonAspect resetToDefaults{this};
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupConnection();
|
||||||
|
void resetSettingsToDefaults();
|
||||||
|
void saveCustomTemplate();
|
||||||
|
void loadCustomTemplate();
|
||||||
};
|
};
|
||||||
|
|
||||||
CustomPromptSettings &customPromptSettings();
|
CustomPromptSettings &customPromptSettings();
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
#include "QodeAssistSettings.hpp"
|
#include "QodeAssistSettings.hpp"
|
||||||
#include "QodeAssistUtils.hpp"
|
#include "QodeAssistUtils.hpp"
|
||||||
|
#include "settings/CustomPromptSettings.hpp"
|
||||||
|
|
||||||
namespace QodeAssist::Templates {
|
namespace QodeAssist::Templates {
|
||||||
|
|
||||||
@ -33,7 +34,10 @@ class CustomTemplate : public PromptTemplate
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QString name() const override { return "Custom Template"; }
|
QString name() const override { return "Custom Template"; }
|
||||||
QString promptTemplate() const override { return settings().customJsonTemplate(); }
|
QString promptTemplate() const override
|
||||||
|
{
|
||||||
|
return Settings::customPromptSettings().customJsonTemplate();
|
||||||
|
}
|
||||||
QStringList stopWords() const override { return QStringList(); }
|
QStringList stopWords() const override { return QStringList(); }
|
||||||
|
|
||||||
void prepareRequest(QJsonObject &request, const ContextData &context) const override
|
void prepareRequest(QJsonObject &request, const ContextData &context) const override
|
||||||
|
Reference in New Issue
Block a user