/
sc_p
/
EnergoAI
Обзор
Документация
Войти
/
sc_p
/
EnergoAI
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
core/tools.py
133 строки
4 KB
Павел Щёголев
Загрузить файлы в «»
12 мар 2026, 04:54
Верифицирован
12 мар 2026, 04:54
628f0d6
Код
Авторство
О чём код?
from typing import List from langchain.tools import Tool from .sandbox import PythonSandbox def make_sandbox_tool(sandbox: PythonSandbox): def _run(code: str) -> str: state = sandbox.run(code) if sandbox.output: sandbox.output.show_sandbox(state) return state.stdout if state.stdout.strip() else "[sandbox] выполнено" return Tool( name="python_sandbox", description="...", func=_run ) def load_plugin_tools() -> List[Tool]: import importlib import pkgutil import plugins result: List[Tool] = [] for _, name, _ in pkgutil.iter_modules(plugins.__path__): module = importlib.import_module(f"plugins.{name}") if hasattr(module, "tools"): result.extend(getattr(module, "tools")) return result from langchain.tools import Tool from ui.ui_tools import UITool def ui_tool_to_langchain_tool(ui_tool: UITool) -> Tool: def safe_handler(*args, **kwargs): result = ui_tool.handler(*args, **kwargs) return result or "Операция выполнена." return Tool( name=ui_tool.name, description=ui_tool.description, func=ui_tool.handler ) def wrap_tool(func, controller): def wrapped(*args, **kwargs): controller.tool_used = True return func(*args, **kwargs) return wrapped def make_llm_settings_tool(controller): def set_llm_param(command: str): """ command example: 'temperature 0.1' 'top_p 0.95' 'max_tokens 2048' """ parts = command.strip().split() if len(parts) != 2: return "Формат: <параметр> <значение>" param, value_str = parts try: value = float(value_str) except ValueError: return "Значение должно быть числом" return controller.update_llm_setting(param, value) return Tool( name="set_llm_parameter", description=( "Устанавливает параметр LLM.\n" "Используй, когда пользователь говорит:\n" "- установи temperature 0.1\n" "- измени top_p 0.95\n" "- задай max_tokens 2048\n\n" "Аргумент:\n" "- строка вида: '<параметр> <значение>'" ), func=set_llm_param ) def make_show_llm_settings_tool(controller): def show_settings(_: str = ""): return controller.get_llm_settings() return Tool( name="show_llm_settings", description=( "Показывает текущие параметры LLM.\n" "Используй, когда пользователь спрашивает:\n" "- покажи текущие настройки\n" "- какие параметры сейчас установлены\n" "- настройки модели" ), func=show_settings, ) def make_llm_tools(controller): def set_llm_param(input_text: str): parts = input_text.strip().split() if len(parts) != 2: return "Формат: <параметр> <значение>" key, value = parts try: value = float(value) except ValueError: return "Значение должно быть числом" return controller.update_llm_setting(key, value) def show_settings(_: str = ""): return controller.get_llm_settings() return [ UITool( name="set_llm_param", description="Установить параметр LLM (temperature, top_p, max_tokens)", handler=set_llm_param ), UITool( name="show_llm_settings", description="Показывает текущие настройки LLM", handler=show_settings ) ]