Inference Router
Единый API для работы с локальными LLM моделями. Маршрутизация запросов между моделями, развернутыми на ваших GPU серверах.
Chat Completions
OpenAI-совместимый API для генерации текста
Streaming
Потоковая передача токенов для интерактивных приложений
Embeddings
Векторные представления для поиска и RAG
Load Balancing
Распределение нагрузки между инстансами моделей
Поддерживаемые модели
Платформа поддерживает развертывание любых open-source моделей через vLLM, TGI или собственные inference серверы.
| Модель | Параметры | GPU Memory | Применение |
|---|---|---|---|
| llama-3-70b | 70B | 140 GB (2x A100) | Основная модель для диалогов |
| llama-3-8b | 8B | 16 GB | Быстрые ответы, классификация |
| mistral-7b | 7B | 14 GB | Код, анализ текста |
| bge-m3 | 568M | 2 GB | Embeddings для RAG |
Chat Completions API
API полностью совместим с форматом OpenAI, что позволяет использовать существующие библиотеки и инструменты без изменений.
1from coren import Coren23client = Coren(base_url="http://api.internal:8080")45response = client.chat.create(6 model="llama-3-70b",7 messages=[8 {9 "role": "system",10 "content": "Ты помощник сотрудника банка. Отвечай кратко и по делу."11 },12 {13 "role": "user",14 "content": "Какие документы нужны для открытия расчетного счета ИП?"15 }16 ],17 temperature=0.3,18 max_tokens=100019)2021print(response.content)22# Для открытия расчетного счета ИП потребуются:23# 1. Паспорт24# 2. Свидетельство о регистрации ИП (ОГРНИП)25# 3. ИНН26# 4. Заявление по форме банка
Параметры запроса
| Параметр | Тип | Описание |
|---|---|---|
| model | string | ID модели из реестра |
| messages | array | История диалога (role: system/user/assistant) |
| temperature | float | Креативность ответа (0-2, рекомендуется 0.3-0.7) |
| max_tokens | int | Максимальная длина ответа |
| stream | bool | Потоковая передача ответа |
Потоковые ответы
Для интерактивных чат-ботов и приложений реального времени используйте streaming. Токены передаются клиенту сразу после генерации.
1from coren import Coren23client = Coren()45stream = client.chat.create(6 model="llama-3-70b",7 messages=[8 {"role": "user", "content": "Напиши пошаговую инструкцию по подаче заявки на ипотеку"}9 ],10 stream=True11)1213for chunk in stream:14 if chunk.content:15 print(chunk.content, end="", flush=True)1617# Выводит текст по мере генерации:18# ## Инструкция по подаче заявки на ипотеку19#20# ### Шаг 1. Подготовка документов21# ...
Server-Sent Events
Для веб-приложений используйте SSE через fetch API.
1async function streamChat(message: string) {2 const response = await fetch('http://api.internal:8080/v1/chat/completions', {3 method: 'POST',4 headers: {5 'Content-Type': 'application/json',6 'Authorization': `Bearer ${API_KEY}`7 },8 body: JSON.stringify({9 model: 'llama-3-70b',10 messages: [{ role: 'user', content: message }],11 stream: true12 })13 });1415 const reader = response.body?.getReader();16 const decoder = new TextDecoder();1718 while (true) {19 const { done, value } = await reader!.read();20 if (done) break;2122 const chunk = decoder.decode(value);23 const lines = chunk.split('\n').filter(line => line.startsWith('data: '));2425 for (const line of lines) {26 const data = JSON.parse(line.slice(6));27 if (data.choices[0]?.delta?.content) {28 process.stdout.write(data.choices[0].delta.content);29 }30 }31 }32}
Embeddings API
Генерация векторных представлений текста для семантического поиска, кластеризации и RAG пайплайнов.
1from coren import Coren23client = Coren()45# Одиночный текст6response = client.embeddings.create(7 model="bge-m3",8 input="Как открыть расчетный счет для ООО"9)1011embedding = response.data[0].embedding12print(f"Размерность: {len(embedding)}") # 10241314# Batch запрос15texts = [16 "Открытие счета юридического лица",17 "Кредит для малого бизнеса",18 "Зарплатный проект для компании"19]2021response = client.embeddings.create(22 model="bge-m3",23 input=texts24)2526for i, item in enumerate(response.data):27 print(f"Текст {i+1}: {len(item.embedding)} измерений")
Маршрутизация и балансировка
Inference Router автоматически распределяет запросы между доступными инстансами модели и выполняет failover при недоступности.
Стратегии маршрутизации
- round_robin — равномерное распределение между инстансами
- least_connections — направление на наименее загруженный инстанс
- latency_optimized — выбор инстанса с минимальной задержкой
- priority — использование приоритетного инстанса с fallback
# Конфигурация маршрутизации в Model Registry{"model_id": "llama-3-70b","routing": {"strategy": "least_connections","health_check_interval": 30,"timeout_ms": 60000,"retries": 2},"endpoints": [{"url": "http://gpu-node-1:8000/v1","weight": 1,"priority": 1},{"url": "http://gpu-node-2:8000/v1","weight": 1,"priority": 2}]}