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

111 lines
3.2 KiB
Markdown

# Руководство разработчика
## Требования
- Go 1.21+
- [Ollama](https://ollama.com) — установлен и запущен локально
## Первый запуск
### 1. Скачать модели в Ollama
```bash
ollama pull gemma:1b # Router LLM + документы + общее
ollama pull qwen2.5-coder:1.5b # Целевая модель для кода
```
Проверить что модели доступны:
```bash
ollama list
```
### 2. Настроить .env
```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. Запустить прокси
```bash
make run
# или напрямую:
go run ./cmd/server
```
---
## Команды
```bash
make build # Собрать бинарник ./ollama-proxy
make run # go run ./cmd/server (читает .env)
make test # go test ./...
```
---
## Тестирование через curl
```bash
# Проверка работоспособности (без токена)
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-роутер, маршруты |