didi-lot1-ai/README_LIVRABIL.md
EVOTECH IT SRL af0ec4a150 Arhitectură (diagrame) + imagini Docker module + contract furnizare + optimizări deploy
- 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)
2026-06-29 16:23:03 +03:00

9.2 KiB
Raw Permalink Blame History

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 0100 + 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.
  • dashboardAI 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. Pin fastapi<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_score 0100 + verdict. Expus pe didi-network ca domain-check-api:11000, consumat de agent-v3 (Lot 2) pentru scorul de credibilitate a sursei. Contract POST /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ă). Scoate DASHBOARD_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.md propriu.