УФИЦ РАНLLM-СЕРВИС

LLM УФИЦ РАН

версия 0.23.1

Доступ к языковой модели УФИЦ РАН: OpenAI-совместимый API по ключам проектов, чат в личном кабинете и учёт потребления по пользователям и проектам.

Возможности

  • OpenAI-совместимый API: чат, стриминг, tools, эмбеддинги.
  • Ключи на проекты — выпуск, просмотр и отзыв в личном кабинете.
  • Чат с моделью: режим рассуждений Think, поиск в интернете Search, память диалога.
  • Учёт токенов и запросов по пользователям и проектам, журнал обращений.
  • Регистрация по почте с модерацией администратором.

Сведения

Версия
0.23.1 от 2026-11-13
Модель
Qwen/Qwen3.8-27B
Эмбеддер
Qwen/Qwen3-Embedding-0.6B
Поиск
SearXNG
API
https://chat.predictor.su/v1

История изменений

0.23.1 2026-11-13 текущая

Исправлено

  • Автодеплой больше не падает на root-файлах SearXNG в /opt/ufic-ran-llm-service.old: если обычное удаление .old недоступно, каталог очищается через временный контейнер postgres:17-alpine, как в Predictor. Работающие контейнеры при такой ошибке не затрагиваются.

0.23.0 2026-11-13

Изменено

  • На хосте с работающим predictor-llm-service деплой УФИЦ автоматически использует общий оверлей: LLM и включённый эмбеддер идут через шлюз Predictor, собственный L2TP-клиент УФИЦ останавливается и удаляется. На отдельном хосте по-прежнему поднимается автономный стек со своим VPN.
  • docker-compose.local.yml сохраняет PUBLIC_BASE_URL из .env, поэтому применим и к локальному, и к прод-запуску рядом с Predictor. Для совместного режима обязателен PREDICTOR_API_KEY; конфигурация проверяется до остановки текущих контейнеров УФИЦ.

0.22.3 2026-11-13

Исправлено

  • Деплой после смены каталога с /opt/predictor-llm-service на /opt/ufic-ran-llm-service: перед запуском нового стека старый стек УФИЦ останавливается, только если владелец тома и публикация порта 10012 подтверждают его принадлежность. Это освобождает порт и не даёт двум PostgreSQL одновременно работать с одним томом. Если порт занят другим контейнером, деплой завершается с его именем, не останавливая чужой сервис.

0.22.2 2026-11-13

Изменено

  • Локальный оверлей публикует API УФИЦ на хост-порту 10012 вместо 10011; PUBLIC_BASE_URL и проверки совместного запуска используют тот же порт.

0.22.1 2026-11-13

Исправлено

  • Совместный запуск с predictor-llm-service: фиксированное имя Compose-проекта УФИЦ и отдельный каталог деплоя /opt/ufic-ran-llm-service исключают пересечение контейнеров, образов и сетей с Predictor.
  • docker-compose.local.yml больше не допускает запуск второго L2TP-клиента: API УФИЦ работает на порту 10011 и обращается к LLM через шлюз Predictor по PREDICTOR_API_KEY. Его PostgreSQL и SearXNG адресуются по полным именам контейнеров и не смешиваются с одноимёнными сервисами Predictor.
  • Порт в примере PUBLIC_BASE_URL и ссылке на ЛК в .env.example исправлен на 10012.

0.22.0 2026-11-13

Добавлено

  • Команда python -m app.create_admin создаёт администратора с подтверждённой почтой и одобренным доступом без регистрации и письма. Пароль вводится интерактивно или через stdin; --update обновляет существующего пользователя и отзывает его веб-сессии.

Исправлено

  • Том PostgreSQL получил собственное фиксированное имя ufic-ran-llm-service_pgdata: оно больше не зависит от имени Compose-проекта и не совпадает с томом predictor-llm-service. Определения общих VPN и SearXNG не изменены.

0.21.0 2026-11-13

Изменено

  • Порт шлюза: 10010 → 10012 (Dockerfile, docker-compose.yml — публикация и healthcheck, дефолт PUBLIC_BASE_URL в конфиге и compose, проверки в deploy/deploy.sh и scripts/check_gateway.py, документация). Локальный оверлей docker-compose.local.yml остаётся на хост-порте 10011.

0.20.1 2026-11-13

