88import yaml
99from jinja2 import Template
1010from minisweagent import Environment , Model
11- from minisweagent .agents .default import (
12- AgentConfig ,
13- DefaultAgent ,
14- NonTerminatingException ,
15- TerminatingException ,
16- )
11+ from minisweagent .agents .default import AgentConfig , DefaultAgent
1712from minisweagent .models .litellm_model import LitellmModel
1813from minisweagent .run .utils .save import save_traj
1914from rich .console import Console
@@ -44,6 +39,13 @@ def __init__(
4439 self .game = game
4540 self .console = Console ()
4641
42+ def add_message (self , role : str , content : str , ** kwargs ):
43+ super ().add_message (role , content , ** kwargs )
44+ if role == "assistant" :
45+ self .console .print (
46+ f"[{ self .name } ] Step taken (step { self .model .n_calls } , cost { self .model .cost :.2f} )"
47+ )
48+
4749 def render_template (self , template : str , ** kwargs ) -> str :
4850 cs = (
4951 asdict (self .config )
@@ -59,27 +61,8 @@ def render_template(self, template: str, **kwargs) -> str:
5961
6062 def run (self ) -> tuple [str , str ]:
6163 """Run step() until agent is finished. Return exit status & message"""
62- self .messages = []
63- self .add_message ("system" , self .render_template (self .config .system_template ))
64- self .add_message ("user" , self .render_template (self .config .instance_template ))
65-
66- # Start rich spinner
67- with self .console .status (
68- f"[bold green]{ self .name } updating codebase..."
69- ) as status :
70- while True :
71- try :
72- self .step ()
73- except NonTerminatingException as e :
74- self .add_message ("user" , str (e ))
75- except TerminatingException as e :
76- self .add_message ("user" , str (e ))
77- return type (e ).__name__ , str (e )
78-
79- def has_finished (self , output : dict [str , str ]):
80- """Raises Submitted exception with final output if the agent has finished its task."""
81- save_traj (self , Path (f"{ self .name } _r{ self .game .round } .traj.json" )) # type: ignore
82- super ().has_finished (output )
64+ with self .console .status (f"[bold green]{ self .name } updating codebase..." ):
65+ return super ().run (task = "" )
8366
8467
8568class MiniSWEAgent (Player ):
@@ -99,9 +82,20 @@ def __init__(self, config: dict, game: CodeGame):
9982 )
10083
10184 def run (self ):
85+ exit_status = None
86+ result = None
10287 try :
10388 exit_status , result = self .agent .run ()
10489 except Exception as e :
105- result = str (e )
106- print (traceback .format_exc ())
107- self .commit ()
90+ exit_status = str (e )
91+ exc_message = traceback .format_exc ()
92+ result = exc_message
93+ print (exc_message )
94+ finally :
95+ save_traj (
96+ self .agent , # type: ignore
97+ Path (f"{ self .name } _r{ self .game .round } .traj.json" ),
98+ exit_status = exit_status ,
99+ result = result ,
100+ )
101+ self .commit ()
0 commit comments