fix: Improve agents profiles for Ollama

This commit is contained in:
Petr Mironychev
2026-06-28 23:37:28 +02:00
parent a6921f523a
commit 755263c4de
7 changed files with 61 additions and 9 deletions

View File

@@ -18,7 +18,10 @@ namespace QodeAssist {
SessionManager::SessionManager(AgentFactory *agentFactory, QObject *parent)
: QObject(parent)
, m_agentFactory(agentFactory)
{}
{
if (m_agentFactory)
connect(m_agentFactory, &AgentFactory::agentsChanged, this, &SessionManager::flushPool);
}
SessionManager::~SessionManager() = default;
@@ -101,7 +104,7 @@ Session *SessionManager::acquire(const QString &agentName, QString *errorOut)
auto &bucket = m_pool[agentName];
while (!bucket.isEmpty()) {
QPointer<Session> pooled = bucket.takeLast();
if (pooled && pooled->isValid()) {
if (pooled && pooled->isValid() && pooledAgentMatchesCurrent(pooled, agentName)) {
resetSession(pooled);
m_sessions.append(pooled);
return pooled.data();
@@ -154,6 +157,32 @@ void SessionManager::resetSession(Session *session)
}
}
bool SessionManager::pooledAgentMatchesCurrent(Session *session, const QString &agentName) const
{
if (!m_agentFactory)
return true;
Agent *agent = session ? session->agent() : nullptr;
if (!agent)
return false;
const AgentConfig *current = m_agentFactory->configByName(agentName);
if (!current)
return false;
const AgentConfig &snapshot = agent->config();
return snapshot.model == current->model
&& snapshot.providerInstance == current->providerInstance;
}
void SessionManager::flushPool()
{
for (auto &bucket : m_pool) {
for (const QPointer<Session> &pooled : bucket) {
if (pooled)
pooled->deleteLater();
}
}
m_pool.clear();
}
void SessionManager::removeSession(Session *session)
{
if (!session)

View File

@@ -52,6 +52,9 @@ signals:
private:
void resetSession(Session *session);
void flushPool();
[[nodiscard]] bool pooledAgentMatchesCurrent(
Session *session, const QString &agentName) const;
static constexpr int kMaxPooledPerAgent = 2;

View File

@@ -18,6 +18,7 @@
<file>ollama_chat_completion.toml</file>
<file>ollama_base_fim.toml</file>
<file>ollama_fim.toml</file>
<file>ollama_codellama_qml_fim.toml</file>
</qresource>
<qresource prefix="/roles">
<file alias="qt-cpp-developer.md">roles/qt-cpp-developer.md</file>

View File

@@ -16,7 +16,7 @@ system_prompt = """
[body]
max_tokens = 512
temperature = 0
temperature = 0.2
stop_sequences = ["</code_context>"]
messages = """
[

View File

@@ -26,7 +26,6 @@ messages = """
[body.options]
num_predict = 512
temperature = 0
num_ctx = 8192
temperature = 0.2
keep_alive = "5m"
stop = ["</code_context>"]
stop = ["</code_context>"]

View File

@@ -0,0 +1,23 @@
schema_version = 1
name = "Ollama CodeLlama QML FIM"
description = "Local Ollama FIM for the CodeLlama-13B QML fine-tune (raw passthrough Modelfile, suffix-first markers)."
provider_instance = "Ollama (Native)"
endpoint = "/api/generate"
model = "theqtcompany/codellama-7b-qml"
tags = ["completion", "ollama", "local", "fim", "qml"]
[match]
file_patterns = ["*.qml"]
[body]
prompt = """{{ tojson("<SUF>" + ctx.suffix + "<PRE>" + ctx.prefix + "<MID>") }}"""
[body.options]
temperature = 0
top_p = 1
repeat_penalty = 1.05
num_predict = 500
stop = ["<SUF>", "<PRE>", "</PRE>", "</SUF>", "< EOT >", "\\end", "<MID>", "</MID>", "##"]

View File

@@ -10,7 +10,4 @@ tags = ["completion", "ollama", "local", "fim"]
[body.options]
num_predict = 512
temperature = 0.2
top_p = 0.9
num_ctx = 8192
keep_alive = "5m"
stop = ["<EOT>"]