Spaces:
Sleeping
Sleeping
| from typing import Any | |
| from python.helpers.extension import Extension | |
| from python.helpers.mcp_handler import MCPConfig | |
| from agent import Agent, LoopData | |
| class SystemPrompt(Extension): | |
| async def execute(self, system_prompt: list[str] = [], loop_data: LoopData = LoopData(), **kwargs: Any): | |
| # append main system prompt and tools | |
| main = get_main_prompt(self.agent) | |
| tools = get_tools_prompt(self.agent) | |
| mcp_tools = get_mcp_tools_prompt(self.agent) | |
| # CUSTOM INSTRUCTIONS FOR THIS DEPLOYMENT | |
| # These instructions apply to all deployed spaces (Leon4gr45/agent, Leon4gr45/openoperator, etc.) | |
| custom_instructions = """ | |
| === CUSTOM DEPLOYMENT INSTRUCTIONS === | |
| 1. CODE EXECUTION: | |
| - ALWAYS use the `python` command (NOT ipython) for executing Python code | |
| - All code execution must happen in the `/app` directory | |
| - When creating files, use absolute paths starting with `/app/` | |
| - When running Python scripts, use: `python /app/path/to/script.py` | |
| - The working directory is `/app` - use relative paths from there when appropriate | |
| - Example: `python /app/scripts/my_script.py` or `python -c "print('hello')"` | |
| 2. WEB SEARCHES: | |
| - ALWAYS use the `search_engine` tool for ALL web searches | |
| - Do NOT use browser tools or other search methods | |
| - The search_engine tool uses SearXNG for privacy-preserving searches | |
| - Categories available: general, science, it, news, images, videos (use "general" if unsure) | |
| - Example: search_engine(query="latest AI news", category="general", num_results=5) | |
| 3. FILE OPERATIONS: | |
| - All files should be created/modified within `/app` folder | |
| - Use absolute paths like `/app/data/file.txt` when specifying locations | |
| - The `/app` folder persists and is the working directory | |
| - Check existing files in `/app` before creating new ones to avoid duplicates | |
| 4. FINAL RESPONSE: | |
| - When you are done with the task, use the 'response' tool to return the final answer | |
| === END CUSTOM INSTRUCTIONS === | |
| """ | |
| final_instruction = "When you are done with the task, use the 'response' tool to return the final answer." | |
| system_prompt.append(main) | |
| system_prompt.append(tools) | |
| if mcp_tools: | |
| system_prompt.append(mcp_tools) | |
| system_prompt.append(custom_instructions) | |
| system_prompt.append(final_instruction) | |
| def get_main_prompt(agent: Agent): | |
| return agent.read_prompt("agent.system.main.md") | |
| def get_tools_prompt(agent: Agent): | |
| prompt = agent.read_prompt("agent.system.tools.md") | |
| if agent.config.chat_model.vision: | |
| prompt += '\n\n' + agent.read_prompt("agent.system.tools_vision.md") | |
| return prompt | |
| def get_mcp_tools_prompt(agent: Agent): | |
| mcp_config = MCPConfig.get_instance() | |
| if mcp_config.servers: | |
| pre_progress = agent.context.log.progress | |
| agent.context.log.set_progress("Collecting MCP tools") # MCP might be initializing, better inform via progress bar | |
| tools = MCPConfig.get_instance().get_tools_prompt() | |
| agent.context.log.set_progress(pre_progress) # return original | |
| return tools | |
| return "" | |