P R O J E C T SC O N T A C T

[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

[FIG. 6] STACK & LINKS

PYTHONFASTAPIQDRANTQWEN3-EMBEDDING-8BBM25RRFCOHERE RERANKERGEMINI 2.5 FLASH (VISION)OPENROUTERNEXT.JSSHADCN/UIDOCKER COMPOSE
[RESTRICTED — CLIENT PROJECT]