- docs/ARCHITECTURE.md (7 diagrame Mermaid) + architecture.html + diagrame originale (offer_diagram_1..7.png) - artefacte_lot1/imagini_docker: imagini pre-construite pt toate cele 13 module (la zi) - documentatie: Contract de furnizare nr.19 - optimizări deploy.sh/seed (MODELS_DIR, fix download python3); .gitignore (modele/.env/PV-uri excluse)
9.2 KiB
Livrabil LOT 1 — Sistem AI (DiDi / PNRR DIGI150)
Pachet de lucru pentru continuarea LOT 1 pe serverul cu inferență GPU. Conține
codul ai_platform (curățat), documentația de achiziție (caiet + ofertă) și
raportul de audit cod-vs-caiet-vs-ofertă.
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).
1. Structura pachetului
livrabil_lot1/
├── README_LIVRABIL.md ← acest fișier (handoff)
├── ai_platform/ ← codul LOT 1 (curățat: fără node_modules/.git/runs/cache)
│ ├── modules/<modul>/ ← fiecare modul: src/ tests/ deploy/ README.md API.md
│ ├── CLAUDE.md INDEX.md ← convenții + overview oficial
│ └── DEPLOYMENT.md bootstrap.sh
└── documentatie/
├── Caiet_de_sarcini.pdf
├── Propunere_tehnica.pdf / Lot1.pdf / LOT1_AI_Propunere_Tehnica.docx
└── AUDIT_LOT1.md ← audit complet pe module (citește-l pentru detalii)
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.
2. Ce este LOT 1 — harta modulelor (logica)
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 (+ stack-ul izolat
domain_check, 4 containere proprii, healthy). Toate cele 14 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 | 🟢 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 |
| domain_check (nou) | T4 — credibilitate sursă: WHOIS (vârstă/registrar), SSL, blacklist (DNSBL), DNS, IP-intel, HTTP + mail-intel → risk_score 0–100 + verdict. Flask+Celery+Postgres+Redis, izolat; consumat de backend pe domain-check-api:11000 |
🟢 livrat |
| cloak | Scraper SERP stealth (tier-3 fallback pt web) |
🟢 livrat |
Detalii complete per cerință: documentatie/AUDIT_LOT1.md.
3. Ce s-a remediat în această iterație (rezumat)
Toate validate rulând în container (mediul de build n-are python/GPU local).
- Extractor ML — modul nou
extractors(39 teste):/v1/metadata(EXIF, codec/bitrate via ffprobe, spectrogramă numpy, ELA, integritate/C2PA),/v1/sentiment+/v1/ocr(deleagă la gateway-ul LLM),/v1/ner(GLiNER, validat pe RO),/v1/detect(YOLOv8, validat real). - video-analysis — verdict aliniat: enum
UNCERTAIN,frames_analyzed+evidence[]; reparat bug pyproject (virgulă lipsă → modul neinstalabil). 7 teste. - dashboard — AI Monitoring (health agregat + cozi RabbitMQ + latențe Prometheus, fail-open), Catalog modele/extractoare DB-backed + CRUD, RBAC pe suprafața de citire + warning staging. 12 teste pe Postgres. Reparat 2 bug-uri reale (audit NOT NULL, Query default).
- llm-inference — model
qwen3.5+ alias,/v1/completions, fallback cascadă cross-backend, metrici Prometheus (latență/tokens/requests). 100 teste. Pinfastapi<0.116. - domain_check — modul nou (T4, credibilitate sursă): microserviciu Flask+Celery cu Postgres+Redis proprii (rulează izolat), analizează un domeniu (WHOIS/SSL/blacklist/DNS/IP/HTTP/mail-intel) și întoarce
risk_score0–100 + verdict. Expus pedidi-networkcadomain-check-api:11000, consumat de agent-v3 (Lot 2) pentru scorul de credibilitate a sursei. ContractPOST /api/v1/check/check. - Cache — reclasificat: acoperit la nivel de orchestrare (didi_brain + Redis backend), nu se construiește cache nou în LOT 1.
4. Cum se validează (fără a instala nimic local) — reț. Docker
Mediul de dezvoltare n-are python/uv/ffmpeg/GPU. Tot se rulează în container:
# Teste unui modul Python (în containerul lui de build):
cd ai_platform/modules/<modul>
docker run --rm -v "$PWD":/app -w /app python:3.11-slim \
bash -c "pip install -e '.[dev]' && pytest -q"
# Module cu model greu (extractors NER/YOLO): instalează extra-ul ml
# pip install -e '.[ml]' (trage torch — imagine mai mare)
# dashboard (are nevoie de Postgres): Postgres efemer în Docker
docker run -d --name pg --network <net> -e POSTGRES_PASSWORD=test -e POSTGRES_DB=test postgres:16-alpine
docker run --rm --network <net> -v "$PWD":/app -w /app \
-e TEST_DATABASE_URL="postgresql+asyncpg://postgres:test@pg:5432/test" \
python:3.11-slim bash -c "pip install -e '.[dev]' && pytest -q"
# frontend dashboard (Vite 7 cere Node 20+):
cd ai_platform/modules/dashboard/web
docker run --rm -v "$PWD":/app -w /app node:20-slim bash -c "npm ci && npx tsc -b --noEmit"
5. Stare deploy + ce mai e de făcut
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:
DASHBOARD_PROMETHEUS_URL,DASHBOARD_RABBITMQ_MGMT_URL(+ user/parolă). ScoateDASHBOARD_STAGING_MODEîn producție pentru a activa Keycloak/RBAC (în starea livrată dashboard rulează în STAGING MODE, cu auth bypassed).
5.3 Cod rămas deschis
- llm-inference — load/unload model (Task 4): vLLM nu suportă hot-swap 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.
- CI/CD: non-root pe Dockerfile-uri rămase, rollback + publish imagini AI în registry.
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 (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ă
Recomandat — stack complet single-host GPU (cărămidă cu cărămidă, gated):
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):
cd ai_platform/modules/<modul>/deploy
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 (web + dashboard): ai_platform/bootstrap.sh + DEPLOYMENT.md.
7. Pointere
- Audit complet pe cerințe (procente, file:line, ce lipsește):
documentatie/AUDIT_LOT1.md - Convenții cod + porturi:
ai_platform/CLAUDE.md - Overview module:
ai_platform/INDEX.md - Fiecare modul:
README.md+API.md+INDEX.mdpropriu.