Перейти к основному содержанию
tools / tool_choice в стиле OpenAI работает с каждым провайдером, поддерживающим чат. Шлюз транслирует запрос в нативный формат вызова инструментов вышестоящего провайдера.

Минимальный пример

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)

Поведение у разных провайдеров

Один и тот же клиентский код работает у любого провайдера с поддержкой чата — OrcaRouter адаптирует ваши tools в стиле OpenAI к нативному формату каждого upstream:
  • OpenAI / Grok / DeepSeek: нативная цель — tools остаётся в формате OpenAI на проводе
  • Anthropic: tools OpenAI отображается в tools Anthropic с input_schema, сохраняя JSON Schema properties и required
  • Gemini: tools OpenAI отображается в Gemini tools[].functionDeclarations, при этом name / description / parameters пробрасываются

Зарезервированные имена функций Gemini

Для целей Gemini шлюз распознаёт три зарезервированных значения function.name и превращает их в нативные встроенные инструменты Gemini вместо пользовательских объявлений функций:
Зарезервированное имяОтображается в
googleSearchGrounding Gemini через Google Search (см. Веб-поиск)
codeExecutionВстроенное выполнение кода Gemini
urlContextВстроенный инструмент URL-контекста Gemini
Функциям с одним из этих имён не нужны parameters — передайте {type: "function", function: {name: "googleSearch"}}, и Gemini сам разберётся. Для своих пользовательских инструментов выбирайте другие имена, чтобы не конфликтовать с этими встроенными.