Skip to content

Commit 06cddec

Browse files
committed
fix: prevent shared mutable state in max_turns handler and simplify list comparisons
1 parent bfc8c63 commit 06cddec

2 files changed

Lines changed: 9 additions & 13 deletions

File tree

src/agents/run.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -797,12 +797,12 @@ def _with_reasoning_item_id_policy(result: RunResult) -> RunResult:
797797
max_turns=max_turns,
798798
)
799799
result._current_turn = current_turn
800-
result._model_input_items = list(generated_items)
800+
result._model_input_items = generated_items[:]
801801
# Keep normalized replay aligned with the model-facing
802802
# continuation whenever session history preserved extra items.
803-
result._replay_from_model_input_items = list(
804-
generated_items
805-
) != list(session_items)
803+
result._replay_from_model_input_items = (
804+
generated_items != session_items
805+
)
806806
if run_state is not None:
807807
result._trace_state = run_state._trace_state
808808
if session_persistence_enabled:
@@ -936,10 +936,8 @@ def _with_reasoning_item_id_policy(result: RunResult) -> RunResult:
936936
max_turns=max_turns,
937937
)
938938
result._current_turn = max_turns
939-
result._model_input_items = list(generated_items)
940-
result._replay_from_model_input_items = list(generated_items) != list(
941-
session_items
942-
)
939+
result._model_input_items = generated_items[:]
940+
result._replay_from_model_input_items = generated_items != session_items
943941
if run_state is not None:
944942
result._trace_state = run_state._trace_state
945943
if session_persistence_enabled and include_in_history:
@@ -1207,10 +1205,8 @@ def _with_reasoning_item_id_policy(result: RunResult) -> RunResult:
12071205
max_turns=max_turns,
12081206
)
12091207
result._current_turn = current_turn
1210-
result._model_input_items = list(generated_items)
1211-
result._replay_from_model_input_items = list(generated_items) != list(
1212-
session_items
1213-
)
1208+
result._model_input_items = generated_items[:]
1209+
result._replay_from_model_input_items = generated_items != session_items
12141210
if run_state is not None:
12151211
result._current_turn_persisted_item_count = (
12161212
run_state._current_turn_persisted_item_count

src/agents/run_state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@
135135
_MISSING_CONTEXT_SENTINEL = object()
136136

137137

138-
@dataclass
138+
@dataclass(slots=True)
139139
class RunState(Generic[TContext, TAgent]):
140140
"""Serializable snapshot of an agent run, including context, usage, and interruptions.
141141

0 commit comments

Comments
 (0)