@@ -935,9 +935,11 @@ async def _responses_create(
935
935
tool_choice = 'required'
936
936
else :
937
937
tool_choice = 'auto'
938
+
938
939
previous_response_id = model_settings .get ('openai_previous_response_id' )
939
940
if previous_response_id == 'auto' :
940
941
messages , previous_response_id = self ._get_response_id_and_trim (messages )
942
+
941
943
instructions , openai_messages = await self ._map_messages (messages )
942
944
reasoning = self ._get_reasoning (model_settings )
943
945
@@ -1049,26 +1051,21 @@ def _map_tool_definition(self, f: ToolDefinition) -> responses.FunctionToolParam
1049
1051
}
1050
1052
1051
1053
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 .
1056
1058
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 :
1062
1062
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
1069
1063
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
1072
1069
else :
1073
1070
return messages , None
1074
1071
0 commit comments