forked from templates/template-go-orm
Удалить CLAUDE.md
This commit is contained in:
109
CLAUDE.md
109
CLAUDE.md
@@ -1,109 +0,0 @@
|
|||||||
# CLAUDE.md
|
|
||||||
|
|
||||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
**Ollama Proxy** — Go-сервис, выступающий прокси между Codex CLI и локальной Ollama. Добавляет авторизацию-заглушку и LLM-маршрутизатор: маленькая модель (gemma:1b) классифицирует входящий запрос и перенаправляет его к нужной целевой модели (qwen2.5-coder для кода, gemma для текста).
|
|
||||||
|
|
||||||
Без БД, без Docker на текущем этапе. Чистый Go, stateless.
|
|
||||||
|
|
||||||
## Архитектура
|
|
||||||
|
|
||||||
```
|
|
||||||
Codex CLI → Ollama Proxy (:11435) → Ollama (:11434)
|
|
||||||
│
|
|
||||||
Token check (AUTH_TOKEN из .env)
|
|
||||||
Router LLM: gemma:1b → code / document / general
|
|
||||||
│
|
|
||||||
qwen2.5-coder:1.5b | gemma:1b | gemma:1b
|
|
||||||
```
|
|
||||||
|
|
||||||
**Поток запроса:**
|
|
||||||
1. Codex CLI отправляет запрос с `model: "auto"` на прокси
|
|
||||||
2. Middleware проверяет `Authorization: Bearer <AUTH_TOKEN>`
|
|
||||||
3. Router: если модель не указана явно → gemma:1b классифицирует последнее user-сообщение
|
|
||||||
4. Прокси подменяет поле `model` в запросе и проксирует в реальную Ollama
|
|
||||||
5. Стриминг-ответ (NDJSON) возвращается в Codex CLI построчно
|
|
||||||
|
|
||||||
**Маршрутизация срабатывает только один раз** (при первом запросе с `model: "auto"`). Последующие запросы в той же сессии Codex CLI отправляет уже с конкретным именем модели — прокси пропускает роутер и проксирует напрямую.
|
|
||||||
|
|
||||||
## Структура проекта
|
|
||||||
|
|
||||||
```
|
|
||||||
cmd/server/main.go # Точка входа — загрузка конфига, запуск HTTP-сервера
|
|
||||||
internal/
|
|
||||||
config/config.go # Конфигурация из env-переменных
|
|
||||||
model/
|
|
||||||
ollama.go # Типы Ollama API (Chat, Generate, Tags, Message)
|
|
||||||
handler/
|
|
||||||
middleware.go # Проверка AUTH_TOKEN (Bearer token)
|
|
||||||
proxy.go # HTTP-хендлеры: /api/chat, /api/generate, /api/tags
|
|
||||||
service/
|
|
||||||
ollama_client.go # HTTP-клиент к Ollama (streaming + синхронный)
|
|
||||||
router.go # LLM-маршрутизатор через gemma:1b
|
|
||||||
router/
|
|
||||||
router.go # chi-роутер, регистрация маршрутов
|
|
||||||
go.mod / go.sum # Зависимости
|
|
||||||
Makefile # Команды сборки и запуска
|
|
||||||
.env # Локальные переменные окружения (не в git)
|
|
||||||
docs/
|
|
||||||
architecture.md # Подробная архитектура
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ключевые команды
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make build # go build -o ollama-proxy ./cmd/server
|
|
||||||
make run # go run ./cmd/server (читает .env)
|
|
||||||
make test # go test ./...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Переменные окружения (.env)
|
|
||||||
|
|
||||||
| Переменная | Описание | По умолчанию |
|
|
||||||
|-----------|----------|-------------|
|
|
||||||
| `PROXY_PORT` | Порт прокси | 11435 |
|
|
||||||
| `AUTH_TOKEN` | Токен авторизации (заглушка) | — (обязательна) |
|
|
||||||
| `OLLAMA_URL` | URL реальной Ollama | http://localhost:11434 |
|
|
||||||
| `ROUTER_MODEL` | Модель-классификатор | gemma:1b |
|
|
||||||
| `CODE_MODEL` | Модель для кода | qwen2.5-coder:1.5b |
|
|
||||||
| `DOC_MODEL` | Модель для документов | gemma:1b |
|
|
||||||
| `GENERAL_MODEL` | Общая модель | gemma:1b |
|
|
||||||
|
|
||||||
## Модели Ollama (для тестирования)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
ollama pull gemma:1b # Router LLM + документы + общее
|
|
||||||
ollama pull qwen2.5-coder:1.5b # Целевая модель для кода
|
|
||||||
```
|
|
||||||
|
|
||||||
## Тестирование через curl
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Здоровье сервиса
|
|
||||||
curl http://localhost:11435/health
|
|
||||||
|
|
||||||
# Без токена → 401
|
|
||||||
curl -X POST http://localhost:11435/api/chat -d '{}'
|
|
||||||
|
|
||||||
# С токеном, auto-маршрутизация (code)
|
|
||||||
curl http://localhost:11435/api/chat \
|
|
||||||
-H "Authorization: Bearer <AUTH_TOKEN>" \
|
|
||||||
-d '{"model":"auto","messages":[{"role":"user","content":"напиши функцию на Go"}]}'
|
|
||||||
|
|
||||||
# С токеном, явная модель (без маршрутизации)
|
|
||||||
curl http://localhost:11435/api/chat \
|
|
||||||
-H "Authorization: Bearer <AUTH_TOKEN>" \
|
|
||||||
-d '{"model":"gemma:1b","messages":[{"role":"user","content":"привет"}]}'
|
|
||||||
|
|
||||||
# Список моделей
|
|
||||||
curl http://localhost:11435/api/tags \
|
|
||||||
-H "Authorization: Bearer <AUTH_TOKEN>"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Конвенции
|
|
||||||
|
|
||||||
- Комментарии в коде — на русском
|
|
||||||
- Переносы строк LF (`.gitattributes`)
|
|
||||||
- Версионирование: bumpversion, `VERSION` файл
|
|
||||||
Reference in New Issue
Block a user