From 813755b8799ed7009d4572981b7780d1facae082 Mon Sep 17 00:00:00 2001 From: Anish Date: Sun, 12 Apr 2026 12:56:20 +0530 Subject: [PATCH] Done --- src/llm/__init__.py | 8 ++++---- src/llm/core/types.py | 6 ++++++ src/llm/prompt/__init__.py | 6 +++--- src/llm/providers/__init__.py | 4 ++-- src/llm/tools/__init__.py | 8 ++++---- src/llm/tools/executor.py | 8 ++++++++ 6 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/llm/__init__.py b/src/llm/__init__.py index e7c28925..21e48e00 100644 --- a/src/llm/__init__.py +++ b/src/llm/__init__.py @@ -12,19 +12,19 @@ from llm.cli.selector import interactive_select __version__ = "0.1.0" -__all__ = [ - "LLMProvider", +__all__ = ( "LLMInput", "LLMOutput", + "LLMProvider", "Message", - "get_provider", "ToolCall", "ToolDefinition", "ToolResult", "ToolExecutor", "ToolRegistry", + "get_provider", "interactive_select", -] +) def gui() -> None: diff --git a/src/llm/core/types.py b/src/llm/core/types.py index 902fd28a..b53588dc 100644 --- a/src/llm/core/types.py +++ b/src/llm/core/types.py @@ -26,6 +26,7 @@ class Message: content: str name: str | None = None tool_call_id: str | None = None + tool_calls: list[ToolCall] | None = None def to_dict(self) -> dict[str, Any]: result: dict[str, Any] = {"role": self.role.value, "content": self.content} @@ -33,6 +34,11 @@ class Message: result["name"] = self.name if self.tool_call_id: result["tool_call_id"] = self.tool_call_id + if self.tool_calls: + result["tool_calls"] = [ + {"id": tc.id, "function": {"name": tc.name, "arguments": tc.arguments}} + for tc in self.tool_calls + ] return result diff --git a/src/llm/prompt/__init__.py b/src/llm/prompt/__init__.py index 6ae8f90a..2fae65f1 100644 --- a/src/llm/prompt/__init__.py +++ b/src/llm/prompt/__init__.py @@ -3,11 +3,11 @@ from llm.prompt.builder import PromptBuilder, adapt_messages_for_provider, get_provider_builder from llm.prompt.templates import TEMPLATES, get_template, get_template_or_default -__all__ = [ +__all__ = ( "PromptBuilder", + "TEMPLATES", "adapt_messages_for_provider", "get_provider_builder", - "TEMPLATES", "get_template", "get_template_or_default", -] +) diff --git a/src/llm/providers/__init__.py b/src/llm/providers/__init__.py index 6194c3a2..c495fa1c 100644 --- a/src/llm/providers/__init__.py +++ b/src/llm/providers/__init__.py @@ -5,10 +5,10 @@ from llm.providers.openai import OpenAIProvider from llm.providers.ollama import OllamaProvider from llm.providers.resolver import get_provider, register_provider -__all__ = [ +__all__ = ( "ClaudeProvider", "OpenAIProvider", "OllamaProvider", "get_provider", "register_provider", -] +) diff --git a/src/llm/tools/__init__.py b/src/llm/tools/__init__.py index cb2c5b7a..1c59d750 100644 --- a/src/llm/tools/__init__.py +++ b/src/llm/tools/__init__.py @@ -2,8 +2,8 @@ from llm.tools.executor import ReActAgent, ToolExecutor, ToolRegistry -__all__ = [ - "ToolRegistry", - "ToolExecutor", +__all__ = ( "ReActAgent", -] + "ToolExecutor", + "ToolRegistry", +) diff --git a/src/llm/tools/executor.py b/src/llm/tools/executor.py index 8cd134e0..b2aa1a5a 100644 --- a/src/llm/tools/executor.py +++ b/src/llm/tools/executor.py @@ -91,6 +91,14 @@ class ReActAgent: if not output.has_tool_calls: return output + messages.append( + Message( + role=Role.ASSISTANT, + content=output.content or "", + tool_calls=output.tool_calls, + ) + ) + results = self.executor.execute_all(output.tool_calls) for result in results: