From f67794313d9ef3992d23f093e19519563aeacd8c Mon Sep 17 00:00:00 2001 From: Dustin Lagoy Date: Fri, 14 Nov 2025 06:04:52 -0800 Subject: [PATCH] fix: look for gpt model type in any part of id (#76) --- providers/openai/language_model.go | 15 ++++++--- providers/openai/responses_language_model.go | 33 +++++++++++--------- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index e1acf0036fb0664883b16bada360d14d2d4c1de7..55227bd92a263841eef3d15c1be8a8ab198c0f11 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -557,7 +557,11 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } func isReasoningModel(modelID string) bool { - return strings.HasPrefix(modelID, "o") || strings.HasPrefix(modelID, "gpt-5") || strings.HasPrefix(modelID, "gpt-5-chat") + return strings.HasPrefix(modelID, "o1") || strings.Contains(modelID, "-o1") || + strings.HasPrefix(modelID, "o3") || strings.Contains(modelID, "-o3") || + strings.HasPrefix(modelID, "o4") || strings.Contains(modelID, "-o4") || + strings.HasPrefix(modelID, "oss") || strings.Contains(modelID, "-oss") || + strings.Contains(modelID, "gpt-5") || strings.Contains(modelID, "gpt-5-chat") } func isSearchPreviewModel(modelID string) bool { @@ -565,13 +569,14 @@ func isSearchPreviewModel(modelID string) bool { } func supportsFlexProcessing(modelID string) bool { - return strings.HasPrefix(modelID, "o3") || strings.HasPrefix(modelID, "o4-mini") || strings.HasPrefix(modelID, "gpt-5") + return strings.HasPrefix(modelID, "o3") || strings.Contains(modelID, "-o3") || + strings.Contains(modelID, "o4-mini") || strings.Contains(modelID, "gpt-5") } func supportsPriorityProcessing(modelID string) bool { - return strings.HasPrefix(modelID, "gpt-4") || strings.HasPrefix(modelID, "gpt-5") || - strings.HasPrefix(modelID, "gpt-5-mini") || strings.HasPrefix(modelID, "o3") || - strings.HasPrefix(modelID, "o4-mini") + return strings.Contains(modelID, "gpt-4") || strings.Contains(modelID, "gpt-5") || + strings.Contains(modelID, "gpt-5-mini") || strings.HasPrefix(modelID, "o3") || + strings.Contains(modelID, "-o3") || strings.Contains(modelID, "o4-mini") } func toOpenAiTools(tools []fantasy.Tool, toolChoice *fantasy.ToolChoice) (openAiTools []openai.ChatCompletionToolUnionParam, openAiToolChoice *openai.ChatCompletionToolChoiceOptionUnionParam, warnings []fantasy.CallWarning) { diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 13a9da50a26069aafa4e62788b02f99305147007..7a30139ac31080566fa43393512bcc3b8ba085b6 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -56,16 +56,17 @@ type responsesModelConfig struct { func getResponsesModelConfig(modelID string) responsesModelConfig { supportsFlexProcessing := strings.HasPrefix(modelID, "o3") || - strings.HasPrefix(modelID, "o4-mini") || - (strings.HasPrefix(modelID, "gpt-5") && !strings.HasPrefix(modelID, "gpt-5-chat")) - - supportsPriorityProcessing := strings.HasPrefix(modelID, "gpt-4") || - strings.HasPrefix(modelID, "gpt-5-mini") || - (strings.HasPrefix(modelID, "gpt-5") && - !strings.HasPrefix(modelID, "gpt-5-nano") && - !strings.HasPrefix(modelID, "gpt-5-chat")) || + strings.Contains(modelID, "-o3") || strings.Contains(modelID, "o4-mini") || + (strings.Contains(modelID, "gpt-5") && !strings.Contains(modelID, "gpt-5-chat")) + + supportsPriorityProcessing := strings.Contains(modelID, "gpt-4") || + strings.Contains(modelID, "gpt-5-mini") || + (strings.Contains(modelID, "gpt-5") && + !strings.Contains(modelID, "gpt-5-nano") && + !strings.Contains(modelID, "gpt-5-chat")) || strings.HasPrefix(modelID, "o3") || - strings.HasPrefix(modelID, "o4-mini") + strings.Contains(modelID, "-o3") || + strings.Contains(modelID, "o4-mini") defaults := responsesModelConfig{ requiredAutoTruncation: false, @@ -74,7 +75,7 @@ func getResponsesModelConfig(modelID string) responsesModelConfig { supportsPriorityProcessing: supportsPriorityProcessing, } - if strings.HasPrefix(modelID, "gpt-5-chat") { + if strings.Contains(modelID, "gpt-5-chat") { return responsesModelConfig{ isReasoningModel: false, systemMessageMode: defaults.systemMessageMode, @@ -84,11 +85,13 @@ func getResponsesModelConfig(modelID string) responsesModelConfig { } } - if strings.HasPrefix(modelID, "o") || - strings.HasPrefix(modelID, "gpt-5") || - strings.HasPrefix(modelID, "codex-") || - strings.HasPrefix(modelID, "computer-use") { - if strings.HasPrefix(modelID, "o1-mini") || strings.HasPrefix(modelID, "o1-preview") { + if strings.HasPrefix(modelID, "o1") || strings.Contains(modelID, "-o1") || + strings.HasPrefix(modelID, "o3") || strings.Contains(modelID, "-o3") || + strings.HasPrefix(modelID, "o4") || strings.Contains(modelID, "-o4") || + strings.HasPrefix(modelID, "oss") || strings.Contains(modelID, "-oss") || + strings.Contains(modelID, "gpt-5") || strings.Contains(modelID, "codex-") || + strings.Contains(modelID, "computer-use") { + if strings.Contains(modelID, "o1-mini") || strings.Contains(modelID, "o1-preview") { return responsesModelConfig{ isReasoningModel: true, systemMessageMode: "remove",