Исправлено

  • Исполнительный бит у deploy/deploy.sh (при импорте с Windows терялся — job автодеплоя GitLab CI падал с Permission denied, exit 126).

0.20.0 2026-10-25

Изменено

  • Оформление — фирменный стиль УФИЦ РАН по брендбуку «Айдентика 03.08.2026» вместо Predictor: палитра (тёмно-синий → синий градиент, мятный и золотой акценты), шрифты Unbounded (заголовки) и TT Travels (текст) — локально, без Google Fonts; шапка на фирменном градиенте с паттерном из иконок направлений и эмблемой-зданием, «стеклянный» активный пункт меню, кнопки-пилюли; тёмная тема — тёмно-синяя с мятным акцентом; на странице «О программе» — логотип УФИЦ РАН. Название в интерфейсе — «LLM УФИЦ РАН».
  • Файлы, которые создаёт модель (Word, Excel, PowerPoint), — в стиле УФИЦ РАН: тема ufic вместо predictor, синие заголовки и шапки таблиц, логотип УФИЦ РАН.

Удалено

  • Общие проекты: раздел админки «Общие проекты» (/admin/projects) и вкладка «Проекты» ЛК (/account/projects/company, проекты компании со ссылками на git/jira/confluence). В чате и статистике — только собственные проекты пользователей. В уже работающей базе общие проекты при старте уходят в архив, их ключи отзываются; строки и журнал потребления сохраняются, колонки projects.shared, projects.company_project_id и таблица company_projects остаются, но не используются.

0.19.0 2026-10-23

Добавлено

  • Вкладка «Проекты» в ЛК (/account/projects/company): список проектов компании, вести его может любой одобренный пользователь — создание, правка названия, описания и ссылок на git/jira/confluence, архив и возврат. Список общий: название проекта компании не может совпасть с действующим общим проектом. Каждый проект компании автоматически есть в «Новом чате» и в списке чатов (общая группа), токи чата пишутся на проект и на того, кто пишет, — как на общие. В админке «Общие проекты» такие проекты не показываются и не меняются: единственный способ вести их — вкладка «Проекты».

0.18.0 2026-10-23

Добавлено

  • Таблица проектов компании company_projects (формат списков ссылок — из predictor-ppm): название, описание и ссылки на git, jira и confluence — по URL на строку, несколько ссылок на один инструмент.

0.17.0 2026-10-23

Добавлено

  • Таблицы в ответах модели: GFM-таблицы Markdown (| … | + строка |---|) в чате отрисовываются таблицами — с рамкой, выделенной шапкой, выравниванием колонок по разделителю (:---:, ---:) и горизонтальной прокруткой у широких.
  • Подсчёт токенов: под каждым ответом — мелкая строка «… в · … из · контекст N%», где N% — доля контекста модели, которую занял последний запрос ответа (длина контекста — max_model_len из /v1/models vLLM; если LLM недоступна — только токены). Рядом с кнопкой Think в поле ввода — заполнение контекста текущего диалога; после перезагрузки страницы значения берутся из сохранённых токенов ответа.
  • Выбор глубины рассуждений: селектор «Глубина» рядом с кнопкой Think (по умолчанию / низкая / средняя / высокая → reasoning_effort шаблона Qwen3.8). Скрыт, пока Think выключен; настройка сохраняется в профиле и действует на следующие ответы.

0.16.0 2026-10-03

Добавлено

  • Карточка «Настройки LLM» во вкладке «GPU» админки: с чем запущен vLLM прямо сейчас — модель в API и веса, длина контекста, тип KV-кэша и сколько токенов в него влезает, доля памяти GPU, prefix caching (из /v1/models и /metrics), — и параметры шлюза из .env (адрес, модель, очередь, таймауты, повторы). Если LLM_MODEL не совпадает с именем модели в vLLM — предупреждение.
  • Навыки для программирования в стартовом наборе: «Ревью кода», «Поиск ошибки», «Тесты к коду», «Рефакторинг», «SQL-запросы», «Объяснение кода». На уже работающих установках — кнопка «Добавить стартовый набор» в админке навыков добавит только новые.
  • server/start_vllm.sh: длинный контекст через YaRN (YARN_FACTOR — скрипт сам добавляет --hf-overrides и VLLM_ALLOW_LONG_MAX_MODEL_LEN=1), оценка KV-кэша до старта, передача HF_TOKEN.
  • opencode.json — подключение opencode к шлюзу; scripts/check_gateway.py — проверка шлюза.

