diff --git a/llmcore/CMakeLists.txt b/llmcore/CMakeLists.txt index fdce389..272a44b 100644 --- a/llmcore/CMakeLists.txt +++ b/llmcore/CMakeLists.txt @@ -17,6 +17,8 @@ add_library(LLMCore STATIC HttpClient.hpp HttpClient.cpp DataBuffers.hpp SSEBuffer.hpp SSEBuffer.cpp + ITool.hpp + IToolsFactory.hpp ) target_link_libraries(LLMCore diff --git a/llmcore/ITool.hpp b/llmcore/ITool.hpp new file mode 100644 index 0000000..ebe893b --- /dev/null +++ b/llmcore/ITool.hpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2025 Petr Mironychev + * + * This file is part of QodeAssist. + * + * QodeAssist is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QodeAssist is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QodeAssist. If not, see . + */ + +#pragma once + +#include +#include +#include + +namespace QodeAssist::LLMCore { + +class ITool : public QObject +{ + Q_OBJECT + +public: + explicit ITool(QObject *parent = nullptr) + : QObject(parent) + {} + virtual ~ITool() = default; + + virtual QString name() const = 0; + virtual QString description() const = 0; + virtual QJsonObject getDefinition() const = 0; + virtual QString execute(const QJsonObject &input = QJsonObject()) = 0; + +signals: + void toolStarted(const QString &toolName); + void toolCompleted(const QString &toolName, const QString &result); + void toolFailed(const QString &toolName, const QString &error); +}; + +} // namespace QodeAssist::LLMCore diff --git a/llmcore/IToolsFactory.hpp b/llmcore/IToolsFactory.hpp new file mode 100644 index 0000000..8f47c13 --- /dev/null +++ b/llmcore/IToolsFactory.hpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2025 Petr Mironychev + * + * This file is part of QodeAssist. + * + * QodeAssist is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * QodeAssist is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with QodeAssist. If not, see . + */ + +#pragma once + +#include +#include + +#include "ITool.hpp" + +namespace QodeAssist::LLMCore { + +class IToolsFactory +{ +public: + virtual ~IToolsFactory() = default; + virtual QList getAvailableTools() const = 0; + virtual ITool *getToolByName(const QString &name) const = 0; + virtual QJsonArray getToolsDefinitions() const = 0; +}; + +} // namespace QodeAssist::LLMCore