feat: LLM routing by tier (free→Ollama, pro→Timeweb)
Some checks failed
Build and Deploy GooSeek / build-and-deploy (push) Failing after 8m25s

- Add tier-based provider routing in llm-svc
  - free tier → Ollama (local qwen3.5:9b)
  - pro/business → Timeweb Cloud AI
- Add /api/v1/embed endpoint for embeddings via Ollama
- Update Ollama client: qwen3.5:9b default, remove auth
- Add GenerateEmbedding() function for qwen3-embedding:0.6b
- Add Ollama K8s deployment with GPU support (RTX 4060 Ti)
- Add monitoring stack (Prometheus, Grafana, Alertmanager)
- Add Grafana dashboards for LLM and security metrics
- Update deploy.sh with monitoring and Ollama deployment

Made-with: Cursor
This commit is contained in:
home
2026-03-03 02:25:22 +03:00
parent 5ac082a7c6
commit 7a40ff629e
19 changed files with 1759 additions and 35 deletions

View File

@@ -1,26 +1,99 @@
# Недоделки — начать отсюда
# LLM Routing по тарифам ✅
## Всё готово! ✅
## Архитектура
### Сделано — 2 марта 2026
```
┌─────────────────────────────────────────────────────────┐
│ llm-svc │
│ │
│ POST /api/v1/generate │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ resolveProvider │ │
│ │ (tier) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ ▼ ▼ │
│ ┌──────┐ ┌────────┐ │
│ │ FREE │ │ PRO │ │
│ └──┬───┘ └───┬────┘ │
│ │ │ │
│ ▼ ▼ │
│ Ollama Timeweb │
│ (local) (cloud) │
└─────────────────────────────────────────────────────────┘
```
**Security Hardening (Gitea):**
- [x] Gitea обновлён: 1.22.6 → 1.25.4 (CVE исправлены)
- [x] Регистрация отключена, Swagger отключён
- [x] Security headers настроены (CSP, X-Content-Type-Options, etc.)
## Роутинг по тарифам
**CI/CD и инфраструктура:**
- [x] K3s registry настроен для HTTP (k3s-registries.yaml)
- [x] file-svc PVC исправлен (ReadWriteOnce)
- [x] Все сервисы работают
| Тариф | Провайдер | Модель | Лимиты |
|-------|-----------|--------|--------|
| **free** | Ollama (local) | qwen3.5:9b | 50 req/day, 2000 tokens/req |
| **pro** | Timeweb | gpt-4o, claude, etc | 500 req/day, 8000 tokens/req |
| **business** | Timeweb | all models | 5000 req/day, 32000 tokens/req |
**Коммиты:**
- e64567a - fix: file-svc PVC, k3s registries
- c9e5ff6 - docs: CONTINUE.md updated
- d2ef146 - security: Gitea upgrade
## API Endpoints
### Контекст
- Сервер: 5.187.77.89
- https://gooseek.ru — работает ✅
- https://git.gooseek.ru — Gitea 1.25.4 ✅
- K3s + Nginx Ingress + Cert-Manager работают
### POST /api/v1/generate
```json
{
"providerId": "auto", // или "ollama", "timeweb", etc
"key": "qwen3.5:9b", // модель
"messages": [{"role": "user", "content": "..."}],
"options": {
"maxTokens": 1000,
"temperature": 0.7,
"stream": true
}
}
```
### POST /api/v1/embed
```json
{
"input": "Текст для эмбеддинга",
"model": "qwen3-embedding:0.6b"
}
```
### GET /api/v1/providers
Возвращает список доступных провайдеров с указанием tier.
---
## Ollama конфигурация
| Параметр | Значение |
|----------|----------|
| OLLAMA_NUM_PARALLEL | 4 |
| OLLAMA_MAX_LOADED_MODELS | 2 |
| OLLAMA_FLASH_ATTENTION | true |
| Модель генерации | qwen3.5:9b |
| Модель эмбеддингов | qwen3-embedding:0.6b |
## Пропускная способность
| Сценарий | Одновременно | RPM |
|----------|--------------|-----|
| Короткие ответы | 6-8 чел | ~40-60 |
| Средние ответы | 4-6 чел | ~20-30 |
| Эмбеддинги | 10+ чел | ~800+ |
---
## Файлы изменены
- `backend/cmd/llm-svc/main.go` — роутинг по тарифу, /embed endpoint
- `backend/internal/llm/ollama.go` — qwen3.5:9b, убран токен, GenerateEmbedding
- `backend/internal/llm/client.go` — убран OllamaToken
- `backend/deploy/k8s/ollama.yaml` — GPU + параллельность
- `backend/deploy/k8s/ollama-models.yaml` — без авторизации
---
## Сервер
- IP: 5.187.77.89
- GPU: RTX 4060 Ti 16GB
- Site: https://gooseek.ru