(messages: list, context: dict)
| 324 | # ── Agent Loop (simplified, focused on task system) ── |
| 325 | |
| 326 | def agent_loop(messages: list, context: dict): |
| 327 | system = get_system_prompt(context) |
| 328 | while True: |
| 329 | try: |
| 330 | response = client.messages.create( |
| 331 | model=MODEL, system=system, messages=messages, |
| 332 | tools=TOOLS, max_tokens=8000) |
| 333 | except Exception as e: |
| 334 | messages.append({"role": "assistant", "content": [ |
| 335 | {"type": "text", |
| 336 | "text": f"[Error] {type(e).__name__}: {e}"}]}) |
| 337 | return |
| 338 | |
| 339 | messages.append({"role": "assistant", "content": response.content}) |
| 340 | if response.stop_reason != "tool_use": |
| 341 | return |
| 342 | |
| 343 | results = [] |
| 344 | for block in response.content: |
| 345 | if block.type != "tool_use": |
| 346 | continue |
| 347 | print(f"\033[36m> {block.name}\033[0m") |
| 348 | handler = TOOL_HANDLERS.get(block.name) |
| 349 | output = handler(**block.input) if handler else f"Unknown: {block.name}" |
| 350 | print(str(output)[:300]) |
| 351 | results.append({"type": "tool_result", |
| 352 | "tool_use_id": block.id, "content": output}) |
| 353 | messages.append({"role": "user", "content": results}) |
| 354 | context = update_context(context, messages) |
| 355 | system = get_system_prompt(context) |
| 356 | |
| 357 | |
| 358 | if __name__ == "__main__": |
no test coverage detected