# Руководство разработчика ## Требования - 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 ` 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-роутер, маршруты |