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)
This commit is contained in:
parent
aec19e00bc
commit
af0ec4a150
41 changed files with 473 additions and 1551 deletions
171
ai_platform/docs/architecture.html
Normal file
171
ai_platform/docs/architecture.html
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
<!doctype html><html lang="ro"><head><meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>DiDi LOT 1 — Arhitectură și fluxuri</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
||||
<style>body{font-family:Segoe UI,Arial,sans-serif;margin:0;background:#f5f6f8;color:#1f3a5f}
|
||||
header{background:#1f3a5f;color:#fff;padding:18px 28px}header h1{margin:0;font-size:20px}
|
||||
.wrap{max-width:1100px;margin:0 auto;padding:24px}
|
||||
section{background:#fff;border:1px solid #e2e5ea;border-radius:10px;padding:18px 22px;margin:18px 0;box-shadow:0 1px 3px rgba(0,0,0,.06)}
|
||||
h2{font-size:16px;color:#1f3a5f;border-bottom:2px solid #eef0f3;padding-bottom:8px}
|
||||
.mermaid{text-align:center}footer{color:#888;font-size:12px;text-align:center;padding:20px}</style></head><body>
|
||||
<header><h1>DiDi — LOT 1 · Arhitectură și fluxuri (Sistem de Inteligență Artificială)</h1></header><div class="wrap">
|
||||
<section><h2>1. Arhitectură de ansamblu — componente (control plane vs execution plane)</h2><div class="mermaid">flowchart LR
|
||||
subgraph LOT1["LOT 1 — Platforma AI"]
|
||||
subgraph M4["Modul 4 — Cache"]
|
||||
redis["Redis / cache distribuit<br/>rezultate · locks · pub/sub · rate-limit"]
|
||||
end
|
||||
subgraph M1["Modul 1 — Inferență LLM"]
|
||||
gw["LLM Gateway (FastAPI)"]
|
||||
vllm["vLLM — Qwen3.5 (GPU)"]
|
||||
llama["llama.cpp (CPU, fallback)"]
|
||||
end
|
||||
subgraph M6["Modul 6 — Dashboard Admin AI"]
|
||||
dash["Dashboard Admin<br/>monitorizare · metrici GPU · stare servicii"]
|
||||
end
|
||||
subgraph M5["Modul 5 — RAG / Brain"]
|
||||
rag["RAG Service"]
|
||||
emb["Embeddings API"]
|
||||
vs["Vector Store (pgvector)"]
|
||||
rr["Rerank API"]
|
||||
end
|
||||
subgraph M3["Modul 3 — Web Crawl"]
|
||||
web["Web Crawl API<br/>căutare · content extraction"]
|
||||
end
|
||||
subgraph M2["Modul 2 — Extractoare ML"]
|
||||
whisper["Whisper API<br/>transcriere audio"]
|
||||
video["Video Analysis API<br/>ffmpeg + frame sampling"]
|
||||
buster["BusterX (vLLM)<br/>deepfake detection"]
|
||||
sandbox["Sandbox Cod<br/>EXIF · ELA · spectrograme"]
|
||||
end
|
||||
end
|
||||
subgraph LOT2["LOT 2 — Backend (consumator API REST)"]
|
||||
orch["Orchestrator"]
|
||||
workers["Workers Analiză"]
|
||||
end
|
||||
|
||||
gw --> vllm
|
||||
gw -. fallback .-> llama
|
||||
rag --> emb
|
||||
rag --> vs
|
||||
rag --> rr
|
||||
video --> buster
|
||||
|
||||
workers -->|POST /v1/chat/completions| gw
|
||||
workers -->|POST /v1/audio/transcriptions| whisper
|
||||
workers -->|POST /analyze/video| video
|
||||
workers -->|POST /v1/gather| web
|
||||
workers -->|POST /v1/query| rag
|
||||
workers -->|POST /analyze| sandbox
|
||||
orch --- workers
|
||||
|
||||
redis -. cache .-> gw
|
||||
redis -. cache .-> rag</div></section>
|
||||
<section><h2>2. Flux inferență LLM — cache + fallback multi-backend</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant G as LLM Gateway (FastAPI)
|
||||
participant V as vLLM Qwen3.5
|
||||
participant L as llama.cpp (fallback)
|
||||
|
||||
B->>G: POST /v1/chat/completions {model, messages[], temperature}
|
||||
G->>G: Verificare cache
|
||||
alt Cache hit
|
||||
G-->>B: 200 {cached response}
|
||||
else Cache miss
|
||||
G->>V: Forward request
|
||||
alt vLLM disponibil
|
||||
V->>V: Generare răspuns (GPU)
|
||||
V-->>G: 200 {response, usage}
|
||||
else vLLM indisponibil
|
||||
G->>L: Fallback request
|
||||
L->>L: Generare răspuns (CPU)
|
||||
L-->>G: 200 {response, usage}
|
||||
end
|
||||
G->>G: Stocare în cache
|
||||
G-->>B: 200 {response, usage, model_used}
|
||||
end</div></section>
|
||||
<section><h2>3. Flux multimodal (text + imagine) — viziune / OCR / artefacte AI</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant G as LLM Gateway (FastAPI)
|
||||
participant V as vLLM Qwen3.5
|
||||
|
||||
B->>G: POST /v1/chat/completions {messages:[{user, [text, image_url]}]}
|
||||
G->>V: Forward multimodal request
|
||||
V->>V: Procesare imagine + text (GPU)
|
||||
V->>V: OCR, descriere, detecție artefacte AI
|
||||
V-->>G: 200 {response: structured JSON}
|
||||
Note over G: Răspuns structurat: description, ocr_text, ai_artifacts, anomalies
|
||||
G-->>B: 200 {response, model_used}</div></section>
|
||||
<section><h2>4. Flux analiză video — detecție deepfake (BusterX)</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant VA as Video Analysis API
|
||||
participant F as ffmpeg
|
||||
participant BX as BusterX (vLLM)
|
||||
|
||||
B->>VA: POST /analyze/video {video_url}
|
||||
VA->>VA: Download video
|
||||
VA->>F: Extragere cadre (frame sampling configurabil)
|
||||
F-->>VA: Cadre extrase (N imagini)
|
||||
loop Pentru fiecare cadru
|
||||
VA->>BX: POST analiză cadru
|
||||
BX->>BX: Detecție artefacte deepfake
|
||||
BX-->>VA: {score, artifacts, confidence}
|
||||
end
|
||||
VA->>VA: Agregare scoruri per cadru
|
||||
VA->>VA: Calculare verdict final
|
||||
VA-->>B: 200 {verdict, score, evidence_frames, analysis_details}</div></section>
|
||||
<section><h2>5. Flux RAG — interogare bază de cunoștințe</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant R as RAG Service
|
||||
participant E as Embeddings API
|
||||
participant VS as Vector Store
|
||||
participant RR as Rerank API
|
||||
|
||||
B->>R: POST /v1/query {query, top_k, filters}
|
||||
R->>E: Embedding query text
|
||||
E-->>R: Vector embedding
|
||||
R->>VS: Nearest neighbor search {vector, top_k: 20}
|
||||
VS-->>R: Documente candidat (cu scoruri similaritate)
|
||||
R->>RR: Reranking documente {query, documents}
|
||||
RR-->>R: Documente reordonate (scoruri relevanță)
|
||||
R->>R: Filtrare top_k final
|
||||
R-->>B: 200 {documents:[{text, score, source, metadata}]}</div></section>
|
||||
<section><h2>6. Flux Web Crawl — colectare evidence</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant W as Web Crawl API
|
||||
participant S as Motor căutare (SearXNG / provideri)
|
||||
participant P as Pagini Web
|
||||
|
||||
B->>W: POST /v1/gather {claim, max_sources}
|
||||
W->>S: Căutare web {query: claim}
|
||||
S-->>W: Rezultate căutare (URLs + snippets)
|
||||
loop Pentru fiecare URL relevant
|
||||
W->>P: Fetch pagină
|
||||
P-->>W: Conținut HTML
|
||||
W->>W: Extragere conținut structurat (text, metadate, autor, dată)
|
||||
end
|
||||
W->>W: Structurare evidence package
|
||||
W-->>B: 200 {sources:[{url, title, content, snippet, date, credibility_indicators}]}</div></section>
|
||||
<section><h2>7. Flux Sandbox — analiză media (EXIF / ELA / spectrogramă / cadre)</h2><div class="mermaid">sequenceDiagram
|
||||
participant B as Backend (LOT 2)
|
||||
participant SB as Sandbox API
|
||||
participant PY as Python Runtime (izolat)
|
||||
|
||||
B->>SB: POST /analyze {media_url, analysis_type}
|
||||
SB->>SB: Download fișier media (stocare temporară)
|
||||
alt Imagine
|
||||
SB->>PY: Execuție EXIF extraction
|
||||
PY-->>SB: Metadata EXIF
|
||||
SB->>PY: Execuție Error Level Analysis
|
||||
PY-->>SB: Rezultat ELA
|
||||
else Audio
|
||||
SB->>PY: Execuție spectrogramă
|
||||
PY-->>SB: Analiză spectrogramă
|
||||
else Video
|
||||
SB->>PY: Execuție frame analysis
|
||||
PY-->>SB: Semnături digitale + anomalii
|
||||
end
|
||||
SB->>SB: Cleanup fișiere temporare
|
||||
SB-->>B: 200 {metadata, anomalies, signatures, analysis_type}
|
||||
Note over SB: Sandbox: izolare completă, timeout, restricții resurse, audit</div></section>
|
||||
<footer>Generat din ARCHITECTURE.md · diagrame Mermaid · Anexa A — Propunere Tehnică LOT 1</footer></div>
|
||||
<script>mermaid.initialize({startOnLoad:true, theme:"neutral", securityLevel:"loose"});</script></body></html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue