|
10 | 10 | from agentlab.agents.agent_args import AgentArgs |
11 | 11 |
|
12 | 12 | logger = logging.getLogger(__name__) |
| 13 | +logger.setLevel(logging.INFO) |
13 | 14 |
|
14 | 15 |
|
15 | 16 | @dataclass |
@@ -49,15 +50,23 @@ def get_action(self, obs: Observation | list[Observation]) -> tuple[str, TapeAge |
49 | 50 | self.tape = self.tape.append(observation) |
50 | 51 | thoughts = [] |
51 | 52 | action = None |
52 | | - for event in self.agent.run(self.tape): |
53 | | - if not event.step: |
54 | | - continue |
55 | | - self.tape = self.tape.append(event.step) |
56 | | - if isinstance(event.step, Thought): |
57 | | - thoughts.append(event.step.llm_dict()) |
58 | | - logger.info(f"Thought: {event.step.llm_view()}") |
59 | | - elif isinstance(event.step, Action): |
60 | | - action = event.step |
61 | | - logger.info(f"Action: {action}") |
62 | | - break # we stop at the first action |
| 53 | + while not action: |
| 54 | + for event in self.agent.run(self.tape): |
| 55 | + if event.final_tape: |
| 56 | + logger.info( |
| 57 | + f"agent run final tape state: {[type(s).__name__ for s in self.tape]}" |
| 58 | + ) |
| 59 | + if not event.step: |
| 60 | + continue |
| 61 | + self.tape = self.tape.append(event.step) |
| 62 | + if isinstance(event.step, Thought): |
| 63 | + thoughts.append(event.step.llm_dict()) |
| 64 | + logger.info(f"Thought: {event.step.llm_view()}") |
| 65 | + elif isinstance(event.step, Action) and not action: |
| 66 | + action = event.step |
| 67 | + logger.info(f"Action: {action}") |
| 68 | + # we stop at the first action |
| 69 | + else: |
| 70 | + logger.info(f"Other step: {type(event.step)}") |
| 71 | + logger.info(f"Tape state: {[type(s).__name__ for s in self.tape]}") |
63 | 72 | return (action, TapeAgentInfo(thoughts=thoughts)) |
0 commit comments