(provider string, executor ProviderExecutor, req cliproxyexecutor.Request, opts cliproxyexecutor.Options)
| 2404 | } |
| 2405 | |
| 2406 | func requestToFormat(provider string, executor ProviderExecutor, req cliproxyexecutor.Request, opts cliproxyexecutor.Options) sdktranslator.Format { |
| 2407 | resolver, ok := executor.(requestToFormatResolver) |
| 2408 | if ok && resolver != nil { |
| 2409 | formatRequestTo := resolver.RequestToFormat(req, opts) |
| 2410 | if formatRequestTo != "" { |
| 2411 | return formatRequestTo |
| 2412 | } |
| 2413 | } |
| 2414 | source := opts.SourceFormat.String() |
| 2415 | if source == "openai-image" || source == "openai-video" { |
| 2416 | return opts.SourceFormat |
| 2417 | } |
| 2418 | if opts.Alt == "responses/compact" && !opts.Stream { |
| 2419 | return sdktranslator.FormatOpenAIResponse |
| 2420 | } |
| 2421 | switch strings.ToLower(strings.TrimSpace(provider)) { |
| 2422 | case "codex": |
| 2423 | return sdktranslator.FormatCodex |
| 2424 | case "xai": |
| 2425 | return sdktranslator.FormatCodex |
| 2426 | case "claude": |
| 2427 | return sdktranslator.FormatClaude |
| 2428 | case "gemini", "vertex", "aistudio": |
| 2429 | return sdktranslator.FormatGemini |
| 2430 | case "kimi": |
| 2431 | return sdktranslator.FormatOpenAI |
| 2432 | case "antigravity": |
| 2433 | return sdktranslator.FormatAntigravity |
| 2434 | default: |
| 2435 | return sdktranslator.FormatOpenAI |
| 2436 | } |
| 2437 | } |
| 2438 | |
| 2439 | func cloneRequestHeaders(src http.Header) http.Header { |
| 2440 | if src == nil { |
no test coverage detected