fix openai image request handling
This commit is contained in:
@@ -187,9 +187,13 @@ func applyCodexOAuthTransform(reqBody map[string]any, isCodexCLI bool, isCompact
|
||||
}
|
||||
|
||||
func normalizeCodexModel(model string) string {
|
||||
model = strings.TrimSpace(model)
|
||||
if model == "" {
|
||||
return "gpt-5.4"
|
||||
}
|
||||
if isOpenAIImageGenerationModel(model) {
|
||||
return model
|
||||
}
|
||||
|
||||
modelID := model
|
||||
if strings.Contains(modelID, "/") {
|
||||
@@ -231,6 +235,78 @@ func normalizeCodexModel(model string) string {
|
||||
return "gpt-5.4"
|
||||
}
|
||||
|
||||
func hasOpenAIImageGenerationTool(reqBody map[string]any) bool {
|
||||
rawTools, ok := reqBody["tools"]
|
||||
if !ok || rawTools == nil {
|
||||
return false
|
||||
}
|
||||
tools, ok := rawTools.([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
for _, rawTool := range tools {
|
||||
toolMap, ok := rawTool.(map[string]any)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if strings.TrimSpace(firstNonEmptyString(toolMap["type"])) == "image_generation" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func normalizeOpenAIResponsesImageGenerationTools(reqBody map[string]any) bool {
|
||||
rawTools, ok := reqBody["tools"]
|
||||
if !ok || rawTools == nil {
|
||||
return false
|
||||
}
|
||||
tools, ok := rawTools.([]any)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
modified := false
|
||||
for _, rawTool := range tools {
|
||||
toolMap, ok := rawTool.(map[string]any)
|
||||
if !ok || strings.TrimSpace(firstNonEmptyString(toolMap["type"])) != "image_generation" {
|
||||
continue
|
||||
}
|
||||
if _, ok := toolMap["output_format"]; !ok {
|
||||
if value := strings.TrimSpace(firstNonEmptyString(toolMap["format"])); value != "" {
|
||||
toolMap["output_format"] = value
|
||||
modified = true
|
||||
}
|
||||
}
|
||||
if _, ok := toolMap["output_compression"]; !ok {
|
||||
if value, exists := toolMap["compression"]; exists && value != nil {
|
||||
toolMap["output_compression"] = value
|
||||
modified = true
|
||||
}
|
||||
}
|
||||
if _, ok := toolMap["format"]; ok {
|
||||
delete(toolMap, "format")
|
||||
modified = true
|
||||
}
|
||||
if _, ok := toolMap["compression"]; ok {
|
||||
delete(toolMap, "compression")
|
||||
modified = true
|
||||
}
|
||||
}
|
||||
return modified
|
||||
}
|
||||
|
||||
func validateOpenAIResponsesImageModel(reqBody map[string]any, model string) error {
|
||||
if !hasOpenAIImageGenerationTool(reqBody) {
|
||||
return nil
|
||||
}
|
||||
model = strings.TrimSpace(model)
|
||||
if !isOpenAIImageGenerationModel(model) {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("/v1/responses image_generation requests require a Responses-capable text model; image-only model %q is not allowed", model)
|
||||
}
|
||||
|
||||
func normalizeOpenAIModelForUpstream(account *Account, model string) string {
|
||||
if account == nil || account.Type == AccountTypeOAuth {
|
||||
return normalizeCodexModel(model)
|
||||
|
||||
Reference in New Issue
Block a user