Python#
Работаем через официальный openai SDK.
Установка#
bash
pip install openai
Базовый клиент#
```python import os from openai import OpenAI
client = OpenAI( base_url="https://api.ml-router.su/v1", api_key=os.environ["ORB_API_KEY"], ) ```
Храни ключ в env
bash
export ORB_API_KEY="orb_live_..."
Chat completion#
python
resp = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[
{"role": "system", "content": "Ты лаконичный ассистент."},
{"role": "user", "content": "Что такое FastAPI?"},
],
temperature=0.3,
max_tokens=200,
)
print(resp.choices[0].message.content)
print(f"\nstats: {resp.usage}")
Streaming#
python
stream = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "Расскажи короткую историю"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content if chunk.choices else None
if delta:
print(delta, end="", flush=True)
Tool calling#
```python import json
tools = [{ "type": "function", "function": { "name": "search_web", "description": "Поиск в вебе по запросу", "parameters": { "type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"], }, }, }]
resp = client.chat.completions.create( model="openai/gpt-4o", messages=[{"role": "user", "content": "Что нового про Mars rover?"}], tools=tools, )
msg = resp.choices[0].message if msg.tool_calls: for call in msg.tool_calls: args = json.loads(call.function.arguments) print(f"Модель просит вызвать {call.function.name}({args})") ```
JSON mode#
python
resp = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[
{"role": "system", "content": "Отвечай ТОЛЬКО валидным JSON."},
{"role": "user", "content": "Перечисли 3 столицы Европы с населением"},
],
response_format={"type": "json_object"},
)
import json
data = json.loads(resp.choices[0].message.content)
Async-клиент#
```python import asyncio from openai import AsyncOpenAI
client = AsyncOpenAI(base_url=..., api_key=...)
async def main(): resp = await client.chat.completions.create( model="openai/gpt-4o-mini", messages=[{"role": "user", "content": "Hi"}], ) print(resp.choices[0].message.content)
asyncio.run(main()) ```
Тестирование без расходов#
```python test_client = OpenAI( base_url="https://api.ml-router.su/v1", api_key="orb_test_…", # /new_test_token в боте )
любые модели — но получаешь заглушку, $0#
```
См. Sandbox-ключи.