LiteLLM
Прокси и Python SDK с единым интерфейсом. LLM Mart — OpenAI-совместимый backend: префикс `openai/` обязателен, иначе LiteLLM решит, что это вендор из своего кат
В config.yaml задайте либо проброс всего каталога (model_name: "*"), либо отдельную запись на каждый короткий алиас.
Что нужно
- LiteLLM Proxy или пакет
litellm - Ключ
sk-…— создание ключа - Slug из каталога
Протокол
| Куда ходит LiteLLM | api_base | Префикс в model |
|---|---|---|
| Chat Completions / embeddings | https://www.llmmart.ru/api/v1 | openai/<slug> |
| Native Anthropic Messages | https://www.llmmart.ru/api без /v1 | anthropic/<slug> |
Ключ: Authorization: Bearer. Для native Messages шлюз также принимает x-api-key.
Не дописывайте к api_base /chat/completions или /embeddings — клиент OpenAI добавит путь сам. Если тест даёт Not Found, проверьте, что у OpenAI-маршрута есть суффикс /v1.
Настройки
| Параметр | Значение |
|---|---|
litellm_params.model | openai/ + slug, например openai/anthropic/claude-sonnet-5 |
api_base | https://www.llmmart.ru/api/v1 |
api_key | os.environ/LLM_MART_API_KEY (не кладите sk-… в файл) |
litellm_settings.drop_params | true — отбросить поля, которых нет у модели |
export LLM_MART_API_KEY="sk-…"Python SDK
import os
from litellm import completion, embedding
response = completion(
model="openai/anthropic/claude-sonnet-5",
api_key=os.environ["LLM_MART_API_KEY"],
api_base="https://www.llmmart.ru/api/v1",
messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)
vector = embedding(
model="openai/text-embedding-3-small",
api_key=os.environ["LLM_MART_API_KEY"],
api_base="https://www.llmmart.ru/api/v1",
input=["hello world"],
)Префикс openai/ обязателен: без него ошибка вроде LLM Provider NOT provided или запрос уйдёт на api.openai.com / api.anthropic.com.
Proxy (config.yaml)
Проброс всех slug из каталога плюс короткие имена для клиентов прокси:
model_list:
- model_name: "*"
litellm_params:
model: openai/*
api_base: https://www.llmmart.ru/api/v1
api_key: os.environ/LLM_MART_API_KEY
- model_name: sonnet
litellm_params:
model: openai/anthropic/claude-sonnet-5
api_base: https://www.llmmart.ru/api/v1
api_key: os.environ/LLM_MART_API_KEY
- model_name: gpt-mini
litellm_params:
model: openai/gpt-4o-mini
api_base: https://www.llmmart.ru/api/v1
api_key: os.environ/LLM_MART_API_KEY
- model_name: embeddings
litellm_params:
model: openai/text-embedding-3-small
api_base: https://www.llmmart.ru/api/v1
api_key: os.environ/LLM_MART_API_KEY
litellm_settings:
drop_params: trueЗапуск: litellm --config config.yaml. Клиенты прокси видят sonnet, gpt-mini или исходный slug (* пробрасывает его как есть). В кабинете модели должны быть включены.
Native Messages (thinking, prompt cache на native-поставщике) — только если это сознательно:
- model_name: sonnet-native
litellm_params:
model: anthropic/anthropic/claude-sonnet-5
api_base: https://www.llmmart.ru/api
api_key: os.environ/LLM_MART_API_KEYLiteLLM сам допишет /v1/messages. Если путь уже полный, задайте LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true. Для IDE и OpenAI SDK native-маршрут не нужен.
Типичные ошибки
| Симптом | Что проверить |
|---|---|
| 401 | LLM_MART_API_KEY = sk-… |
| 404 model_not_found | slug после префикса openai/; включение |
| LLM Provider NOT provided | префикс openai/ или anthropic/ |
404 /v1/v1 | для Anthropic api_base без /v1 |
| Запрос на api.anthropic.com | в model стоит anthropic/… — смените на openai/<slug> |
| Not Found на тесте | у OpenAI-маршрута api_base со /v1 |
Проверено: 2026-09-17 по OpenAI-Compatible в LiteLLM и config.yaml.
Что дальше
Open WebUI
Self-hosted чат. LLM Mart — отдельное OpenAI API connection. Список моделей берётся с `GET /v1/models`; при необходимости id добавляют в allowlist вручную.
LLM Mart Chat
Корпоративный AI-чат для команды: разворачивается на серверах компании, данные остаются в вашем контуре, запросы к моделям идут через LLM Mart с политиками орга