diff --git a/src/api/routes.py b/src/api/routes.py index 10108c0..501123b 100644 --- a/src/api/routes.py +++ b/src/api/routes.py @@ -56,7 +56,7 @@ def format_messages_with_tools(messages: list, tools: Optional[list] = None) -> formatted = [] # Check if there are already tool results in the conversation - # or if assistant has already generated tool_calls + # or if assistant has already generated tool_calls or tool execution results has_tool_results = any(msg.role == "tool" for msg in messages) has_tool_calls = any( msg.role == "assistant" and msg.tool_calls @@ -67,15 +67,14 @@ def format_messages_with_tools(messages: list, tools: Optional[list] = None) -> msg.role == "assistant" and msg.content and '"tool_calls"' in msg.content for msg in messages ) - - # Debug: log what we're checking - if tools: - print(f"DEBUG TOOLS: has_tool_results={has_tool_results}, has_tool_calls={has_tool_calls}, has_tool_calls_in_content={has_tool_calls_in_content}") - for i, msg in enumerate(messages): - print(f" [{i}] {msg.role}: content={repr(msg.content)[:50] if msg.content else None}, tool_calls={msg.tool_calls is not None and len(msg.tool_calls) > 0 if hasattr(msg, 'tool_calls') else False}") + # Check for server-side tool execution results (prevents looping) + has_tool_execution_results = any( + msg.role == "assistant" and msg.content and "Tool '" in msg.content and "result:" in msg.content + for msg in messages + ) # Add tool instructions if tools are present and no tool results/calls yet - if tools and not has_tool_results and not has_tool_calls and not has_tool_calls_in_content: + if tools and not has_tool_results and not has_tool_calls and not has_tool_calls_in_content and not has_tool_execution_results: tool_instructions = """You have access to tools. When asked to create, write, or modify files, USE the tools. CRITICAL: Do not explain what you will do. Do not show commands. Actually use the tools to do it.