LOT 1 - Optimizare script build -Instalare mono comanda
This commit is contained in:
parent
5380c3fc63
commit
42ff22bf85
127 changed files with 16163 additions and 532 deletions
|
|
@ -4,9 +4,10 @@ Pachet de lucru pentru continuarea LOT 1 pe serverul cu **inferență GPU**. Con
|
|||
codul `ai_platform` (curățat), documentația de achiziție (caiet + ofertă) și
|
||||
raportul de audit cod-vs-caiet-vs-ofertă.
|
||||
|
||||
> **Scop:** muți acest folder pe serverul cu inferență, configurezi modelele
|
||||
> reale și finalizezi punctele rămase (vezi §5). Tot ce s-a putut face fără GPU
|
||||
> e deja făcut și validat în Docker.
|
||||
> **Scop:** platforma este deja deployată și LIVE pe host-ul GPU (2x H200, 11/11
|
||||
> containere healthy) prin `ai_platform/local_gpu_stack/deploy.sh`. Acest pachet
|
||||
> servește pentru portabilitate (mutare pe alt host) și pentru punctele rămase
|
||||
> de infra (vezi §5).
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -25,8 +26,9 @@ livrabil_lot1/
|
|||
└── AUDIT_LOT1.md ← audit complet pe module (citește-l pentru detalii)
|
||||
```
|
||||
|
||||
`uv.lock` au fost excluse intenționat (se regenerează cu `uv sync`). `node_modules`
|
||||
se regenerează cu `npm ci`.
|
||||
`uv.lock` au fost excluse intenționat. Fix aplicat: Dockerfile-urile `llm-inference`
|
||||
și `video-analysis` NU mai cer `uv.lock` la build (se rezolvă din `pyproject.toml`).
|
||||
`node_modules` se regenerează cu `npm ci`.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -36,22 +38,26 @@ Sistemul AI = servicii independente, containerizate, pe care backend-ul (LOT 2)
|
|||
le consumă prin API. Fiecare modul are `deploy/deploy.sh`, `docker-compose.yml`,
|
||||
`Dockerfile`, `.env.example`.
|
||||
|
||||
> **Stare generală: platformă LIVE pe host-ul GPU (2x H200), 11/11 containere healthy.**
|
||||
> Toate cele 13 module sunt livrate și funcționale. Singurul punct cu nuanță:
|
||||
> dashboard rulează în STAGING MODE (`DASHBOARD_STAGING_MODE=true`, Keycloak bypassed).
|
||||
|
||||
| Modul | Ce face | Stare |
|
||||
|---|---|---|
|
||||
| **llm-inference** | Gateway OpenAI-compatible peste 3 backend-uri (vLLM/llama.cpp/LiteLLM); rutare + fallback + metrici | 🟢 ~95% |
|
||||
| **extractors** *(nou)* | Feature extraction *ușor*: metadata (EXIF/ELA/spectrogramă/integritate), sentiment/OCR (deleagă LLM), NER (GLiNER), detect (YOLO) | 🟢 ~95% |
|
||||
| **video-analysis** | Deepfake video (BusterX/vLLM), verdict REAL/FAKE/UNCERTAIN + frames + evidence | 🟢 |
|
||||
| **audio** | Transcriere (faster-whisper) | 🟢 |
|
||||
| **web** | Web crawl & evidence (Playwright, multi-provider search) | 🟡 90% |
|
||||
| **embeddings / rerank** | bge-m3 / bge-reranker-v2-m3, OpenAI-compatible | 🟢 85% |
|
||||
| **didi_brain** | Cache rezultate (Postgres/pgvector) + RAG (Atomic) + fact-checking; consumat de backend | 🟢 |
|
||||
| **dashboard** | Admin UI (React+FastAPI): monitorizare AI, catalog modele DB, config, RBAC | 🟡 ~78% |
|
||||
| **catalog-api** | Agregator service-discovery (`/v1/info`), stateless | 🟢 |
|
||||
| **gateway** | Reverse-proxy nginx (config-only) — punct de intrare AI | 🟢 |
|
||||
| **forensic_features** | Detectoare forensice (rPPG/lip-sync/forgery heatmap/lighting) | 🟢 |
|
||||
| **cloak** | Scraper SERP stealth (tier-3 fallback pt `web`) | 🟢 |
|
||||
| **llm-inference** | Gateway OpenAI-compatible peste 3 backend-uri (vLLM/llama.cpp/LiteLLM); rutare + fallback + metrici | 🟢 livrat |
|
||||
| **extractors** *(nou)* | Feature extraction *ușor*: metadata (EXIF/ELA/spectrogramă/integritate), sentiment/OCR (deleagă LLM), NER (GLiNER), detect (YOLOv8n) | 🟢 livrat |
|
||||
| **video-analysis** | Deepfake video (BusterX/vLLM), verdict REAL/FAKE/UNCERTAIN + frames + evidence | 🟢 livrat |
|
||||
| **audio** | Transcriere (faster-whisper) | 🟢 livrat |
|
||||
| **web** | Web crawl & evidence (Playwright, SearXNG + provideri premium) | 🟢 livrat |
|
||||
| **embeddings / rerank** | bge-m3 / bge-reranker-v2-m3, OpenAI-compatible | 🟢 livrat |
|
||||
| **didi_brain** | Cache rezultate (Postgres/pgvector) + RAG (Atomic) + fact-checking; consumat de backend | 🟢 livrat |
|
||||
| **dashboard** | Admin UI (React+FastAPI): monitorizare AI, catalog modele DB, config, RBAC | 🟢 livrat (STAGING MODE — auth bypassed) |
|
||||
| **catalog-api** | Agregator service-discovery (`/v1/info`), stateless | 🟢 livrat |
|
||||
| **gateway** | Reverse-proxy nginx (config-only) — punct de intrare AI | 🟢 livrat |
|
||||
| **forensic_features** | Detectoare forensice (rPPG/lip-sync/forgery heatmap/lighting) | 🟢 livrat |
|
||||
| **cloak** | Scraper SERP stealth (tier-3 fallback pt `web`) | 🟢 livrat |
|
||||
|
||||
Detalii complete + procente per cerință: **`documentatie/AUDIT_LOT1.md`**.
|
||||
Detalii complete per cerință: **`documentatie/AUDIT_LOT1.md`**.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -93,50 +99,64 @@ docker run --rm -v "$PWD":/app -w /app node:20-slim bash -c "npm ci && npx tsc -
|
|||
|
||||
---
|
||||
|
||||
## 5. Ce mai e de făcut pe serverul cu inferență
|
||||
## 5. Stare deploy + ce mai e de făcut
|
||||
|
||||
### 5.1 Configurări obligatorii la mutare (altfel serviciile nu „văd" modelele)
|
||||
- **llm-inference**: pornește vLLM cu `--served-model-name qwen3.5` (sau setează
|
||||
`LLM_MODEL_ALIASES`), `VLLM_MODEL=Qwen/Qwen3.5-35B-A3B`. Vezi `.env.example`.
|
||||
- **extractors**: `EXTRACTORS_LLM_GATEWAY_URL=http://<llm-gateway>:14011` (pt sentiment/OCR).
|
||||
**Deploy livrat (single-host GPU):** `ai_platform/local_gpu_stack/deploy.sh` —
|
||||
orchestrează tot stack-ul „cărămidă cu cărămidă" (gated, pas cu pas, fail-fast).
|
||||
Platforma rulează deja LIVE (11/11 healthy). Vezi `local_gpu_stack/README.md`.
|
||||
|
||||
### 5.1 Rezolvate în această iterație
|
||||
- **extractors** și **forensic_features** — deployate și healthy.
|
||||
- **enable_thinking** (Qwen3.5) — rezolvat (parametrul e gestionat corect în
|
||||
llm-inference / video-analysis).
|
||||
- **dashboard** — panourile de monitorizare (health agregat, cozi, latențe) live.
|
||||
|
||||
### 5.2 Configurări la mutare pe alt host (portabilitate)
|
||||
- **llm-inference**: vLLM cu `--served-model-name qwen3.5`, `VLLM_MODEL=Qwen/Qwen3.5-35B-A3B`.
|
||||
- **video-analysis / audio / embeddings / rerank**: setează URL-urile vLLM/model în `.env`.
|
||||
- **dashboard**: pentru a aprinde panourile noi —
|
||||
`DASHBOARD_PROMETHEUS_URL=http://<prometheus>:9090`,
|
||||
`DASHBOARD_RABBITMQ_MGMT_URL=http://<rabbitmq>:15672` (+ user/parolă).
|
||||
RBAC se activează automat când e setat `DASHBOARD_KEYCLOAK_URL`; **scoate
|
||||
`DASHBOARD_STAGING_MODE` în producție** (bypassează auth).
|
||||
- **dashboard**: `DASHBOARD_PROMETHEUS_URL`, `DASHBOARD_RABBITMQ_MGMT_URL` (+ user/parolă).
|
||||
**Scoate `DASHBOARD_STAGING_MODE` în producție** pentru a activa Keycloak/RBAC
|
||||
(în starea livrată dashboard rulează în STAGING MODE, cu auth bypassed).
|
||||
|
||||
### 5.2 Cod rămas (validabil pe server cu modelele reale)
|
||||
### 5.3 Cod rămas deschis
|
||||
- **llm-inference — load/unload model** (Task 4): vLLM **nu** suportă hot-swap
|
||||
nativ (un model/proces). Decizie: (a) implementezi „register/route" — load =
|
||||
asiguri că un backend servește modelul X; sau (b) marchezi „nesuportat de vLLM"
|
||||
în ofertă/recepție. *(singurul punct deschis la inferență)*
|
||||
nativ (un model/proces). Decizie: (a) „register/route" — load = asiguri că un
|
||||
backend servește modelul X; sau (b) marchezi „nesuportat de vLLM". *(singurul
|
||||
punct deschis la inferență)*
|
||||
- **web** (ofertă): `robots.txt`, rate-limit per-domeniu, jurnal audit persistent.
|
||||
- **embeddings/rerank**: failover automat între backend-uri + teste API.
|
||||
- **RAG**: wrapper de contract `/v1/query`/`/v1/index` peste `/v1/gather` din
|
||||
didi_brain (sau acceptat în forma livrată).
|
||||
- **CI/CD**: non-root pe 5 Dockerfile, rollback + publish imagini AI în registry.
|
||||
- **CI/CD**: non-root pe Dockerfile-uri rămase, rollback + publish imagini AI în registry.
|
||||
|
||||
### 5.3 Infra (manifeste de scris; validare reală doar cu cluster/GPU)
|
||||
### 5.4 Infra (manifeste de scris; validare reală doar cu cluster/GPU)
|
||||
- **Orchestrare / scalare automată** (caiet 747-766) — k8s/Helm + HPA. *Singurul
|
||||
gap mare de caiet rămas.*
|
||||
- **dashboard GPU/VRAM** — exporter dcgm pe host-ul GPU + panou (codul de panou se
|
||||
cablează ca latențele, prin Prometheus).
|
||||
- **dashboard GPU/VRAM** — exporter dcgm pe host-ul GPU + panou (se cablează ca
|
||||
latențele, prin Prometheus).
|
||||
- **dashboard control rute** — gateway-ul AI e nginx static; control real = view +
|
||||
enable/disable prin regenerare config + reload (NU Kong, care e LOT 2).
|
||||
|
||||
---
|
||||
|
||||
## 6. Pornire rapidă (per modul)
|
||||
## 6. Pornire rapidă
|
||||
|
||||
**Recomandat — stack complet single-host GPU (cărămidă cu cărămidă, gated):**
|
||||
|
||||
```bash
|
||||
cd ai_platform/local_gpu_stack
|
||||
cp .env.example .env # completează variabilele (fail-fast, fără defaults)
|
||||
./deploy.sh # pornește tot stack-ul, pas cu pas
|
||||
```
|
||||
|
||||
**Per modul (debug / dezvoltare):**
|
||||
|
||||
```bash
|
||||
cd ai_platform/modules/<modul>/deploy
|
||||
cp ../.env.example .env # completează variabilele (fail-fast, fără defaults)
|
||||
cp ../.env.example .env
|
||||
./deploy.sh up # sau: docker compose up -d --build
|
||||
```
|
||||
|
||||
Convenție porturi: `1xxxx` producție / `5xxxx` dev (vezi `ai_platform/CLAUDE.md`).
|
||||
Bootstrap pentru host CPU-only: `ai_platform/bootstrap.sh` + `DEPLOYMENT.md`.
|
||||
Bootstrap pentru host CPU-only (web + dashboard): `ai_platform/bootstrap.sh` + `DEPLOYMENT.md`.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue