diff --git a/agents/s01_agent_loop.py b/agents/s01_agent_loop.py index 3e6c9133d..3db5bfab7 100644 --- a/agents/s01_agent_loop.py +++ b/agents/s01_agent_loop.py @@ -28,6 +28,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -70,8 +71,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - # Append assistant turn - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) # If the model didn't call a tool, we're done if response.stop_reason != "tool_use": return diff --git a/agents/s02_tool_use.py b/agents/s02_tool_use.py index a05ac4bf9..a9dabc93c 100644 --- a/agents/s02_tool_use.py +++ b/agents/s02_tool_use.py @@ -24,6 +24,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -116,7 +117,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s03_todo_write.py b/agents/s03_todo_write.py index 9ca805c05..2741a2a53 100644 --- a/agents/s03_todo_write.py +++ b/agents/s03_todo_write.py @@ -32,6 +32,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -168,7 +169,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s04_subagent.py b/agents/s04_subagent.py index 9de087b1f..8a30374b8 100644 --- a/agents/s04_subagent.py +++ b/agents/s04_subagent.py @@ -28,6 +28,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -119,7 +120,7 @@ def run_subagent(prompt: str) -> str: model=MODEL, system=SUBAGENT_SYSTEM, messages=sub_messages, tools=CHILD_TOOLS, max_tokens=8000, ) - sub_messages.append({"role": "assistant", "content": response.content}) + sub_messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": break results = [] @@ -146,7 +147,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=PARENT_TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s05_skill_loading.py b/agents/s05_skill_loading.py index ee8ffc157..2bff79abb 100644 --- a/agents/s05_skill_loading.py +++ b/agents/s05_skill_loading.py @@ -41,6 +41,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -190,7 +191,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s06_context_compact.py b/agents/s06_context_compact.py index b9c6aa8d2..11c55a31f 100644 --- a/agents/s06_context_compact.py +++ b/agents/s06_context_compact.py @@ -41,6 +41,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -203,7 +204,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s07_task_system.py b/agents/s07_task_system.py index 82b16af62..836408535 100644 --- a/agents/s07_task_system.py +++ b/agents/s07_task_system.py @@ -28,6 +28,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -212,7 +213,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s08_background_tasks.py b/agents/s08_background_tasks.py index 77a992eaf..16f64056c 100644 --- a/agents/s08_background_tasks.py +++ b/agents/s08_background_tasks.py @@ -32,6 +32,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -198,7 +199,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s09_agent_teams.py b/agents/s09_agent_teams.py index 284a1ac19..78c0c703e 100644 --- a/agents/s09_agent_teams.py +++ b/agents/s09_agent_teams.py @@ -51,6 +51,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) if os.getenv("ANTHROPIC_BASE_URL"): @@ -360,7 +361,7 @@ def agent_loop(messages: list): tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s10_team_protocols.py b/agents/s10_team_protocols.py index 21f936df3..56af75d5b 100644 --- a/agents/s10_team_protocols.py +++ b/agents/s10_team_protocols.py @@ -56,6 +56,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) if os.getenv("ANTHROPIC_BASE_URL"): @@ -441,7 +442,7 @@ def agent_loop(messages: list): tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s11_autonomous_agents.py b/agents/s11_autonomous_agents.py index 856bc92c3..aea3cd676 100644 --- a/agents/s11_autonomous_agents.py +++ b/agents/s11_autonomous_agents.py @@ -44,6 +44,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) if os.getenv("ANTHROPIC_BASE_URL"): @@ -525,7 +526,7 @@ def agent_loop(messages: list): tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return results = [] diff --git a/agents/s12_worktree_task_isolation.py b/agents/s12_worktree_task_isolation.py index 0162de58f..f39e14a41 100644 --- a/agents/s12_worktree_task_isolation.py +++ b/agents/s12_worktree_task_isolation.py @@ -38,6 +38,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) @@ -734,7 +735,7 @@ def agent_loop(messages: list): tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return diff --git a/agents/s_full.py b/agents/s_full.py index d4dcfd3c6..2c2d0eaa1 100644 --- a/agents/s_full.py +++ b/agents/s_full.py @@ -47,6 +47,7 @@ from anthropic import Anthropic from dotenv import load_dotenv +from utils import content_to_dicts load_dotenv(override=True) if os.getenv("ANTHROPIC_BASE_URL"): @@ -180,7 +181,7 @@ def run_subagent(prompt: str, agent_type: str = "Explore") -> str: resp = None for _ in range(30): resp = client.messages.create(model=MODEL, messages=sub_msgs, tools=sub_tools, max_tokens=8000) - sub_msgs.append({"role": "assistant", "content": resp.content}) + sub_msgs.append({"role": "assistant", "content": content_to_dicts(resp.content)}) if resp.stop_reason != "tool_use": break results = [] @@ -468,7 +469,7 @@ def _loop(self, name: str, role: str, prompt: str): except Exception: self._set_status(name, "shutdown") return - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": break results = [] @@ -675,7 +676,7 @@ def agent_loop(messages: list): model=MODEL, system=SYSTEM, messages=messages, tools=TOOLS, max_tokens=8000, ) - messages.append({"role": "assistant", "content": response.content}) + messages.append({"role": "assistant", "content": content_to_dicts(response.content)}) if response.stop_reason != "tool_use": return # Tool execution diff --git a/agents/utils.py b/agents/utils.py new file mode 100644 index 000000000..659c04991 --- /dev/null +++ b/agents/utils.py @@ -0,0 +1,6 @@ +"""Shared utilities for all agent files.""" + + +def content_to_dicts(content) -> list: + """Convert Anthropic SDK response content blocks to serializable dicts.""" + return [{"type": b.type, **b.model_dump(exclude={"type"})} for b in content]