MCPcopy
hub / github.com/Fosowl/agenticSeek / CoderAgent

Class CoderAgent

sources/agents/code_agent.py:15–87  ·  view source on GitHub ↗

The code agent is an agent that can write and execute code.

Source from the content-addressed store, hash-verified

13from sources.memory import Memory
14
15class CoderAgent(Agent):
16 """
17 The code agent is an agent that can write and execute code.
18 """
19 def __init__(self, name, prompt_path, provider, verbose=False):
20 super().__init__(name, prompt_path, provider, verbose, None)
21 self.tools = {
22 "bash": BashInterpreter(),
23 "python": PyInterpreter(),
24 "c": CInterpreter(),
25 "go": GoInterpreter(),
26 "java": JavaInterpreter(),
27 "file_finder": FileFinder()
28 }
29 self.work_dir = self.tools["file_finder"].get_work_dir()
30 self.role = "code"
31 self.type = "code_agent"
32 self.logger = Logger("code_agent.log")
33 self.memory = Memory(self.load_prompt(prompt_path),
34 recover_last_session=False, # session recovery in handled by the interaction class
35 memory_compression=False,
36 model_provider=provider.get_model_name())
37
38 def add_sys_info_prompt(self, prompt):
39 """Add system information to the prompt."""
40 info = f"System Info:\n" \
41 f"OS: {platform.system()} {platform.release()}\n" \
42 f"Python Version: {platform.python_version()}\n" \
43 f"\nYou must save file at root directory: {self.work_dir}"
44 return f"{prompt}\n\n{info}"
45
46 async def process(self, prompt, speech_module) -> str:
47 answer = ""
48 attempt = 0
49 max_attempts = 5
50 prompt = self.add_sys_info_prompt(prompt)
51 self.memory.push('user', prompt)
52 clarify_trigger = "REQUEST_CLARIFICATION"
53
54 while attempt < max_attempts and not self.stop:
55 print("Stopped?", self.stop)
56 animate_thinking("Thinking...", color="status")
57 await self.wait_message(speech_module)
58 answer, reasoning = await self.llm_request()
59 self.last_reasoning = reasoning
60 if clarify_trigger in answer:
61 self.last_answer = answer
62 await asyncio.sleep(0)
63 return answer, reasoning
64 if not "```" in answer:
65 self.last_answer = answer
66 await asyncio.sleep(0)
67 break
68 self.show_answer()
69 animate_thinking("Executing code...", color="status")
70 self.status_message = "Executing code..."
71 self.logger.info(f"Attempt {attempt + 1}:\n{answer}")
72 exec_success, feedback = self.execute_modules(answer)

Callers 4

mainFunction · 0.90
initialize_systemFunction · 0.90
router.pyFile · 0.90
__init__Method · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected