/serve on

Pooprusteek как API

Тот же стек провайдеров, которым живёт TUI, выставленный наружу как OpenAI Chat Completions на выбранном вами порту. Запускается изнутри агента — или целиком без интерфейса.

7667

порт по умолчанию — /server <порт> сохранит другой

/v1

chat/completions и models, написание без /v1 тоже принимается

SSE

потоковая отдача по токенам в привычной клиентам форме

$0.00

встроенный бэкенд по-прежнему ничего не стоит

── запуск

Четыре входа

Сервер — отдельная задача, которой владеет TUI, поэтому запуск и остановка никогда не прерывают ход.

pooprusteek

/serve on
  API server listening on http://127.0.0.1:7667/v1
  dialect openai · auth off (loopback) · backends: 4

/serve
  running · 12 requests · 0 errors
  models: deepseek-chat, deepseek-reasoner,
          lmstudio/qwen2.5-coder, gemini/…
/serve on|off
Запуск и остановка прямо из TUI. Статус-строка считает запросы и ошибки.
/server <порт>
Сохранить другой порт; если сервер уже поднят, он перезапустится.
/serve api <диалект>
Сегодня openai. anthropic и gemini зарезервированы в конфиге и честно об этом говорят, вместо того чтобы работать наполовину.
--serve
Поднять TUI с уже работающим сервером. --server и --api — те же ключи.

Или вовсе без интерфейса: --proxy печатает журнал запросов с отметками времени вместо UI (то же, что --api --uiless).

── идентификаторы моделей

Одно имя выбирает бэкенд

Маршрутизация — чистая функция от вашего списка провайдеров: без сети, без догадок и тестируемая отдельно.

deepseek-chat · deepseek-reasoner
Встроенный веб-клиент DeepSeek, если задан токен. Доступен и как deepseek/<id>.
<запись>/<модель>
Запись из /providers с явной моделью: её умолчание плюс всё, что перечисляет провайдер. Неперечисленные идентификаторы проходят насквозь, так что работает всё, что эндпоинт действительно отдаёт.
<запись>
Модель, настроенная у записи, — или первая полученная от неё, если умолчания нет.
голый id модели
Если он совпал с настроенной или полученной моделью какой-то записи, побеждает она. Идентификаторы, скопированные из документации провайдера, работают без префикса.

── клиенты

Наводите на него что угодно

Никакого SDK внедрять не нужно: если у инструмента есть поле base URL, он уже совместим.

aider

Задайте OPENAI_BASE_URL, передайте --model deepseek-chat — и парный программист работает на бесплатном бэкенде.

Continue и плагины IDE

Любой блок OpenAI-совместимого провайдера: базовый URL, произвольная строка вместо ключа, идентификатор модели из каталога.

Open WebUI

Добавьте как OpenAI-подключение — весь каталог моделей появится в выпадающем списке.

SDK от OpenAI

Python, JS, curl — форма запроса не меняется, потоковая отдача включительно.

GET /v1/models

Тот самый каталог в виде списка, который клиенты запрашивают при подключении.

Старый /v1/completions

Синтезируется поверх чат-пути для клиентов, которые так и не переехали.

python — openai sdk

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:7667/v1",
    api_key="not-needed"  # unless [server] api_key is set
)
client.chat.completions.create(
    model="deepseek-chat", messages=[…], stream=True)

env — anything that reads OPENAI_BASE_URL

OPENAI_BASE_URL=http://127.0.0.1:7667/v1
OPENAI_API_KEY=whatever

# aider --model deepseek-chat
# continue / open-webui / any OpenAI-shaped client

── умолчания

Локально, пока вы не решите иначе

Шлюз раздаёт доступ к аккаунтам и платным провайдерам. Все умолчания здесь исходят из того, что публиковать его вы не собирались.

host
127.0.0.1. Выставить шлюз без ключа в локальную сеть должно быть решением, а не случайностью.
api_key
Задайте — и каждый запрос обязан нести Authorization: Bearer …
CORS
Отправляется, только когда настроен bearer-токен: браузерная дверь идёт следом за дверью авторизации, но не впереди неё.
сессии
Свежий форк на запрос; форки DeepSeek сбрасывают удалённую сессию, поэтому работа сервера не засоряет список ваших чатов.
провайдеры
Настройки снимаются при запуске — правки в TUI применятся на следующем /serve off + on.

config.toml

[server]
host = "127.0.0.1"   # loopback by default
port = 7667           # /server <port>
api = "openai"       # anthropic/gemini reserved
# api_key = "…"     # required bearer + CORS gate

Как это всё устроено внутри

deepseek · deepseek-chatctx:0% · | [streaming]