Files
Local_Perplexity/docs/DEVELOPER.md
fedos 8e74e53b3d feat: add Ollama proxy with LLM router and Codex CLI support
Go-сервис-прокси между Codex CLI и Ollama. Добавляет Bearer-авторизацию,
LLM-маршрутизатор (deepseek классифицирует запросы: code/doc/general),
поддержку OpenAI Responses API для Codex CLI, стриминг SSE, кеш модели.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-07 15:25:15 +03:00

3.2 KiB

Руководство разработчика

Требования

  • Go 1.21+
  • Ollama — установлен и запущен локально

Первый запуск

1. Скачать модели в Ollama

ollama pull gemma:1b              # Router LLM + документы + общее
ollama pull qwen2.5-coder:1.5b   # Целевая модель для кода

Проверить что модели доступны:

ollama list

2. Настроить .env

PROXY_PORT=11435
AUTH_TOKEN=my-secret-token
OLLAMA_URL=http://localhost:11434
ROUTER_MODEL=gemma:1b
CODE_MODEL=qwen2.5-coder:1.5b
DOC_MODEL=gemma:1b
GENERAL_MODEL=gemma:1b

3. Запустить прокси

make run
# или напрямую:
go run ./cmd/server

Команды

make build   # Собрать бинарник ./ollama-proxy
make run     # go run ./cmd/server (читает .env)
make test    # go test ./...

Тестирование через curl

# Проверка работоспособности (без токена)
curl http://localhost:11435/health

# Без токена → 401
curl -X POST http://localhost:11435/api/chat \
  -d '{"model":"auto","messages":[{"role":"user","content":"привет"}]}'

# Auto-маршрутизация → Router LLM (gemma:1b) выберет модель
curl http://localhost:11435/api/chat \
  -H "Authorization: Bearer my-secret-token" \
  -d '{"model":"auto","messages":[{"role":"user","content":"напиши функцию на Go"}]}'
# → классифицирует как "code" → запрос идёт в qwen2.5-coder:1.5b

# Явная модель (без маршрутизации)
curl http://localhost:11435/api/chat \
  -H "Authorization: Bearer my-secret-token" \
  -d '{"model":"gemma:1b","messages":[{"role":"user","content":"расскажи про Go"}]}'

# Список моделей
curl http://localhost:11435/api/tags \
  -H "Authorization: Bearer my-secret-token"

Настройка Codex CLI

  • Base URL: http://localhost:11435
  • API Key: значение из AUTH_TOKEN
  • Model: auto (автомаршрутизация) или конкретная модель

Как добавить новую модель

  1. ollama pull <model-name>
  2. Добавить переменную в .env: ANALYSIS_MODEL=llama3.2:3b
  3. Добавить поле в internal/config/config.go
  4. Расширить логику в internal/service/router.go

Структура кода

Файл Ответственность
cmd/server/main.go Точка входа, инициализация
internal/config/config.go Env-переменные
internal/model/ollama.go Go-типы Ollama API
internal/handler/middleware.go Проверка токена
internal/handler/proxy.go HTTP-хендлеры
internal/service/ollama_client.go Клиент к Ollama (streaming + sync)
internal/service/router.go LLM-маршрутизатор
internal/router/router.go chi-роутер, маршруты