Krasiva AI
A private, on-premises assistant for CRM questions and job paperwork
Problem
The office needed fast answers from the CRM and from job paperwork and manuals without sending customer data to a cloud AI service. An earlier version, which I audited, was not accurate or fast enough for everyday office questions.
Approach
FastAPI backend and a Next.js 16 chat UI. Ollama runs Qwen 3.5 9B, chosen by an A/B test on my own question sets, plus nomic-embed-text for embeddings. CRM questions go through read-only typed tools and a deterministic router, limited to an allowlist of tables and columns. Documents go through hybrid search, embedded Qdrant vectors plus SQLite FTS5 keyword search, with docling-parse, pypdfium2 and Tesseract for text and OCR. Staff sign-in and network checks protect it on the office network, and a dependency gate blocks GPL and AGPL code. Golden and blind held-out question sets measure accuracy.
Process
3 dated steps, from the project’s history
-
Platform, tools, search and chat
Model profiles and a GPU queue, a read-only CRM data layer, typed tools behind a deterministic router with evals, hybrid retrieval with citations, ingestion with an OCR gate and redaction, and a streaming chat UI.
-
Model A/B and wider coverage
Switched the default model to qwen3.5:9b after an eval A/B, replaced PyMuPDF because of its AGPL terms, and added a canvassing-map tool, CRM report tools and a 156-item eval set.
-
Photo library pilot
Indexed company photos in place and linked them to CRM jobs. That work then moved into the CRM's own photo service.
Results
I rebuilt it and re-ran the same audit of real office questions, plus held-out test sets I had not tuned against. Accuracy and document answer times both improved substantially.
Lesson
The model was picked by running my own question sets against the candidates, not by reputation, and the held-out sets keep the scores honest because nothing was tuned against them.