| 51 | return self.replicate_api_key or REPLICATE_API_KEY |
| 52 | |
| 53 | async def execute(self, tool_call: ToolCall) -> ToolExecutionResult: |
| 54 | if "INVALID_JSON" in tool_call.arguments: |
| 55 | invalid_json = ensure_str(tool_call.arguments.get("INVALID_JSON")) |
| 56 | return ToolExecutionResult( |
| 57 | ok=False, |
| 58 | result={ |
| 59 | "error": "Tool arguments were invalid JSON.", |
| 60 | "INVALID_JSON": invalid_json, |
| 61 | }, |
| 62 | summary={"error": "Invalid JSON tool arguments"}, |
| 63 | ) |
| 64 | |
| 65 | if tool_call.name == "create_file": |
| 66 | return self._create_file(tool_call.arguments) |
| 67 | if tool_call.name == "edit_file": |
| 68 | return self._edit_file(tool_call.arguments) |
| 69 | if tool_call.name == "generate_images": |
| 70 | return await self._generate_images(tool_call.arguments) |
| 71 | if tool_call.name == "remove_background": |
| 72 | return await self._remove_background(tool_call.arguments) |
| 73 | if tool_call.name == "edit_image": |
| 74 | return await self._edit_image(tool_call.arguments) |
| 75 | if tool_call.name == "extract_assets": |
| 76 | return await run_extract_assets( |
| 77 | tool_call.arguments, |
| 78 | gemini_api_key=self.gemini_api_key, |
| 79 | input_images=self.input_images, |
| 80 | asset_base_url=self.asset_base_url, |
| 81 | user_id=self.user_id, |
| 82 | ) |
| 83 | if tool_call.name == "screenshot_preview": |
| 84 | return await run_screenshot_preview( |
| 85 | tool_call.arguments, |
| 86 | file_state=self.file_state, |
| 87 | ) |
| 88 | if tool_call.name == "save_assets": |
| 89 | return await run_save_assets(tool_call.arguments, user_id=self.user_id) |
| 90 | if tool_call.name == "retrieve_option": |
| 91 | return self._retrieve_option(tool_call.arguments) |
| 92 | return ToolExecutionResult( |
| 93 | ok=False, |
| 94 | result={"error": f"Unknown tool: {tool_call.name}"}, |
| 95 | summary={"error": f"Unknown tool: {tool_call.name}"}, |
| 96 | ) |
| 97 | |
| 98 | def _create_file(self, args: Dict[str, Any]) -> ToolExecutionResult: |
| 99 | path = ensure_str(args.get("path") or self.file_state.path or "index.html") |