Rebuild the backend on Qdrant Cloud Inference, drop Railway - #1
Rebuild the backend on Qdrant Cloud Inference, drop Railway#1John Kupchanko | Qdrant (jkupchanko) wants to merge 2 commits into
Conversation
Railway existed only so the backend could load UniXcoder and embed the query itself. Qdrant Cloud Inference does that inside the cluster, so the query goes out as text and comes back ranked, and the backend is three TypeScript functions with no dependencies in the same Vercel project as the frontend. Gone with it: the Dockerfile, docker-compose.yaml, railway.json, requirements.txt and the whole code_search package. UniXcoder is not in the Cloud Inference catalog and cannot be added, so this forced replacing the encoder. bench/bakeoff.py scores ten configurations through the real production path; mxbai-embed-large-v1 with BM25 fused by RRF won. SPLADE matches BM25 on docstring queries, loses on paraphrases and runs three times slower. DBSF fusion was tried and rejected. One fix is unrelated to the migration and is the largest single win here. The merge step sorted results by how many overlapping snippet ranges each one had, so a result with two highlighted ranges outranked the actual best match with none. Removing that took docstring recall@1 from 0.620 to 0.887. It is inherited behaviour: measured directly the old demo's own search scores 0.730 while its deployment returns 0.567. Against the previous deployment on the same 413 queries: docstring recall@1 0.567 to 0.883, MRR 0.713 to 0.928, p50 178ms to 148ms, cold start 2033ms to 775ms. p95 is worse, 186ms to 205ms, and 46ms of that spread is the dense model's inference call against 1.4ms for the BM25 leg. The frontend is unchanged apart from wording that named the old encoders. The CSS file is byte-identical, the per-result JSON keys are identical, and the corpus and indexed commit are the same, so every result link resolves to the same code.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
kanungle (kanungle)
left a comment
There was a problem hiding this comment.
I approved but this needs to be deployed on code-search.demos.qdrant.tech
|
It looks like you have unsupported packages in your build |
|
I just noticed this repo is in |
Six deprecation warnings in the Vercel build log and eight npm audit vulnerabilities, several high. Inherited, but visible to anyone reading a build. eslint 8 is end of life and pulled in five of the six deprecations, so this moves to eslint 10 and flat config. vite 5 to 8, react-router-dom 6 to 7, postcss-preset-mantine 1.6 to 1.18. @mantine/core stays at 7.1.0 because it renders the approved design. Zero deprecations on a clean install, zero vulnerabilities. The newer react-hooks plugin flagged two real patterns, both fixed rather than silenced: useTypewriter set state synchronously in an effect, and the search field built its Enter handler during render. Build, lint, typecheck and tests pass, the page renders unchanged, and Enter still runs a search.
|
PREVIEW: https://demo-code-search-git-cloud-inference-qdrant.vercel.app Both are sorted. Deprecated packages are fixed, with 0 deprecated and 0 vulnerabilities now.
The repos are in sync and the preview is building successfully. Can you merge when you get a chance? Production only builds from master, so that's what lets me attach code-search.demos.qdrant.tech. |
|
Moved to qdrant#35 per your comment. Closing this one. |
Demo: https://demo-code-search-cloud.vercel.app
Quick update on the rebuild. Same demo, tuned underneath.
Removed: Railway, UniXcoder
Running on: Qdrant Cloud + Vercel, nothing else
Encoder: mxbai-embed-large-v1 + BM25, fused with RRF
Recall@1: 0.567 → 0.883
MRR: 0.713 → 0.928
p50: 178ms → 148ms
Cold start: 2033ms → 775ms
p95: 186ms → 205ms, the one that got worse
Take a look when you have a chance.