feat: Run for quick refactoring only reading context tools

This commit is contained in:
Petr Mironychev
2025-11-17 11:25:42 +01:00
parent 31e3d9db7c
commit 9974b2f5e6
13 changed files with 103 additions and 13 deletions

View File

@ -81,7 +81,8 @@ LLMCore::BaseTool *ToolsFactory::getToolByName(const QString &name) const
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;
const auto &settings = Settings::toolsSettings();
@ -100,6 +101,42 @@ QJsonArray ToolsFactory::getToolsDefinitions(LLMCore::ToolSchemaFormat format) c
}
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;
if (requiredPerms.testFlag(LLMCore::ToolPermission::FileSystemRead)) {

View File

@ -34,7 +34,9 @@ public:
QList<LLMCore::BaseTool *> getAvailableTools() 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;
private:

View File

@ -127,13 +127,14 @@ void ToolsManager::executeNextTool(const QString &requestId)
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) {
return QJsonArray();
}
return m_toolsFactory->getToolsDefinitions(format);
return m_toolsFactory->getToolsDefinitions(format, filter);
}
void ToolsManager::cleanupRequest(const QString &requestId)

View File

@ -59,7 +59,9 @@ public:
const QString &toolName,
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);
ToolsFactory *toolsFactory() const;