OpenAI-совместимый API через LiteLLM. Если у тебя уже есть код под OpenAI — переключишь одной строкой.
LiteLLM — прокси-сервер, который принимает запросы в формате OpenAI и маршрутизирует их к нужной модели (Qwen, Gemini, Claude, GPT, Whisper). Для тебя это выглядит как обычный OpenAI API — только бесплатный и с другими моделями.
В личку @ManyuninPA или в Telegram-группу
Выдадим API-ключ и лимиты токенов
Base URL: https://api.mpa.ru.net/v1
Передавай имя модели в поле model запроса.
POST /v1/chat/completions
deepseek-v4-flash-tw
DeepSeek V4 Flash — универсальная быстрая, по умолчанию
claude-opus-4.7
Claude Opus 4.7 — самая мощная Anthropic, доступ по запросу
claude-sonnet-4.6
Claude Sonnet 4.6 — премиум-модель, контекст 1M токенов
claude-haiku-4.5
Claude Haiku 4.5 — быстрый ассистент, понимает картинки
gpt-5.2
GPT-5.2 — флагман OpenAI, альтернатива Claude Sonnet
gpt-5.4-mini
GPT-5.4 Mini — компактная OpenAI для повседневных задач
grok-4-fast
📚 Grok 4 Fast — 2M контекст, для книг и больших документов
deepseek-v4-pro
DeepSeek V4 Pro — рассуждения, 1M контекст, MoE 1.6T
sonar
🌐 Sonar — Perplexity, быстрый поиск в интернете со ссылками
sonar-pro
🌐 Sonar Pro — развёрнутый поиск с множеством источников
sonar-reasoning-pro
🌐 Sonar Reasoning Pro — поиск + пошаговое рассуждение
POST /v1/audio/transcriptions
whisper-large-v3-turbo — голос в текст
Принимает аудио как multipart/form-data. Поддерживает русский, английский и ещё 50+ языков — определяет сам.
POST /v1/audio/speech
tts-1 — текст в голос
OpenAI-совместимый TTS. Голоса: alloy, echo, fable, onyx, nova, shimmer. Возвращает MP3-поток.
POST /v1/embeddings
text-embedding-3-small — вектор для RAG и поиска
Размерность 1536, совместимо с OpenAI. Подходит для семантического поиска, кластеризации и memory-сервисов.
Список может обновляться — точный перечень зависит от выданного ключа.
<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://api.mpa.ru.net/v1';
$data = [
'model' => 'deepseek-v4-flash-tw',
'messages' => [
['role' => 'user', 'content' => 'Привет! Что такое нейросеть?']
],
];
$ch = curl_init($baseUrl . '/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey,
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $response['choices'][0]['message']['content'];
<?php
function chat(array $messages, string $apiKey): string {
$data = [
'model' => 'deepseek-v4-flash-tw',
'messages' => $messages,
];
$ch = curl_init('https://api.mpa.ru.net/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey,
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
return $response['choices'][0]['message']['content'];
}
$history = [
['role' => 'system', 'content' => 'Ты помощник программиста.'],
['role' => 'user', 'content' => 'Как написать цикл for в PHP?'],
];
$answer = chat($history, 'YOUR_API_KEY');
$history[] = ['role' => 'assistant', 'content' => $answer];
$history[] = ['role' => 'user', 'content' => 'А while?'];
$answer2 = chat($history, 'YOUR_API_KEY');
echo $answer2;
<?php
$apiKey = 'YOUR_API_KEY';
$data = [
'model' => 'deepseek-v4-flash-tw',
'stream' => true,
'messages' => [
['role' => 'user', 'content' => 'Напиши короткое стихотворение про PHP']
],
];
header('Content-Type: text/event-stream');
header('X-Accel-Buffering: no');
$ch = curl_init('https://api.mpa.ru.net/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey,
],
CURLOPT_WRITEFUNCTION => function ($ch, $chunk) {
$lines = explode("\n", $chunk);
foreach ($lines as $line) {
if (str_starts_with($line, 'data: ')) {
$json = substr($line, 6);
if ($json === '[DONE]') break;
$data = json_decode($json, true);
$token = $data['choices'][0]['delta']['content'] ?? '';
echo $token;
ob_flush(); flush();
}
}
return strlen($chunk);
},
]);
curl_exec($ch);
curl_close($ch);
Официальный OpenAI SDK — pip install openai
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.mpa.ru.net/v1",
)
response = client.chat.completions.create(
model="deepseek-v4-flash-tw",
messages=[
{"role": "user", "content": "Привет! Что такое нейросеть?"}
],
)
print(response.choices[0].message.content)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.mpa.ru.net/v1",
)
def ask(messages: list) -> str:
resp = client.chat.completions.create(
model="deepseek-v4-flash-tw",
messages=messages,
)
return resp.choices[0].message.content
history = [
{"role": "system", "content": "Ты помощник программиста."},
{"role": "user", "content": "Как написать цикл for в Python?"},
]
answer = ask(history)
history.append({"role": "assistant", "content": answer})
history.append({"role": "user", "content": "А while?"})
answer2 = ask(history)
print(answer2)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.mpa.ru.net/v1",
)
stream = client.chat.completions.create(
model="deepseek-v4-flash-tw",
messages=[
{"role": "user", "content": "Напиши короткое стихотворение про Python"}
],
stream=True,
)
for chunk in stream:
token = chunk.choices[0].delta.content or ""
print(token, end="", flush=True)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.mpa.ru.net/v1",
)
with open("voice.m4a", "rb") as audio:
transcription = client.audio.transcriptions.create(
model="whisper-large-v3-turbo",
file=audio,
)
print(transcription.text)
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.mpa.ru.net/v1",
)
resp = client.embeddings.create(
model="text-embedding-3-small",
input=["Первый текст для векторизации", "Второй текст"],
)
for item in resp.data:
print(f"Вектор {item.index}: {len(item.embedding)}-мерный")
# item.embedding — list[float] длиной 1536