[01]
TRAINER SEMANTIC SEARCH
█ TIER A · YEAR 2026 · STATUS: LIVE · LANGUAGES: PYTHON / TYPESCRIPT
Semantic trainer search: hybrid RAG + business ranking
[FIG. 1] MISSION
A semantic trainer search over merged data (CVs + training scopes). A vision-LLM (Gemini 2.5 Flash) reads scans and sheets → one JSON profile per trainer → two vectors: dense (Qwen3-Embedding-8B, 4096D) for meaning and sparse (BM25) for acronyms (ITIL, NIS2, GDPR). Layer A does recall: dense+sparse → RRF fusion → Cohere reranker. Layer B re-orders on business signals (Asseco collaboration > topic > years) with configurable weights. Quality is measured with a golden set (`eval.py`) and a model benchmark; PII stays out of the repo with a dedicated RODO.md. Python/FastAPI + Qdrant + Next.js, docker-compose.
[FIG. 2] ARCHITECTURE
hover a block to see its description
[FIG. 2A] LIVE RANKING
- 01TRAINER M-311CLOUD · AZURE ARCH88%
- 02TRAINER A-042DEVOPS · TERRAFORM83%
- 03TRAINER K-107KUBERNETES · CKA · 6 LAT71%
- 04TRAINER T-023K8S · ASSECO ×366%
- 05TRAINER B-559NIS2 · AUDYT · ITIL45%
→ dense vector alone — gets meaning, loses acronyms
[FIG. 3] CHALLENGES
[+][CH-01]
Acronyms vs meaning — a dense+sparse hybrid (BM25 catches 'NIS2', dense links 'assertiveness' to 'communication'), RRF fusion and a Cohere reranker on top.
[+][CH-02]
Business signals kept out of recall — a separate ranking layer with configurable weights so 'who works with Asseco' doesn't pollute the semantic vector.
[+][CH-03]
Dirty mixed input — vision-OCR for scanned PDFs, a single LLM call into a consistent JSON profile, incremental content-hash ingestion.
[FIG. 4] AI LAYER
Semantic trainer search: hybrid RAG + business ranking
[FIG. 5] GALLERY
SCREENSHOTS INCOMING — see SHOTS-WANTED