diff --git a/src/agents/run_internal/session_persistence.py b/src/agents/run_internal/session_persistence.py index f483da13a3..5aa7108f65 100644 --- a/src/agents/run_internal/session_persistence.py +++ b/src/agents/run_internal/session_persistence.py @@ -280,6 +280,10 @@ async def save_result_to_session( if missing_outputs: new_run_items = missing_outputs + new_run_items + # Raw retry offset: count the run items we consumed from this turn, + # not just the subset that was actually persisted. + new_run_items_raw_count = len(new_run_items) + input_list: list[TResponseInputItem] = [] if original_input: input_list = normalize_input_items_for_api( @@ -322,6 +326,11 @@ async def save_result_to_session( if is_openai_conversation_session and items_to_save: items_to_save = [_sanitize_openai_conversation_item(item) for item in items_to_save] + if is_openai_conversation_session: + items_to_save = [ + item for item in items_to_save if not _is_unpersistable_for_openai_conversation(item) + ] + serialized_to_save: list[str] = [ _fingerprint_or_repr(item, ignore_ids_for_matching=ignore_ids_for_matching) for item in items_to_save @@ -336,20 +345,25 @@ async def save_result_to_session( serialized_to_save_counts[serialized] -= 1 saved_run_items_count += 1 - if is_openai_conversation_session: - items_to_save = [ - item for item in items_to_save if not _is_unpersistable_for_openai_conversation(item) - ] + returned_count = ( + new_run_items_raw_count + if is_openai_conversation_session and run_state is None + else saved_run_items_count + ) if len(items_to_save) == 0: if run_state: - run_state._current_turn_persisted_item_count = already_persisted + saved_run_items_count + run_state._current_turn_persisted_item_count = ( + already_persisted + new_run_items_raw_count + ) return saved_run_items_count await session.add_items(items_to_save) if run_state: - run_state._current_turn_persisted_item_count = already_persisted + saved_run_items_count + run_state._current_turn_persisted_item_count = ( + already_persisted + new_run_items_raw_count + ) if response_id and is_openai_responses_compaction_aware_session(session): has_local_tool_outputs = any(