Изменено

  • Пример server/vllm.env.example: bf16-веса, контекст 393 216 токенов (YaRN ×1.5), KV-кэш в fp8, MAX_NUM_SEQS=16 — максимум, проверенный на H100 80GB рядом с эмбеддером (524 288 не влезает: нужно 16.3 ГБ KV-кэша при доступных 12.5 ГБ).
  • LLM_REQUEST_TIMEOUT в .env.example — 1800 с: промпт на сотни тысяч токенов обрабатывается минуты.

Исправлено

  • deploy/deploy.sh работает из Git Bash на Windows: путь к ~/.ssh берётся из $HOME (ssh ломался на кириллице в имени пользователя), без мультиплексирования SSH, которое там не работает; ключ — ~/.ssh/id_ed25519, id_rsa или DEPLOY_SSH_KEY. Ошибка подключения больше не выдаётся за «нет docker compose».

0.15.0 2026-09-25

Добавлено

  • Общие проекты (/admin/projects): администраторы создают, переименовывают, архивируют и возвращают проекты, которые видят все пользователи — в меню «Новый чат» и в выборе проекта над чатом. Потребление пишется на проект и на того, кто пишет (у каждого пользователя свой ключ чата в общем проекте); в отчётах такие проекты подписаны «общий проект». API-ключи к общим проектам не выпускаются.
  • Список чатов сгруппирован по проектам: сворачиваемые группы с лейблом проекта и числом чатов, группа с самым свежим диалогом — сверху; новый чат и смена проекта сразу переносят диалог в нужную группу.
  • Кнопка с картинкой в поле ввода чата открывает выбор из библиотеки прямо над полем: клик по картинке прикладывает её к сообщению. Если библиотека пуста, там же предупреждение и кнопка «Загрузить изображения».
  • Вкладка «GPU» в админке (/admin/gpu): как nvidia-smi — таблица по видеокартам, процессы и графики загрузки, памяти, температуры и мощности за 5 мин / 15 мин / 1 час с обновлением каждые 2 с; нагрузка vLLM LLM и эмбеддера из их /metrics (запросы в работе и в очереди, KV-кэш), каждый своим блоком. Показания карт — от нового server/gpu_monitor.py на GPU-сервере (служба server/gpu-monitor.service), настройки шлюза GPU_MONITOR_URL и GPU_MONITOR_TOKEN.
  • Предупреждение об обновлении платформы: на странице «Заявки» администратор включает его на 5 минут, и у всех пользователей на всех страницах висит баннер с обратным отсчётом («Сейчас будет обновляться платформа… Доступ к LLM по API-ключу останется»). Уже открытые страницы, в том числе чат, узнают о нём в течение 30 с; состояние хранится в БД (maintenance_notices) и переживает перезапуск контейнера; снять можно досрочно.

Изменено

  • Поле ввода чата: вместо скрепки и кнопки с картинкой — одна кнопка «+» с меню «Загрузить файл» / «Картинка из коллекции». Библиотека изображений переименована в «Коллекцию».
  • Кнопка отправки: стрелка по центру; пока модель отвечает — кнопка «стоп». Остановка срабатывает и в первые секунды, пока диалог ещё создаётся; после неё чат сразу готов к следующему вопросу, а набирать текст можно и во время ответа.
  • Think — рядом с кнопкой отправки.
  • Глубина рассуждений по умолчанию — medium (новая настройка DEFAULT_REASONING_EFFORT): если think включён, а клиент глубину не задал, шлюз больше не оставляет шаблону Qwen3.8 его xhigh, на котором агенты (Qwen Code и др.) раздумывали над каждым шагом. Явные reasoning_effort, output_config.effort и chat_template_kwargs клиента главнее; пусто — как раньше.
  • server/vllm.env.example: MAX_NUM_SEQS=32 — без ограничения vLLM с CUDA graphs (ENFORCE_EAGER=0) не помещается рядом с эмбеддером (профилирование рекуррентных состояний Qwen3.8 просит ~24 ГБ); с ним генерация на H100 ~48 ток/с против ~20 в eager-режиме, контекст 131072.

0.14.1 2026-09-25

Добавлено

  • deploy/deploy.sh — выкатка всего стека (vpn, postgres, searxng, api) на удалённую машину по SSH одной командой.

