API proxy for llm and more
  • Go 84.6%
  • Python 8.1%
  • Shell 7.3%
Find a file
bsakaguchi 0ee6459840 Refactor worker entity, add probe caching, discovery loop, persistence
- state: rename Slot->Worker (minimal operational unit), WorkerKey
  (model/preset/id); add persistent state store (state_file) with load on
  startup and save after transitions; add probe caching (fast path verifies
  cached state, falls back to full scan)
- discover: periodic re-discovery (discover_interval) + manual POST /discover
- metrics: checkpoint naming via strconv; non-linear RandomForest model in
  analysis (dependencies aren't always linear)
- docs: worker/upstream distinction, s0 semantics, TODO.md (scheduler not
  implemented), config.example.yaml with state_file/discover_interval
2026-08-26 17:28:03 +07:00
cmd/proxy Initial proxy server implementation 2026-08-24 10:33:23 +07:00
doc Refactor worker entity, add probe caching, discovery loop, persistence 2026-08-26 17:28:03 +07:00
internal Refactor worker entity, add probe caching, discovery loop, persistence 2026-08-26 17:28:03 +07:00
metrics Refactor worker entity, add probe caching, discovery loop, persistence 2026-08-26 17:28:03 +07:00
scripts Add metrics server and scheduler /predict integration (phase 6-8) 2026-08-26 06:04:46 +07:00
.gitignore Add architecture doc, ignore local config 2026-08-24 10:53:32 +07:00
config.example.yaml Refactor worker entity, add probe caching, discovery loop, persistence 2026-08-26 17:28:03 +07:00
go.mod Initial proxy server implementation 2026-08-24 10:33:23 +07:00
go.sum Initial proxy server implementation 2026-08-24 10:33:23 +07:00
README.md Fix idle degradation, add docs and full config demo 2026-08-26 11:52:57 +07:00
TODO.md Refactor worker entity, add probe caching, discovery loop, persistence 2026-08-26 17:28:03 +07:00

Temple Switch

Конфигурируемый reverse-proxy, концентрирующий весь AI-функционал машины в одной точке. Маршрутизирует запросы к OpenAI-совместимым LLM-серверам (сейчас — llama.cpp) по моделям, управляет жизненным циклом моделей (машина состояний) и собирает метрики производительности для отдельного сервера метрик.

Возможности

  • Модели как единица маршрутизации: /local/{model}/{preset?}/{upstream?}/... и OpenAI-совместимый роутер /v1/... с полем model.
  • Пресеты — конфигурации модели (request_params, launch_params).
  • capabilities — какие OpenAI-эндпоинты поддерживает модель.
  • discovery — авто-обнаружение моделей апстрима (/v1/models).
  • Машина состояний — прогрев/деградация слотов (c0..cx..s0..s2), спавн процессов с динамическим портом, idle-деградация.
  • Метрики — чекпоинты (стриминг/non-stream) и переходы состояний, отправка в сервер метрик (async, fire-and-forget).
  • api_mapping — переиспользуемые наборы эндпоинтов с перегрузкой.

Архитектура

Два процесса:

  1. Прокси (Go, cmd/proxy) — маршрутизация, планировщик, замеры.
  2. Сервер метрик (Python, metrics/) — хранение, корреляционный анализ, /predict.

Подробнее — в doc/architecture.md.

Быстрый старт

Прокси

go build -o bin/temple-switch ./cmd/proxy
cp config.example.yaml config.yaml   # отредактируйте под себя
./bin/temple-switch -config config.yaml

Проверить: curl http://localhost:8000/v1/models.

Сервер метрик

cd metrics
python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python -m uvicorn server:app --port 9000

systemd (user-сервисы)

# прокси
systemctl --user enable --now temple-switch
# сервер метрик (аналогично, ExecStart указывает на uvicorn)

Конфигурация

Полный пример с комментариями — config.example.yaml. Основные секции:

Секция Назначение
server адрес и лог-уровень прокси
metrics адрес сервера метрик, health-путь, perf-поля
state_machine max_x (уровни кэша) и idle_timeout
capabilities capability → эндпоинты
launch_args канонический ключ launch-параметра → CLI-аргумент
api_mapping именованные наборы эндпоинтов (openai, llama.cpp)
upstreams транспорт: host/port/creds, states, transitions, discover, health
models маршрутные модели: presets, default, capabilities

Плейсхолдеры команд спавна

{model} (=original_name), {launch_params} (развёрнутые аргументы), {port}, {pidfile}, {pid}, {preset}, {host}.

Политики апстрима

  • passthrough — сырой доступ /local/{upstream}/... + fallback.
  • strict — только явные эндпоинты.
  • mask (default) — прямого маршрута нет, доступ только через модель.

Тесты

go test ./...
./scripts/e2e.sh          # регрессия против запущенного прокси
./scripts/e2e-mapping.sh  # override/recessive api_mapping
./scripts/e2e-metrics.sh  # интеграция сервера метрик

Сервер метрик — эндпоинты

Метод Путь Назначение
POST /metrics/transition переход состояния (from, to, duration)
POST /metrics/request чекпоинты запроса (features + target)
POST /analyze ручной запуск корреляционного анализа
POST /predict предсказание времени по параметрам
GET /health доступность

Хранение: таблица transitions + по таблице на handler/route с автосозданием колонок. Длинные строки заменяются placeholder (лимит в конфиге).