@@ -966,9 +966,11 @@ async def _responses_create(
966966 tool_choice = 'required'
967967 else :
968968 tool_choice = 'auto'
969+
969970 previous_response_id = model_settings .get ('openai_previous_response_id' )
970971 if previous_response_id == 'auto' :
971972 messages , previous_response_id = self ._get_response_id_and_trim (messages )
973+
972974 instructions , openai_messages = await self ._map_messages (messages )
973975 reasoning = self ._get_reasoning (model_settings )
974976
@@ -1081,26 +1083,21 @@ def _map_tool_definition(self, f: ToolDefinition) -> responses.FunctionToolParam
10811083 }
10821084
10831085 def _get_response_id_and_trim (self , messages : list [ModelMessage ]) -> tuple [list [ModelMessage ], str | None ]:
1084- # If the message history contains only openai responses,
1085- # we can limit the history to the most recent ModelRequest .
1086- # The provider_response_id from the latest ModelResponse is
1087- # then passed as previous_response_id to preserve context .
1086+ # In `auto` mode, the history is trimmed up to (but not including)
1087+ # the latest ModelResponse with a valid `provider_response_id` .
1088+ # This is then passed as `previous_response_id` in the next request
1089+ # to maintain context along with the trimmed history .
10881090 response_id = None
1089- latest_model_request : ModelRequest | None = None
1090- for m in messages :
1091- # Openai may return a dated model_name that differs from self.model_name
1092- # (e.g., "gpt-5" vs "gpt-5-2025-08-07").
1093- if isinstance (m , ModelResponse ) and m .model_name and (self .model_name in m .model_name ):
1091+ trimmed_messages : list [ModelMessage ] = []
1092+ for m in reversed (messages ):
1093+ if isinstance (m , ModelResponse ) and m .provider_name == self .system :
10941094 response_id = m .provider_response_id
1095- elif isinstance (m , ModelRequest ):
1096- latest_model_request = m
1097- else :
1098- # Mixed model responses invalidate response_id,
1099- # so the history is kept intact.
1100- response_id = None
11011095 break
1102- if response_id and latest_model_request :
1103- return [latest_model_request ], response_id
1096+ else :
1097+ trimmed_messages .append (m )
1098+
1099+ if response_id and trimmed_messages :
1100+ return list (reversed (trimmed_messages )), response_id
11041101 else :
11051102 return messages , None
11061103
0 commit comments