Исправлено

  • Замечания статического анализа SonarQube: регулярные выражения без экспоненциального перебора (проверка e-mail, шапка SKILL.md, Markdown в чате, разбор текстовых вызовов инструментов), остановка генерации корректно завершает задачу (CancelledError пробрасывается после сохранения ответа).
  • Доступность: подписи у полей загрузки файлов, уведомления и статус LLM — элементы <output>, столбцы графика потребления — кнопки с текстовой подписью.

Изменено

  • Крупные функции разбиты на части без изменения поведения: отправка сообщения в чате, генерация docx/xlsx/pptx, стрим OpenAI/Anthropic, отчёт по потреблению, анонимизатор, чтение документов, отрисовка ответа в чате.
  • Добавлен sonar-project.properties; сторонние навыки app/skill_packs/ в анализ не входят.
  • Статистика потребления в админке — четыре столбчатые диаграммы вместо таблицы: проекты и пользователи по токенам и по запросам (первые 8, полный список — в CSV). У каждого проекта и пользователя свой цвет, одинаковый на обеих диаграммах; палитра подобрана для светлой и тёмной темы.

Удалено

  • Вкладка «Журнал» (/admin/requests) в админке. Последние запросы проекта по-прежнему видны в ЛК на его странице.

0.14.0 2026-09-25

Добавлено

  • Anthropic-совместимый API: POST /v1/messages (обычный ответ и стрим) и POST /v1/messages/count_tokens — к шлюзу подключается Claude Code (ANTHROPIC_BASE_URL). Формат переводит vLLM, шлюз добавляет ключи, очередь, повторы и учёт (эндпоинт messages в отчётах).
  • Параметр thinking Anthropic (enabled / adaptive / disabled) и output_config.effort переводятся в think и reasoning_effort Qwen3.8; без них — DEFAULT_THINKING и рекомендованный сэмплинг.
  • Запросы на любые модели (например, «быструю» claude-haiku-…, на которую Claude Code шлёт фоновые задачи) уходят в LLM_MODEL.
  • Ключ принимается и в заголовке x-api-key, как у Anthropic API.

Изменено

  • Ошибки на /v1/messages* — в формате Anthropic ({"type": "error", "error": {...}}); остальные маршруты — по-прежнему в формате OpenAI.

0.13.0 2026-09-25

