package test import ( "testing" _ "github.com/router-for-me/CLIProxyAPI/v6/internal/translator" sdktranslator "github.com/router-for-me/CLIProxyAPI/v6/sdk/translator" "github.com/tidwall/gjson" ) func TestOpenAIToCodex_PreservesBuiltinTools(t *testing.T) { in := []byte(`{ "model":"gpt-5", "messages":[{"role":"user","content":"hi"}], "tools":[{"type":"web_search","search_context_size":"high"}], "tool_choice":{"type":"web_search"} }`) out := sdktranslator.TranslateRequest(sdktranslator.FormatOpenAI, sdktranslator.FormatCodex, "gpt-5", in, false) if got := gjson.GetBytes(out, "tools.#").Int(); got != 1 { t.Fatalf("expected 1 tool, got %d: %s", got, string(out)) } if got := gjson.GetBytes(out, "tools.0.type").String(); got != "web_search" { t.Fatalf("expected tools[0].type=web_search, got %q: %s", got, string(out)) } if got := gjson.GetBytes(out, "tools.0.search_context_size").String(); got != "high" { t.Fatalf("expected tools[0].search_context_size=high, got %q: %s", got, string(out)) } if got := gjson.GetBytes(out, "tool_choice.type").String(); got != "web_search" { t.Fatalf("expected tool_choice.type=web_search, got %q: %s", got, string(out)) } } func TestOpenAIResponsesToOpenAI_PreservesBuiltinTools(t *testing.T) { in := []byte(`{ "model":"gpt-5", "input":[{"role":"user","content":[{"type":"input_text","text":"hi"}]}], "tools":[{"type":"web_search","search_context_size":"low"}] }`) out := sdktranslator.TranslateRequest(sdktranslator.FormatOpenAIResponse, sdktranslator.FormatOpenAI, "gpt-5", in, false) if got := gjson.GetBytes(out, "tools.#").Int(); got != 1 { t.Fatalf("expected 1 tool, got %d: %s", got, string(out)) } if got := gjson.GetBytes(out, "tools.0.type").String(); got != "web_search" { t.Fatalf("expected tools[0].type=web_search, got %q: %s", got, string(out)) } if got := gjson.GetBytes(out, "tools.0.search_context_size").String(); got != "low" { t.Fatalf("expected tools[0].search_context_size=low, got %q: %s", got, string(out)) } }