mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2025-06-04 01:28:58 -04:00
Version 0.2.2
- Improve chat history - Fix system prompt - Fix ollama model livetime - Fix providers and prompt default value
This commit is contained in:
commit
1649a246e1
@ -250,9 +250,6 @@ QString DocumentContextReader::getInstructions() const
|
|||||||
{
|
{
|
||||||
QString instructions;
|
QString instructions;
|
||||||
|
|
||||||
if (Settings::contextSettings().useSpecificInstructions())
|
|
||||||
instructions += getSpecificInstructions();
|
|
||||||
|
|
||||||
if (Settings::contextSettings().useFilePathInContext())
|
if (Settings::contextSettings().useFilePathInContext())
|
||||||
instructions += getLanguageAndFileInfo();
|
instructions += getLanguageAndFileInfo();
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "PromptTemplateManager.hpp"
|
#include "PromptTemplateManager.hpp"
|
||||||
#include "QodeAssistUtils.hpp"
|
#include "QodeAssistUtils.hpp"
|
||||||
#include "core/LLMRequestConfig.hpp"
|
#include "core/LLMRequestConfig.hpp"
|
||||||
|
#include "settings/ContextSettings.hpp"
|
||||||
#include "settings/GeneralSettings.hpp"
|
#include "settings/GeneralSettings.hpp"
|
||||||
|
|
||||||
namespace QodeAssist {
|
namespace QodeAssist {
|
||||||
@ -159,6 +160,9 @@ void LLMClientInterface::handleCompletion(const QJsonObject &request)
|
|||||||
{"stop",
|
{"stop",
|
||||||
QJsonArray::fromStringList(config.promptTemplate->stopWords())}};
|
QJsonArray::fromStringList(config.promptTemplate->stopWords())}};
|
||||||
|
|
||||||
|
if (Settings::contextSettings().useSpecificInstructions())
|
||||||
|
config.providerRequest["system"] = Settings::contextSettings().specificInstractions();
|
||||||
|
|
||||||
config.promptTemplate->prepareRequest(config.providerRequest, updatedContext);
|
config.promptTemplate->prepareRequest(config.providerRequest, updatedContext);
|
||||||
config.provider->prepareRequest(config.providerRequest);
|
config.provider->prepareRequest(config.providerRequest);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"Name" : "QodeAssist",
|
"Name" : "QodeAssist",
|
||||||
"Version" : "0.2.1",
|
"Version" : "0.2.2",
|
||||||
"CompatVersion" : "${IDE_VERSION_COMPAT}",
|
"CompatVersion" : "${IDE_VERSION_COMPAT}",
|
||||||
"Vendor" : "Petr Mironychev",
|
"Vendor" : "Petr Mironychev",
|
||||||
"Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd",
|
"Copyright" : "(C) ${IDE_COPYRIGHT_YEAR} Petr Mironychev, (C) ${IDE_COPYRIGHT_YEAR} The Qt Company Ltd",
|
||||||
|
@ -53,10 +53,10 @@ const char AUTO_COMPLETION_CHAR_THRESHOLD[] = "QodeAssist.autoCompletionCharThre
|
|||||||
const char AUTO_COMPLETION_TYPING_INTERVAL[] = "QodeAssist.autoCompletionTypingInterval";
|
const char AUTO_COMPLETION_TYPING_INTERVAL[] = "QodeAssist.autoCompletionTypingInterval";
|
||||||
const char MAX_FILE_THRESHOLD[] = "QodeAssist.maxFileThreshold";
|
const char MAX_FILE_THRESHOLD[] = "QodeAssist.maxFileThreshold";
|
||||||
const char OLLAMA_LIVETIME[] = "QodeAssist.ollamaLivetime";
|
const char OLLAMA_LIVETIME[] = "QodeAssist.ollamaLivetime";
|
||||||
const char SPECIFIC_INSTRUCTIONS[] = "QodeAssist.specificInstractions";
|
const char SYSTEM_PROMPT[] = "QodeAssist.systemPrompt";
|
||||||
const char MULTILINE_COMPLETION[] = "QodeAssist.multilineCompletion";
|
const char MULTILINE_COMPLETION[] = "QodeAssist.multilineCompletion";
|
||||||
const char API_KEY[] = "QodeAssist.apiKey";
|
const char API_KEY[] = "QodeAssist.apiKey";
|
||||||
const char USE_SPECIFIC_INSTRUCTIONS[] = "QodeAssist.useSpecificInstructions";
|
const char USE_SYSTEM_PROMPT[] = "QodeAssist.useSystemPrompt";
|
||||||
const char USE_FILE_PATH_IN_CONTEXT[] = "QodeAssist.useFilePathInContext";
|
const char USE_FILE_PATH_IN_CONTEXT[] = "QodeAssist.useFilePathInContext";
|
||||||
const char CUSTOM_JSON_TEMPLATE[] = "QodeAssist.customJsonTemplate";
|
const char CUSTOM_JSON_TEMPLATE[] = "QodeAssist.customJsonTemplate";
|
||||||
const char USE_PROJECT_CHANGES_CACHE[] = "QodeAssist.useProjectChangesCache";
|
const char USE_PROJECT_CHANGES_CACHE[] = "QodeAssist.useProjectChangesCache";
|
||||||
|
10
README.md
10
README.md
@ -65,9 +65,15 @@ If you've successfully used a model that's not listed here, please let us know b
|
|||||||
|
|
||||||
1. Install QtCreator 14.0
|
1. Install QtCreator 14.0
|
||||||
2. Install [Ollama](https://ollama.com). Make sure to review the system requirements before installation.
|
2. Install [Ollama](https://ollama.com). Make sure to review the system requirements before installation.
|
||||||
3. Install a language model in Ollama. For example, you can run:
|
3. Install a language models in Ollama. For example, you can run:
|
||||||
|
|
||||||
|
For suggestions:
|
||||||
```
|
```
|
||||||
ollama run starcoder2:7b
|
ollama run codellama:7b-code
|
||||||
|
```
|
||||||
|
For chat:
|
||||||
|
```
|
||||||
|
ollama run codellama:7b-instruct
|
||||||
```
|
```
|
||||||
4. Download the QodeAssist plugin.
|
4. Download the QodeAssist plugin.
|
||||||
5. Launch Qt Creator and install the plugin:
|
5. Launch Qt Creator and install the plugin:
|
||||||
|
@ -31,6 +31,51 @@
|
|||||||
|
|
||||||
namespace QodeAssist::Chat {
|
namespace QodeAssist::Chat {
|
||||||
|
|
||||||
|
int ChatHistory::estimateTokenCount(const QString &text) const
|
||||||
|
{
|
||||||
|
return text.length() / 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatHistory::addMessage(ChatMessage::Role role, const QString &content)
|
||||||
|
{
|
||||||
|
int tokenCount = estimateTokenCount(content);
|
||||||
|
m_messages.append({role, content, tokenCount});
|
||||||
|
m_totalTokens += tokenCount;
|
||||||
|
trim();
|
||||||
|
}
|
||||||
|
void ChatHistory::clear()
|
||||||
|
{
|
||||||
|
m_messages.clear();
|
||||||
|
m_totalTokens = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<ChatMessage> ChatHistory::getMessages() const
|
||||||
|
{
|
||||||
|
return m_messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ChatHistory::getSystemPrompt() const
|
||||||
|
{
|
||||||
|
return m_systemPrompt;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatHistory::setSystemPrompt(const QString &prompt)
|
||||||
|
{
|
||||||
|
m_systemPrompt = prompt;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatHistory::trim()
|
||||||
|
{
|
||||||
|
while (m_messages.size() > MAX_HISTORY_SIZE || m_totalTokens > MAX_TOKENS) {
|
||||||
|
if (!m_messages.isEmpty()) {
|
||||||
|
m_totalTokens -= m_messages.first().tokenCount;
|
||||||
|
m_messages.removeFirst();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ChatClientInterface::ChatClientInterface(QObject *parent)
|
ChatClientInterface::ChatClientInterface(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_requestHandler(new LLMRequestHandler(this))
|
, m_requestHandler(new LLMRequestHandler(this))
|
||||||
@ -51,15 +96,10 @@ ChatClientInterface::ChatClientInterface(QObject *parent)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// QJsonObject systemMessage;
|
m_chatHistory.setSystemPrompt("You are a helpful C++ and QML programming assistant.");
|
||||||
// systemMessage["role"] = "system";
|
|
||||||
// systemMessage["content"] = "You are a helpful C++ and QML programming assistant.";
|
|
||||||
// m_chatHistory.append(systemMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatClientInterface::~ChatClientInterface()
|
ChatClientInterface::~ChatClientInterface() = default;
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChatClientInterface::sendMessage(const QString &message)
|
void ChatClientInterface::sendMessage(const QString &message)
|
||||||
{
|
{
|
||||||
@ -79,14 +119,11 @@ void ChatClientInterface::sendMessage(const QString &message)
|
|||||||
QJsonObject providerRequest;
|
QJsonObject providerRequest;
|
||||||
providerRequest["model"] = Settings::generalSettings().chatModelName();
|
providerRequest["model"] = Settings::generalSettings().chatModelName();
|
||||||
providerRequest["stream"] = true;
|
providerRequest["stream"] = true;
|
||||||
|
providerRequest["messages"] = prepareMessagesForRequest();
|
||||||
providerRequest["messages"] = m_chatHistory;
|
|
||||||
|
|
||||||
chatTemplate->prepareRequest(providerRequest, context);
|
chatTemplate->prepareRequest(providerRequest, context);
|
||||||
chatProvider->prepareRequest(providerRequest);
|
chatProvider->prepareRequest(providerRequest);
|
||||||
|
|
||||||
m_chatHistory = providerRequest["messages"].toArray();
|
|
||||||
|
|
||||||
LLMConfig config;
|
LLMConfig config;
|
||||||
config.requestType = RequestType::Chat;
|
config.requestType = RequestType::Chat;
|
||||||
config.provider = chatProvider;
|
config.provider = chatProvider;
|
||||||
@ -99,18 +136,22 @@ void ChatClientInterface::sendMessage(const QString &message)
|
|||||||
request["id"] = QUuid::createUuid().toString();
|
request["id"] = QUuid::createUuid().toString();
|
||||||
|
|
||||||
m_accumulatedResponse.clear();
|
m_accumulatedResponse.clear();
|
||||||
m_pendingMessage = message;
|
m_chatHistory.addMessage(ChatMessage::Role::User, message);
|
||||||
m_requestHandler->sendLLMRequest(config, request);
|
m_requestHandler->sendLLMRequest(config, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatClientInterface::clearMessages()
|
void ChatClientInterface::clearMessages()
|
||||||
{
|
{
|
||||||
m_chatHistory = {};
|
m_chatHistory.clear();
|
||||||
m_accumulatedResponse.clear();
|
m_accumulatedResponse.clear();
|
||||||
m_pendingMessage.clear();
|
|
||||||
logMessage("Chat history cleared");
|
logMessage("Chat history cleared");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVector<ChatMessage> ChatClientInterface::getChatHistory() const
|
||||||
|
{
|
||||||
|
return m_chatHistory.getMessages();
|
||||||
|
}
|
||||||
|
|
||||||
void ChatClientInterface::handleLLMResponse(const QString &response, bool isComplete)
|
void ChatClientInterface::handleLLMResponse(const QString &response, bool isComplete)
|
||||||
{
|
{
|
||||||
m_accumulatedResponse += response;
|
m_accumulatedResponse += response;
|
||||||
@ -119,42 +160,33 @@ void ChatClientInterface::handleLLMResponse(const QString &response, bool isComp
|
|||||||
logMessage("Message completed. Final response: " + m_accumulatedResponse);
|
logMessage("Message completed. Final response: " + m_accumulatedResponse);
|
||||||
emit messageReceived(m_accumulatedResponse.trimmed());
|
emit messageReceived(m_accumulatedResponse.trimmed());
|
||||||
|
|
||||||
QJsonObject assistantMessage;
|
m_chatHistory.addMessage(ChatMessage::Role::Assistant, m_accumulatedResponse.trimmed());
|
||||||
assistantMessage["role"] = "assistant";
|
|
||||||
assistantMessage["content"] = m_accumulatedResponse.trimmed();
|
|
||||||
m_chatHistory.append(assistantMessage);
|
|
||||||
|
|
||||||
m_pendingMessage.clear();
|
|
||||||
m_accumulatedResponse.clear();
|
m_accumulatedResponse.clear();
|
||||||
|
|
||||||
trimChatHistory();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatClientInterface::trimChatHistory()
|
QJsonArray ChatClientInterface::prepareMessagesForRequest() const
|
||||||
{
|
{
|
||||||
int maxTokens = 4000;
|
QJsonArray messages;
|
||||||
int totalTokens = 0;
|
|
||||||
QJsonArray newHistory;
|
|
||||||
|
|
||||||
if (!m_chatHistory.isEmpty()
|
messages.append(QJsonObject{{"role", "system"}, {"content", m_chatHistory.getSystemPrompt()}});
|
||||||
&& m_chatHistory.first().toObject()["role"].toString() == "system") {
|
|
||||||
newHistory.append(m_chatHistory.first());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = m_chatHistory.size() - 1; i >= 0; --i) {
|
for (const auto &message : m_chatHistory.getMessages()) {
|
||||||
QJsonObject message = m_chatHistory[i].toObject();
|
QString role;
|
||||||
int messageTokens = message["content"].toString().length() / 4;
|
switch (message.role) {
|
||||||
|
case ChatMessage::Role::User:
|
||||||
if (totalTokens + messageTokens > maxTokens) {
|
role = "user";
|
||||||
break;
|
break;
|
||||||
|
case ChatMessage::Role::Assistant:
|
||||||
|
role = "assistant";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
messages.append(QJsonObject{{"role", role}, {"content", message.content}});
|
||||||
newHistory.prepend(message);
|
|
||||||
totalTokens += messageTokens;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_chatHistory = newHistory;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace QodeAssist::Chat
|
} // namespace QodeAssist::Chat
|
||||||
|
@ -20,12 +20,41 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QtCore/qjsonarray.h>
|
#include <QString>
|
||||||
|
#include <QVector>
|
||||||
#include "QodeAssistData.hpp"
|
#include "QodeAssistData.hpp"
|
||||||
#include "core/LLMRequestHandler.hpp"
|
#include "core/LLMRequestHandler.hpp"
|
||||||
|
|
||||||
namespace QodeAssist::Chat {
|
namespace QodeAssist::Chat {
|
||||||
|
|
||||||
|
struct ChatMessage
|
||||||
|
{
|
||||||
|
enum class Role { System, User, Assistant };
|
||||||
|
Role role;
|
||||||
|
QString content;
|
||||||
|
int tokenCount;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ChatHistory
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void addMessage(ChatMessage::Role role, const QString &content);
|
||||||
|
void clear();
|
||||||
|
QVector<ChatMessage> getMessages() const;
|
||||||
|
QString getSystemPrompt() const;
|
||||||
|
void setSystemPrompt(const QString &prompt);
|
||||||
|
void trim();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVector<ChatMessage> m_messages;
|
||||||
|
QString m_systemPrompt;
|
||||||
|
int m_totalTokens = 0;
|
||||||
|
static const int MAX_HISTORY_SIZE = 50;
|
||||||
|
static const int MAX_TOKENS = 4000;
|
||||||
|
|
||||||
|
int estimateTokenCount(const QString &text) const;
|
||||||
|
};
|
||||||
|
|
||||||
class ChatClientInterface : public QObject
|
class ChatClientInterface : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -36,6 +65,7 @@ public:
|
|||||||
|
|
||||||
void sendMessage(const QString &message);
|
void sendMessage(const QString &message);
|
||||||
void clearMessages();
|
void clearMessages();
|
||||||
|
QVector<ChatMessage> getChatHistory() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void messageReceived(const QString &message);
|
void messageReceived(const QString &message);
|
||||||
@ -43,12 +73,11 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void handleLLMResponse(const QString &response, bool isComplete);
|
void handleLLMResponse(const QString &response, bool isComplete);
|
||||||
void trimChatHistory();
|
QJsonArray prepareMessagesForRequest() const;
|
||||||
|
|
||||||
LLMRequestHandler *m_requestHandler;
|
LLMRequestHandler *m_requestHandler;
|
||||||
QString m_accumulatedResponse;
|
QString m_accumulatedResponse;
|
||||||
QString m_pendingMessage;
|
ChatHistory m_chatHistory;
|
||||||
QJsonArray m_chatHistory;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QodeAssist::Chat
|
} // namespace QodeAssist::Chat
|
||||||
|
@ -55,9 +55,20 @@ QString LMStudioProvider::chatEndpoint() const
|
|||||||
void LMStudioProvider::prepareRequest(QJsonObject &request)
|
void LMStudioProvider::prepareRequest(QJsonObject &request)
|
||||||
{
|
{
|
||||||
auto &settings = Settings::presetPromptsSettings();
|
auto &settings = Settings::presetPromptsSettings();
|
||||||
|
QJsonArray messages;
|
||||||
|
|
||||||
|
if (request.contains("system")) {
|
||||||
|
QJsonObject systemMessage{{"role", "system"},
|
||||||
|
{"content", request.take("system").toString()}};
|
||||||
|
messages.append(systemMessage);
|
||||||
|
}
|
||||||
|
|
||||||
if (request.contains("prompt")) {
|
if (request.contains("prompt")) {
|
||||||
QJsonArray messages{
|
QJsonObject userMessage{{"role", "user"}, {"content", request.take("prompt").toString()}};
|
||||||
{QJsonObject{{"role", "user"}, {"content", request.take("prompt").toString()}}}};
|
messages.append(userMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!messages.isEmpty()) {
|
||||||
request["messages"] = std::move(messages);
|
request["messages"] = std::move(messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,6 @@ void OllamaProvider::prepareRequest(QJsonObject &request)
|
|||||||
|
|
||||||
QJsonObject options;
|
QJsonObject options;
|
||||||
options["num_predict"] = settings.maxTokens();
|
options["num_predict"] = settings.maxTokens();
|
||||||
options["keep_alive"] = settings.ollamaLivetime();
|
|
||||||
options["temperature"] = settings.temperature();
|
options["temperature"] = settings.temperature();
|
||||||
if (settings.useTopP())
|
if (settings.useTopP())
|
||||||
options["top_p"] = settings.topP();
|
options["top_p"] = settings.topP();
|
||||||
@ -70,6 +69,7 @@ void OllamaProvider::prepareRequest(QJsonObject &request)
|
|||||||
if (settings.usePresencePenalty())
|
if (settings.usePresencePenalty())
|
||||||
options["presence_penalty"] = settings.presencePenalty();
|
options["presence_penalty"] = settings.presencePenalty();
|
||||||
request["options"] = options;
|
request["options"] = options;
|
||||||
|
request["keep_alive"] = settings.ollamaLivetime();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OllamaProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse)
|
bool OllamaProvider::handleResponse(QNetworkReply *reply, QString &accumulatedResponse)
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
|
|
||||||
#include "PromptTemplateManager.hpp"
|
|
||||||
#include "settings/PresetPromptsSettings.hpp"
|
#include "settings/PresetPromptsSettings.hpp"
|
||||||
|
|
||||||
namespace QodeAssist::Providers {
|
namespace QodeAssist::Providers {
|
||||||
@ -54,9 +53,20 @@ QString OpenAICompatProvider::chatEndpoint() const
|
|||||||
void OpenAICompatProvider::prepareRequest(QJsonObject &request)
|
void OpenAICompatProvider::prepareRequest(QJsonObject &request)
|
||||||
{
|
{
|
||||||
auto &settings = Settings::presetPromptsSettings();
|
auto &settings = Settings::presetPromptsSettings();
|
||||||
|
QJsonArray messages;
|
||||||
|
|
||||||
|
if (request.contains("system")) {
|
||||||
|
QJsonObject systemMessage{{"role", "system"},
|
||||||
|
{"content", request.take("system").toString()}};
|
||||||
|
messages.append(systemMessage);
|
||||||
|
}
|
||||||
|
|
||||||
if (request.contains("prompt")) {
|
if (request.contains("prompt")) {
|
||||||
QJsonArray messages{
|
QJsonObject userMessage{{"role", "user"}, {"content", request.take("prompt").toString()}};
|
||||||
{QJsonObject{{"role", "user"}, {"content", request.take("prompt").toString()}}}};
|
messages.append(userMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!messages.isEmpty()) {
|
||||||
request["messages"] = std::move(messages);
|
request["messages"] = std::move(messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
|
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "ContextSettings.hpp"
|
#include "ContextSettings.hpp"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
@ -60,11 +58,11 @@ ContextSettings::ContextSettings()
|
|||||||
useFilePathInContext.setDefaultValue(false);
|
useFilePathInContext.setDefaultValue(false);
|
||||||
useFilePathInContext.setLabelText(Tr::tr("Use File Path in Context"));
|
useFilePathInContext.setLabelText(Tr::tr("Use File Path in Context"));
|
||||||
|
|
||||||
useSpecificInstructions.setSettingsKey(Constants::USE_SPECIFIC_INSTRUCTIONS);
|
useSpecificInstructions.setSettingsKey(Constants::USE_SYSTEM_PROMPT);
|
||||||
useSpecificInstructions.setDefaultValue(true);
|
useSpecificInstructions.setDefaultValue(true);
|
||||||
useSpecificInstructions.setLabelText(Tr::tr("Use Specific Instructions"));
|
useSpecificInstructions.setLabelText(Tr::tr("Use System Prompt"));
|
||||||
|
|
||||||
specificInstractions.setSettingsKey(Constants::SPECIFIC_INSTRUCTIONS);
|
specificInstractions.setSettingsKey(Constants::SYSTEM_PROMPT);
|
||||||
specificInstractions.setDisplayStyle(Utils::StringAspect::TextEditDisplay);
|
specificInstractions.setDisplayStyle(Utils::StringAspect::TextEditDisplay);
|
||||||
specificInstractions.setLabelText(
|
specificInstractions.setLabelText(
|
||||||
Tr::tr("Instructions: Please keep %1 for languge name, warning, it shouldn't too big"));
|
Tr::tr("Instructions: Please keep %1 for languge name, warning, it shouldn't too big"));
|
||||||
|
@ -131,6 +131,11 @@ GeneralSettings::GeneralSettings()
|
|||||||
loadProviders();
|
loadProviders();
|
||||||
loadPrompts();
|
loadPrompts();
|
||||||
|
|
||||||
|
llmProviders.setDefaultValue(llmProviders.indexForDisplay("Ollama"));
|
||||||
|
chatLlmProviders.setDefaultValue(chatLlmProviders.indexForDisplay("Ollama"));
|
||||||
|
fimPrompts.setDefaultValue(fimPrompts.indexForDisplay("CodeLLama FIM"));
|
||||||
|
chatPrompts.setDefaultValue(chatPrompts.indexForDisplay("CodeLLama Chat"));
|
||||||
|
|
||||||
readSettings();
|
readSettings();
|
||||||
|
|
||||||
auto fimProviderName = llmProviders.displayForIndex(llmProviders.value());
|
auto fimProviderName = llmProviders.displayForIndex(llmProviders.value());
|
||||||
@ -273,12 +278,12 @@ void GeneralSettings::resetPageToDefaults()
|
|||||||
resetAspect(startSuggestionTimer);
|
resetAspect(startSuggestionTimer);
|
||||||
resetAspect(autoCompletionTypingInterval);
|
resetAspect(autoCompletionTypingInterval);
|
||||||
resetAspect(autoCompletionCharThreshold);
|
resetAspect(autoCompletionCharThreshold);
|
||||||
|
resetAspect(llmProviders);
|
||||||
|
resetAspect(chatLlmProviders);
|
||||||
|
resetAspect(fimPrompts);
|
||||||
|
resetAspect(chatPrompts);
|
||||||
}
|
}
|
||||||
|
|
||||||
int fimIndex = llmProviders.indexForDisplay("Ollama");
|
|
||||||
llmProviders.setVolatileValue(fimIndex);
|
|
||||||
int chatIndex = chatLlmProviders.indexForDisplay("Ollama");
|
|
||||||
chatLlmProviders.setVolatileValue(chatIndex);
|
|
||||||
modelName.setVolatileValue("");
|
modelName.setVolatileValue("");
|
||||||
chatModelName.setVolatileValue("");
|
chatModelName.setVolatileValue("");
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ class CodeLlamaFimTemplate : public PromptTemplate
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TemplateType type() const override { return TemplateType::Fim; }
|
TemplateType type() const override { return TemplateType::Fim; }
|
||||||
QString name() const override { return "CodeLlama FIM"; }
|
QString name() const override { return "CodeLLama FIM"; }
|
||||||
QString promptTemplate() const override { return "%1<PRE> %2 <SUF>%3 <MID>"; }
|
QString promptTemplate() const override { return "%1<PRE> %2 <SUF>%3 <MID>"; }
|
||||||
QStringList stopWords() const override
|
QStringList stopWords() const override
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ class CodeLlamaInstructTemplate : public PromptTemplate
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TemplateType type() const override { return TemplateType::Chat; }
|
TemplateType type() const override { return TemplateType::Chat; }
|
||||||
QString name() const override { return "CodeLlama Chat"; }
|
QString name() const override { return "CodeLLama Chat"; }
|
||||||
QString promptTemplate() const override { return "[INST] %1 [/INST]"; }
|
QString promptTemplate() const override { return "[INST] %1 [/INST]"; }
|
||||||
QStringList stopWords() const override { return QStringList() << "[INST]" << "[/INST]"; }
|
QStringList stopWords() const override { return QStringList() << "[INST]" << "[/INST]"; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user