Quellcode durchsuchen

Fix max budget per task error in headless mode (#3147)

* set agent in ERROR instead of PAUSED when in headless mode

* fallback to config value for budget
Engel Nyst vor 1 Jahr
Ursprung
Commit
9ed95abf83
2 geänderte Dateien mit 19 neuen und 4 gelöschten Zeilen
  1. 12 4
      opendevin/controller/agent_controller.py
  2. 7 0
      opendevin/core/main.py

+ 12 - 4
opendevin/controller/agent_controller.py

@@ -380,10 +380,18 @@ class AgentController:
                     self.state.traffic_control_state = TrafficControlState.NORMAL
                 else:
                     self.state.traffic_control_state = TrafficControlState.THROTTLING
-                    await self.report_error(
-                        f'Task budget exceeded. Current cost: {current_cost:.2f}, Max budget: {self.max_budget_per_task:.2f}, task paused. {TRAFFIC_CONTROL_REMINDER}'
-                    )
-                    await self.set_agent_state_to(AgentState.PAUSED)
+                    if self.headless_mode:
+                        # set to ERROR state if running in headless mode
+                        # there is no way to resume
+                        await self.report_error(
+                            f'Task budget exceeded. Current cost: {current_cost:.2f}, max budget: {self.max_budget_per_task:.2f}, task stopped.'
+                        )
+                        await self.set_agent_state_to(AgentState.ERROR)
+                    else:
+                        await self.report_error(
+                            f'Task budget exceeded. Current cost: {current_cost:.2f}, Max budget: {self.max_budget_per_task:.2f}, task paused. {TRAFFIC_CONTROL_REMINDER}'
+                        )
+                        await self.set_agent_state_to(AgentState.PAUSED)
                     return
 
         self.update_state_before_step()

+ 7 - 0
opendevin/core/main.py

@@ -177,6 +177,13 @@ if __name__ == '__main__':
     AgentCls: Type[Agent] = Agent.get_cls(args.agent_cls)
     agent = AgentCls(llm=llm)
 
+    # if max budget per task is not sent on the command line, use the config value
+    max_budget_per_task = (
+        args.max_budget_per_task
+        if args.max_budget_per_task
+        else config.max_budget_per_task
+    )
+
     asyncio.run(
         run_agent_controller(
             agent=agent,