@@ -935,9 +935,11 @@ async def _responses_create(
935935 tool_choice = 'required'
936936 else :
937937 tool_choice = 'auto'
938+
938939 previous_response_id = model_settings .get ('openai_previous_response_id' )
939940 if previous_response_id == 'auto' :
940941 messages , previous_response_id = self ._get_response_id_and_trim (messages )
942+
941943 instructions , openai_messages = await self ._map_messages (messages )
942944 reasoning = self ._get_reasoning (model_settings )
943945
@@ -1049,26 +1051,21 @@ def _map_tool_definition(self, f: ToolDefinition) -> responses.FunctionToolParam
10491051 }
10501052
10511053 def _get_response_id_and_trim (self , messages : list [ModelMessage ]) -> tuple [list [ModelMessage ], str | None ]:
1052- # If the message history contains only openai responses,
1053- # we can limit the history to the most recent ModelRequest .
1054- # The provider_response_id from the latest ModelResponse is
1055- # then passed as previous_response_id to preserve context .
1054+ # In `auto` mode, the history is trimmed up to (but not including)
1055+ # the latest ModelResponse with a valid `provider_response_id` .
1056+ # This is then passed as `previous_response_id` in the next request
1057+ # to maintain context along with the trimmed history .
10561058 response_id = None
1057- latest_model_request : ModelRequest | None = None
1058- for m in messages :
1059- # Openai may return a dated model_name that differs from self.model_name
1060- # (e.g., "gpt-5" vs "gpt-5-2025-08-07").
1061- if isinstance (m , ModelResponse ) and m .model_name and (self .model_name in m .model_name ):
1059+ trimmed_messages : list [ModelMessage ] = []
1060+ for m in reversed (messages ):
1061+ if isinstance (m , ModelResponse ) and m .provider_name == self .system :
10621062 response_id = m .provider_response_id
1063- elif isinstance (m , ModelRequest ):
1064- latest_model_request = m
1065- else :
1066- # Mixed model responses invalidate response_id,
1067- # so the history is kept intact.
1068- response_id = None
10691063 break
1070- if response_id and latest_model_request :
1071- return [latest_model_request ], response_id
1064+ else :
1065+ trimmed_messages .append (m )
1066+
1067+ if response_id and trimmed_messages :
1068+ return list (reversed (trimmed_messages )), response_id
10721069 else :
10731070 return messages , None
10741071
0 commit comments