Добавлено

  • Навыки в формате [Agent Skills](https://agentskills.io/specification): SKILL.md с YAML-шапкой и файлы навыка (справочники, примеры, скрипты). Модель видит список файлов подключённого навыка и читает нужные сама (read_skill_file); скрипты не выполняются.
  • Импорт навыка в админке: .zip с папкой навыка или отдельный SKILL.md; импортируется выключенным, видны источник, лицензия, совместимость и файлы.
  • Навыки из [anthropics/skills](https://github.com/anthropics/skills) (Apache 2.0) — кнопкой в реестре: internal-comms (3P-апдейты, рассылка, FAQ), discernment-nudge, frontend-design, mcp-builder, webapp-testing. Файлы лежат в app/skill_packs/anthropic/ с лицензией и NOTICE.
  • 10 тем оформления из theme-factory для создаваемых файлов (theme у create_file): модель берёт их, только если пользователь просит другой стиль; по умолчанию — фирменный Predictor.

Изменено

  • Встроенные навыки, которые администратор не правил, при старте получают новые тексты инструкций из кода.
  • Модель создаёт файл, только когда его явно просят; на обычный вопрос отвечает в чате.
  • Код навыка — до 64 символов, описание — до 1024 (как в спецификации Agent Skills).

Исправлено

  • Нестабильный тест учёта по проектам чата: проверяется прирост записей по проектам, а не «последняя запись» (учёт пишется фоновой задачей).

0.12.0 2026-09-24

Добавлено

  • Автовыбор навыков: модель видит только названия и описания навыков-инструкций и сама подключает подходящий (use_skill); полные инструкции загружаются, лишь когда нужны. Под ответом видно, какой навык подключён.
  • Создание файлов в чате: модель делает документы Word, таблицы Excel (с формулами) и презентации PowerPoint в фирменном стиле Predictor — цвета, шрифты, логотип (create_file); файл скачивается из сообщения.
  • Стартовый набор навыков-инструкций кнопкой в админке: статус-отчёт, разбор инцидента, протокол встречи, деловое письмо, анонс для команды.
  • «Составить по описанию» на странице нового навыка: LLM готовит черновик — название, код, описание «Используй, когда…», инструкции с примерами.

Изменено

  • Описание навыка-инструкции теперь условие применения: по нему модель решает, подключать ли навык.

Безопасность

  • В создаваемых Excel-файлах формулы, способные обращаться к сети или запускать программы (HYPERLINK, WEBSERVICE, DDE и т. п.), записываются как текст.

0.11.0 2026-09-24

Добавлено

  • Поиск в интернете стал навыком-инструментом: модель сама решает, когда искать (function calling web_search), может поискать до 3 раз за ответ и знает сегодняшнюю дату. Правила «когда искать» администратор правит в навыке.
  • Анонимизатор — встроенный навык: перед отправкой в поисковик заменяет в запросе персональные данные и корпоративную тайну на выдуманные значения (словарь администратора, e-mail, телефоны, ИНН, СНИЛС, паспорта, карты, счета, IP, а также ФИО, компании, проекты и адреса через локальную LLM). Если проверить запрос не удалось, поиск отменяется.
  • В статусе поиска видно, что скрыл анонимизатор; на странице анонимизатора в админке его можно проверить на примере.
  • Раздел «Инструменты» во вкладке «Навыки».
  • Вызов инструмента, который vLLM вернул текстом (<tool_call>…), скрывается от пользователя и выполняется.

Изменено

  • Кнопка Search в поле ввода убрана: вместо неё пометка «Поиск · анонимно», когда навык включён.
  • Отдельный вызов LLM для переформулировки поискового запроса больше не нужен — запрос пишет сама модель.
  • Источники всех поисков ответа нумеруются сквозь и показываются одним списком.

0.10.0 2026-09-24

Добавлено

  • Вкладка «Навыки» в админке — реестр навыков чата: создание, правка, включение и выключение, удаление; видно, в скольких диалогах навык выбран.
  • Навыки-инструкции: пользователь выбирает навык для диалога на панели над чатом, его инструкции уходят модели системным сообщением.
  • Чтение документов в чате: Word (.docx), Excel и CSV, PowerPoint (.pptx), PDF с текстовым слоем и текстовые файлы — скрепкой, Ctrl+V или перетаскиванием, до 5 на сообщение. Модель отвечает по тексту документа, и документ остаётся в контексте следующих вопросов.
  • Плашка документа в сообщении открывает извлечённый из него текст — то, что увидела модель.
  • Встроенные навыки чтения документов в реестре: их можно выключить (формат перестаёт прикладываться) и поправить их инструкции.

0.9.0 2026-09-24

Добавлено

  • Проект у каждого чата: кнопка «Новый чат» открывает выбор проекта, в списке чатов проект виден цветным лейблом.
  • Проект открытого чата можно сменить на панели над чатом; следующие сообщения учитываются на новый проект.

Изменено

  • Потребление чата пишется на проект этого чата, а не на один общий проект из настроек; настройка теперь лишь подсказывает проект для нового чата (последний выбранный).
  • Старые чаты без проекта получают проект по умолчанию при следующем сообщении.

0.8.2 2026-09-24

Исправлено

  • Чат снова отправляет сообщения: в 0.8.1 при правке пропала функция сбора приложенных картинок, и отправка обрывалась ошибкой в браузере (поле очищалось, запрос в LLM не уходил).
  • Тест tests/test_static_js.py: проверяет, что все вызываемые в JS страниц функции объявлены.

0.8.1 2026-09-24

Изменено

  • Библиотека изображений перенесена в левую колонку чата, над кнопкой «Новый чат»; её можно свернуть.
  • Все добавленные в поле ввода картинки (скрепка, Ctrl+V, перетаскивание) сразу попадают в библиотеку, не дожидаясь отправки.

Исправлено

  • Картинка, вставленная из библиотеки, прикладывается без перекодирования — после отправки в библиотеке больше не появляется её копия.

0.8.0 2026-09-24

Добавлено

  • Библиотека изображений в чате ЛК: панель справа (кнопка «Библиотека» на панели чата или значок картинки в поле ввода); загрузка своих картинок, удаление.
  • Картинку из библиотеки можно вставить в сообщение кликом или перетаскиванием в поле ввода.
  • Отправленные в чат изображения сами попадают в библиотеку; одинаковые файлы хранятся один раз, до 300 изображений на пользователя.

Изменено

  • Чат занимает всю ширину окна.

0.7.0 2026-09-24

Добавлено

  • Картинки в чате ЛК: скрепка в поле ввода, вставка из буфера (Ctrl+V) и перетаскивание, превью перед отправкой; до 5 изображений (PNG, JPEG, WebP, GIF) по 10 МБ.
  • Картинки сохраняются в истории диалога и видны только владельцу.
  • Перед отправкой браузер уменьшает изображение до 1536 px по длинной стороне (JPEG) — меньше трафика и токенов.

Изменено

  • В модель уходят картинки только текущего сообщения; в истории на их месте — пометка, чтобы старые изображения не тратили токены при каждом ответе.
  • Тесты работают с файловой SQLite вместо :memory: — поведение как у рабочей БД (без общего соединения между сессиями).

Безопасность

  • Тип изображения определяется по сигнатуре файла, а не по заявленному; картинки отдаются с nosniff и запрещающей CSP.

0.6.0 2026-09-24

Добавлено

  • Раздел «О программе»: текущая версия, описание сервиса и история изменений; иллюстрация с мамонтом перенесена сюда из шапки.
  • Контроль версий: файл VERSION (SemVer) и этот changelog; версия видна в подвале страниц, в /health и в Swagger.
  • Проект переведён под git.

0.5.0 2026-09-24

Добавлено

  • Режим Search в чате: поиск в интернете через SearXNG, загрузка текста страниц, ответ со ссылками на источники [1], [2] и списком источников под ответом.
  • Переключатели Think и Search перенесены в поле ввода сообщения.
  • Журнал запросов в админке: каждое обращение к LLM отдельной строкой (пользователь, проект, ключ, модель, токены, статус, длительность), фильтры и выгрузка в CSV.
  • Последние запросы проекта на его странице в ЛК.
  • Проект «Чат» — проект по умолчанию для сообщений из чата, создаётся у каждого пользователя автоматически.

Изменено

  • Стрим учитывается по реально сгенерированным токенам (continuous_usage_stats): остановленный или оборванный ответ больше не записывается с нулём токенов.
  • Из шапки убрана надпись «LLM-шлюз».

Безопасность

  • Страницы из поисковой выдачи загружаются только с публичных адресов (в т.ч. при редиректах) — шлюз находится в сети VPN и видит внутреннюю сеть.

0.4.0 2026-09-24

Добавлено

  • Индикатор доступности LLM в чате.
  • Отдельный ключ по умолчанию «Чат в ЛК» для запросов из чата.
  • Кнопка показа пароля (глаз) во всех полях пароля.

Изменено

  • Ответ модели в чате генерируется на сервере и не прерывается при уходе со страницы или смене вкладки; при возврате страница подхватывает идущий ответ.
  • Понятное сообщение в чате, когда LLM недоступна.

Исправлено

  • VPN-туннель переподключается сам после обрыва (сторож в контейнере vpn, healthcheck).
  • Быстрое следующее сообщение могло уйти в LLM без предыдущего ответа модели.

0.3.0 2026-09-24

Добавлено

  • Чат с LLM в личном кабинете: диалоги, режим think, настраиваемая «память» диалога, выбор проекта для учёта.
  • Светлая и тёмная темы (сохраняются в профиле).
  • При создании проекта — подсказки из названий проектов других пользователей; сводная статистика по одноимённым проектам.

Изменено

  • Оформление в фирменном стиле Predictor.

0.2.0 2026-09-24

Добавлено

  • Регистрация по почте с подтверждением, вход, сброс пароля.
  • Модерация заявок администратором: одобрение, отказ с причиной, блокировка, назначение администраторов.
  • Проекты и API-ключи в личном кабинете: выпуск, повторный показ, отзыв, архив проекта.
  • Учёт каждого обращения к LLM (пользователь, проект, ключ, токены) и статистика с фильтрами и выгрузкой в CSV.
  • PostgreSQL в docker-compose.

Удалено

  • Статические ключи SERVICE_API_KEYS — доступ только по ключам проектов из ЛК.

0.1.0 2026-09-22

Добавлено

  • OpenAI-совместимый шлюз к Qwen3.8 (vLLM) через VPN: /v1/chat/completions (в т.ч. стриминг и tools), управление think, очередь и повторы запросов.
  • Эмбеддинги Qwen3-Embedding: /v1/embeddings.
  • Скрипты запуска vLLM на GPU-сервере и smoke-тест.