mirror of
https://github.com/Palm1r/QodeAssist.git
synced 2026-05-30 02:49:12 -04:00
feat: Run for quick refactoring only reading context tools
This commit is contained in:
@@ -36,6 +36,14 @@ enum ToolPermission {
|
|||||||
NetworkAccess = 1 << 2
|
NetworkAccess = 1 << 2
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(ToolPermissions, ToolPermission)
|
Q_DECLARE_FLAGS(ToolPermissions, ToolPermission)
|
||||||
|
Q_DECLARE_OPERATORS_FOR_FLAGS(ToolPermissions)
|
||||||
|
|
||||||
|
enum class RunToolsFilter {
|
||||||
|
ALL, // Run all tools (no filtering)
|
||||||
|
OnlyRead, // Run only read tools (FileSystemRead + None)
|
||||||
|
OnlyWrite, // Run only write tools (FileSystemWrite)
|
||||||
|
OnlyNetworking // Run only network tools (NetworkAccess)
|
||||||
|
};
|
||||||
|
|
||||||
class BaseTool : public QObject
|
class BaseTool : public QObject
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -128,8 +128,13 @@ void ClaudeProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::Claude);
|
LLMCore::ToolSchemaFormat::Claude, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to Claude request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to Claude request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -142,8 +142,13 @@ void GoogleAIProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::Google);
|
LLMCore::ToolSchemaFormat::Google, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to Google AI request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to Google AI request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -256,8 +256,13 @@ void LMStudioProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::OpenAI);
|
LLMCore::ToolSchemaFormat::OpenAI, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to LMStudio request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to LMStudio request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -107,8 +107,13 @@ void LlamaCppProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::OpenAI);
|
LLMCore::ToolSchemaFormat::OpenAI, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to llama.cpp request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to llama.cpp request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -277,8 +277,13 @@ void MistralAIProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::OpenAI);
|
LLMCore::ToolSchemaFormat::OpenAI, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to Mistral request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to Mistral request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -113,8 +113,13 @@ void OllamaProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->toolsFactory()->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->toolsFactory()->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::Ollama);
|
LLMCore::ToolSchemaFormat::Ollama, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(
|
LOG_MESSAGE(
|
||||||
|
|||||||
@@ -107,8 +107,13 @@ void OpenAICompatProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::OpenAI);
|
LLMCore::ToolSchemaFormat::OpenAI, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(
|
LOG_MESSAGE(
|
||||||
|
|||||||
@@ -127,8 +127,13 @@ void OpenAIProvider::prepareRequest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isToolsEnabled) {
|
if (isToolsEnabled) {
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL;
|
||||||
|
if (type == LLMCore::RequestType::QuickRefactoring) {
|
||||||
|
filter = LLMCore::RunToolsFilter::OnlyRead;
|
||||||
|
}
|
||||||
|
|
||||||
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
auto toolsDefinitions = m_toolsManager->getToolsDefinitions(
|
||||||
LLMCore::ToolSchemaFormat::OpenAI);
|
LLMCore::ToolSchemaFormat::OpenAI, filter);
|
||||||
if (!toolsDefinitions.isEmpty()) {
|
if (!toolsDefinitions.isEmpty()) {
|
||||||
request["tools"] = toolsDefinitions;
|
request["tools"] = toolsDefinitions;
|
||||||
LOG_MESSAGE(QString("Added %1 tools to OpenAI request").arg(toolsDefinitions.size()));
|
LOG_MESSAGE(QString("Added %1 tools to OpenAI request").arg(toolsDefinitions.size()));
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ LLMCore::BaseTool *ToolsFactory::getToolByName(const QString &name) const
|
|||||||
return m_tools.value(name, nullptr);
|
return m_tools.value(name, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonArray ToolsFactory::getToolsDefinitions(LLMCore::ToolSchemaFormat format) const
|
QJsonArray ToolsFactory::getToolsDefinitions(
|
||||||
|
LLMCore::ToolSchemaFormat format, LLMCore::RunToolsFilter filter) const
|
||||||
{
|
{
|
||||||
QJsonArray toolsArray;
|
QJsonArray toolsArray;
|
||||||
const auto &settings = Settings::toolsSettings();
|
const auto &settings = Settings::toolsSettings();
|
||||||
@@ -100,6 +101,42 @@ QJsonArray ToolsFactory::getToolsDefinitions(LLMCore::ToolSchemaFormat format) c
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto requiredPerms = it.value()->requiredPermissions();
|
const auto requiredPerms = it.value()->requiredPermissions();
|
||||||
|
|
||||||
|
if (filter != LLMCore::RunToolsFilter::ALL) {
|
||||||
|
bool matchesFilter = false;
|
||||||
|
|
||||||
|
switch (filter) {
|
||||||
|
case LLMCore::RunToolsFilter::OnlyRead:
|
||||||
|
if (requiredPerms == LLMCore::ToolPermission::None
|
||||||
|
|| requiredPerms.testFlag(LLMCore::ToolPermission::FileSystemRead)) {
|
||||||
|
matchesFilter = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LLMCore::RunToolsFilter::OnlyWrite:
|
||||||
|
if (requiredPerms.testFlag(LLMCore::ToolPermission::FileSystemWrite)) {
|
||||||
|
matchesFilter = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LLMCore::RunToolsFilter::OnlyNetworking:
|
||||||
|
if (requiredPerms.testFlag(LLMCore::ToolPermission::NetworkAccess)) {
|
||||||
|
matchesFilter = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LLMCore::RunToolsFilter::ALL:
|
||||||
|
matchesFilter = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matchesFilter) {
|
||||||
|
LOG_MESSAGE(QString("Tool '%1' skipped by tools filter")
|
||||||
|
.arg(it.value()->name()));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool hasPermission = true;
|
bool hasPermission = true;
|
||||||
|
|
||||||
if (requiredPerms.testFlag(LLMCore::ToolPermission::FileSystemRead)) {
|
if (requiredPerms.testFlag(LLMCore::ToolPermission::FileSystemRead)) {
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ public:
|
|||||||
|
|
||||||
QList<LLMCore::BaseTool *> getAvailableTools() const;
|
QList<LLMCore::BaseTool *> getAvailableTools() const;
|
||||||
LLMCore::BaseTool *getToolByName(const QString &name) const;
|
LLMCore::BaseTool *getToolByName(const QString &name) const;
|
||||||
QJsonArray getToolsDefinitions(LLMCore::ToolSchemaFormat format) const;
|
QJsonArray getToolsDefinitions(
|
||||||
|
LLMCore::ToolSchemaFormat format,
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL) const;
|
||||||
QString getStringName(const QString &name) const;
|
QString getStringName(const QString &name) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -127,13 +127,14 @@ void ToolsManager::executeNextTool(const QString &requestId)
|
|||||||
LOG_MESSAGE(QString("ToolsManager: Started async execution of %1").arg(tool.name));
|
LOG_MESSAGE(QString("ToolsManager: Started async execution of %1").arg(tool.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonArray ToolsManager::getToolsDefinitions(LLMCore::ToolSchemaFormat format) const
|
QJsonArray ToolsManager::getToolsDefinitions(
|
||||||
|
LLMCore::ToolSchemaFormat format, LLMCore::RunToolsFilter filter) const
|
||||||
{
|
{
|
||||||
if (!m_toolsFactory) {
|
if (!m_toolsFactory) {
|
||||||
return QJsonArray();
|
return QJsonArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_toolsFactory->getToolsDefinitions(format);
|
return m_toolsFactory->getToolsDefinitions(format, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolsManager::cleanupRequest(const QString &requestId)
|
void ToolsManager::cleanupRequest(const QString &requestId)
|
||||||
|
|||||||
@@ -59,7 +59,9 @@ public:
|
|||||||
const QString &toolName,
|
const QString &toolName,
|
||||||
const QJsonObject &input);
|
const QJsonObject &input);
|
||||||
|
|
||||||
QJsonArray getToolsDefinitions(LLMCore::ToolSchemaFormat format) const;
|
QJsonArray getToolsDefinitions(
|
||||||
|
LLMCore::ToolSchemaFormat format,
|
||||||
|
LLMCore::RunToolsFilter filter = LLMCore::RunToolsFilter::ALL) const;
|
||||||
void cleanupRequest(const QString &requestId);
|
void cleanupRequest(const QString &requestId);
|
||||||
|
|
||||||
ToolsFactory *toolsFactory() const;
|
ToolsFactory *toolsFactory() const;
|
||||||
|
|||||||
Reference in New Issue
Block a user