Przejdź do głównej treści
tools / tool_choice w stylu OpenAI działa przeciwko każdemu dostawcy zdolnemu do chatu. Brama tłumaczy do natywnego kształtu wywołań narzędzi danego upstreamu.

Minimalny przykład

from openai import OpenAI
client = OpenAI(base_url="https://api.orcarouter.ai/v1", api_key="sk-orca-...")

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(
    model="openai/gpt-4o-mini",
    messages=[{"role": "user", "content": "Weather in Paris?"}],
    tools=tools,
)
print(resp.choices[0].message.tool_calls)

Zachowanie między dostawcami

Ten sam kod klienta działa u każdego dostawcy zdolnego do chatu — OrcaRouter dostosowuje tools w stylu OpenAI do natywnego kształtu każdego upstreamu:
  • OpenAI / Grok / DeepSeek: natywny cel — tools zachowuje kształt OpenAI na drucie
  • Anthropic: tools z OpenAI jest mapowane do tools Anthropic z input_schema, zachowując properties i required ze schematu JSON
  • Gemini: tools z OpenAI jest mapowane do tools[].functionDeclarations Gemini, z przeniesieniem name / description / parameters

Zarezerwowane nazwy funkcji Gemini

Na celach Gemini brama rozpoznaje trzy zarezerwowane wartości function.name i zamienia je na natywne wbudowane narzędzia Gemini zamiast deklaracji własnych funkcji:
Zarezerwowana nazwaMapuje się na
googleSearchGemini Google Search grounding (zobacz Web search)
codeExecutionGemini wbudowane wykonanie kodu
urlContextGemini wbudowane narzędzie URL-context
Funkcje o jednej z tych nazw nie potrzebują parameters — przekaż {type: "function", function: {name: "googleSearch"}}, a Gemini bierze to dalej w swoje ręce. Wybierz inną nazwę dla własnych narzędzi, aby nie kolidowały z tymi wbudowanymi.