fix(openai): preset selector effort를 결속한다

caller body에 effort가 없어도 preset selector가 소유한 reasoning effort를 operation 요구사항에 포함해야 올바른 Responses wire를 선택할 수 있다.
This commit is contained in:
toki 2026-08-15 05:45:04 +09:00
parent e9f043e417
commit dbf278e854
2 changed files with 19 additions and 1 deletions

View file

@ -398,7 +398,11 @@ func (s *Server) handleChatCompletionsProviderPool(w http.ResponseWriter, dc *ch
if err != nil {
return tunnelReq, err
}
return prepareHotPathChatProviderOperation(prepared, selected, chatProviderRequirements(req))
requirements := chatProviderRequirements(req)
if effort, ok := dc.route.Preset.Selector.Options["reasoning_effort"].(string); ok && strings.TrimSpace(effort) != "" {
requirements.Effort = strings.TrimSpace(effort)
}
return prepareHotPathChatProviderOperation(prepared, selected, requirements)
}
prepared, err = prepareProviderChatRequestNormalization(prepared, selected)
if err != nil {

View file

@ -230,6 +230,20 @@ func TestHotPathOpenAIToolsAndEffortUseResponsesOperation(t *testing.T) {
}
}
func TestChatProviderRequirementsAllowPresetOwnedEffort(t *testing.T) {
requirements := chatProviderRequirements(chatCompletionRequest{Tools: []any{map[string]any{"type": "function"}}})
if requirements.Effort != "" || !requirements.HasTools {
t.Fatalf("caller requirements=%+v", requirements)
}
presetOptions := map[string]any{"reasoning_effort": "high"}
if effort, ok := presetOptions["reasoning_effort"].(string); ok {
requirements.Effort = strings.TrimSpace(effort)
}
if requirements.Effort != "high" || !requirements.HasTools {
t.Fatalf("effective selector requirements=%+v", requirements)
}
}
func TestGeminiChatProviderHTTPToolContinuationRoundTrip(t *testing.T) {
var providerRequests []map[string]any
provider := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {