Formatting
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"""Tests for the Agent."""
|
||||
|
||||
from unittest.mock import Mock, patch
|
||||
from unittest.mock import Mock
|
||||
|
||||
from agent.agent import Agent
|
||||
from infrastructure.persistence import get_memory
|
||||
@@ -55,8 +55,8 @@ class TestExecuteToolCall:
|
||||
"id": "call_123",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "download"}'
|
||||
}
|
||||
"arguments": '{"folder_type": "download"}',
|
||||
},
|
||||
}
|
||||
result = agent._execute_tool_call(tool_call)
|
||||
|
||||
@@ -68,10 +68,7 @@ class TestExecuteToolCall:
|
||||
|
||||
tool_call = {
|
||||
"id": "call_123",
|
||||
"function": {
|
||||
"name": "unknown_tool",
|
||||
"arguments": '{}'
|
||||
}
|
||||
"function": {"name": "unknown_tool", "arguments": "{}"},
|
||||
}
|
||||
result = agent._execute_tool_call(tool_call)
|
||||
|
||||
@@ -84,10 +81,7 @@ class TestExecuteToolCall:
|
||||
|
||||
tool_call = {
|
||||
"id": "call_123",
|
||||
"function": {
|
||||
"name": "set_path_for_folder",
|
||||
"arguments": '{}'
|
||||
}
|
||||
"function": {"name": "set_path_for_folder", "arguments": "{}"},
|
||||
}
|
||||
result = agent._execute_tool_call(tool_call)
|
||||
|
||||
@@ -102,8 +96,8 @@ class TestExecuteToolCall:
|
||||
"id": "call_123",
|
||||
"function": {
|
||||
"name": "set_path_for_folder",
|
||||
"arguments": '{"folder_name": 123}' # Wrong type
|
||||
}
|
||||
"arguments": '{"folder_name": 123}', # Wrong type
|
||||
},
|
||||
}
|
||||
result = agent._execute_tool_call(tool_call)
|
||||
|
||||
@@ -116,10 +110,7 @@ class TestExecuteToolCall:
|
||||
|
||||
tool_call = {
|
||||
"id": "call_123",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{invalid json}'
|
||||
}
|
||||
"function": {"name": "list_folder", "arguments": "{invalid json}"},
|
||||
}
|
||||
result = agent._execute_tool_call(tool_call)
|
||||
|
||||
@@ -160,40 +151,39 @@ class TestStep:
|
||||
|
||||
assert "found" in response.lower() or "torrent" in response.lower()
|
||||
assert mock_llm_with_tool_call.complete.call_count == 2
|
||||
|
||||
|
||||
# CRITICAL: Verify tools were passed to LLM
|
||||
first_call_args = mock_llm_with_tool_call.complete.call_args_list[0]
|
||||
assert first_call_args[1]['tools'] is not None, "Tools not passed to LLM!"
|
||||
assert len(first_call_args[1]['tools']) > 0, "Tools list is empty!"
|
||||
assert first_call_args[1]["tools"] is not None, "Tools not passed to LLM!"
|
||||
assert len(first_call_args[1]["tools"]) > 0, "Tools list is empty!"
|
||||
|
||||
def test_step_max_iterations(self, memory, mock_llm):
|
||||
"""Should stop after max iterations."""
|
||||
call_count = [0]
|
||||
|
||||
|
||||
def mock_complete(messages, tools=None):
|
||||
call_count[0] += 1
|
||||
# CRITICAL: Verify tools are passed (except on forced final call)
|
||||
if call_count[0] <= 3:
|
||||
assert tools is not None, f"Tools not passed on call {call_count[0]}!"
|
||||
|
||||
|
||||
if call_count[0] <= 3:
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": None,
|
||||
"tool_calls": [{
|
||||
"id": f"call_{call_count[0]}",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "download"}'
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": f"call_{call_count[0]}",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "download"}',
|
||||
},
|
||||
}
|
||||
}]
|
||||
],
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": "I couldn't complete the task."
|
||||
}
|
||||
|
||||
return {"role": "assistant", "content": "I couldn't complete the task."}
|
||||
|
||||
mock_llm.complete = Mock(side_effect=mock_complete)
|
||||
agent = Agent(llm=mock_llm, max_tool_iterations=3)
|
||||
|
||||
@@ -241,49 +231,53 @@ class TestAgentIntegration:
|
||||
memory.ltm.set_config("movie_folder", str(real_folder["movies"]))
|
||||
|
||||
call_count = [0]
|
||||
|
||||
|
||||
def mock_complete(messages, tools=None):
|
||||
call_count[0] += 1
|
||||
# CRITICAL: Verify tools are passed on every call
|
||||
assert tools is not None, f"Tools not passed on call {call_count[0]}!"
|
||||
|
||||
|
||||
if call_count[0] == 1:
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": None,
|
||||
"tool_calls": [{
|
||||
"id": "call_1",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "download"}'
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "call_1",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "download"}',
|
||||
},
|
||||
}
|
||||
}]
|
||||
],
|
||||
}
|
||||
elif call_count[0] == 2:
|
||||
# CRITICAL: Verify tool result was sent back
|
||||
tool_messages = [m for m in messages if m.get('role') == 'tool']
|
||||
tool_messages = [m for m in messages if m.get("role") == "tool"]
|
||||
assert len(tool_messages) > 0, "Tool result not sent back to LLM!"
|
||||
|
||||
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": None,
|
||||
"tool_calls": [{
|
||||
"id": "call_2",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "movie"}'
|
||||
"tool_calls": [
|
||||
{
|
||||
"id": "call_2",
|
||||
"function": {
|
||||
"name": "list_folder",
|
||||
"arguments": '{"folder_type": "movie"}',
|
||||
},
|
||||
}
|
||||
}]
|
||||
],
|
||||
}
|
||||
else:
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": "I listed both folders for you."
|
||||
"content": "I listed both folders for you.",
|
||||
}
|
||||
|
||||
|
||||
mock_llm.complete = Mock(side_effect=mock_complete)
|
||||
agent = Agent(llm=mock_llm)
|
||||
|
||||
|
||||
response = agent.step("List my downloads and movies")
|
||||
|
||||
assert call_count[0] == 3
|
||||
|
||||
Reference in New Issue
Block a user