LAPA принимает запрос по OpenAI-совместимому API и маршрутизирует его к DeepSeek, Claude, GPT, Gemini, GLM, Qwen или локальной модели. Клиент получает виртуальный ключ — реальные ключи провайдеров не покидают сервер.
OpenAI-совместимый /api/v1: chat completions, стриминг, список моделей. Смена модели — одна строка в запросе, код клиента не меняется.
Каждому клиенту — свой sk-…. Реальные ключи провайдеров хранятся только на сервере и наружу не выдаются. Ротация — из кабинета.
Бюджет и лимит запросов на каждый ключ. Разрешённый набор моделей — тоже на уровне ключа. Превышение — отказ, а не счёт в конце месяца.
Ошибка провайдера, перегрузка или исчерпанная квота — запрос уходит на следующую модель в цепочке. Клиент получает ответ, а не 5xx.
Расход по ключам и моделям, число запросов, токены. Клиент видит свою статистику в кабинете, без доступа к чужим данным.
Правила на уровне ключа: фильтр prompt-injection, запрет тем, часовые окна доступа. Проверка до отправки запроса в модель.
Tool calling и агентные сценарии. OpenCode подключается как один провайдер со всеми моделями. Мультимодальность — изображения на вход. Водяной знак в сгенерированном коде.
Ваша инфраструктура, ваши данные. Кэш ответов, стриминг, HTTPS. Никаких посредников между вами и провайдером.
Поддерживаются облачные и локальные бэкенды. Доступный набор моделей задаётся на ключе; актуальный список — GET /api/v1/models.
Получите виртуальный ключ и работайте с LAPA как с обычным OpenAI API — меняется только base_url. Три варианта: curl, Python, OpenCode.
# 1. curl curl https://lapa.interforum.su/api/v1/chat/completions \ -H "Authorization: Bearer $LAPA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"Привет"}]}' # 2. python (openai sdk) import os from openai import OpenAI client = OpenAI( base_url="https://lapa.interforum.su/api/v1", api_key=os.environ["LAPA_API_KEY"], ) r = client.chat.completions.create( model="deepseek-v4-flash", messages=[{"role": "user", "content": "Привет"}], ) print(r.choices[0].message.content) # 3. opencode — ~/.config/opencode/opencode.jsonc (один провайдер, много моделей) { "provider": { "lapa": { "npm": "@ai-sdk/openai-compatible", "name": "LAPA", "options": { "baseURL": "https://lapa.interforum.su/api/v1", "apiKey": "{env:LAPA_API_KEY}" }, "models": { "deepseek-v4-flash": { "name": "DeepSeek V4 Flash" }, "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }, "gemini-3.5-flash": { "name": "Gemini 3.5 Flash" } } } }, "model": "lapa/deepseek-v4-flash" }
Нужен ключ, отдельная модель или интеграция? Напишите — подключим.