By Sagar Shankaran, Founder of CallSphere
ColPali skips OCR entirely — it embeds page screenshots as 1024 patch vectors and beats BGE-M3 by 6-15 nDCG points on visual document tasks. Here is how OneRoof uses it for listing photos.
Key takeaways
TL;DR — Traditional document retrieval extracts text via OCR, then embeds. ColPali skips OCR — it embeds the image of each page as 1024 patch vectors via a vision-language model and uses ColBERT-style late interaction at query time. On ViDoRe, ColPali hits nDCG@5 of 0.813 vs 0.65–0.75 for BM25 and BGE-M3, with the largest gains on infographics, tables, and figures.
ColPali combines two ideas: PaliGemma (a small vision-language model) and ColBERT late interaction. Each page is split into a 32x32 grid (1024 patches), each patch is encoded into a 128-dim vector, so a page becomes a (1024, 128) matrix. At query time, the text query is tokenized into ~10–30 token vectors. Scoring uses MaxSim: for each query token, take the maximum dot product across all page patches; sum those.
Storage is the catch — 1024 vectors per page is 30–50x a single-vector dense index. Recent variants (HPC-ColPali, Light-ColPali, ColQwen2) compress patches via K-means or hierarchical clustering, dropping storage 4–10x with marginal accuracy loss.
flowchart LR
P[PDF page image] --> VLM[PaliGemma encoder]
VLM --> M[(1024 patch vectors)]
Q[Query text] --> T[Token vectors]
T --> S[MaxSim late interaction]
M --> S
S --> R[Top-K pages]
R --> A[Agent reasoning]
Index time: each PDF page is rendered to an image, fed through PaliGemma, and the patch embeddings are stored. No OCR, no chunking, no layout heuristics. Tables, charts, and stamped forms come out the same shape as plain text.
Query time: the query is tokenized into 10–30 sub-word vectors. For each, scan all patch vectors of each candidate page (or use HNSW-per-token for scale), take the max similarity. Sum across query tokens. The page with the highest sum wins. Late interaction = no early information loss = better match on visually-rich content.
OneRoof real estate uses ColPali for listing photos and floor plans: a buyer says "show me homes with a finished basement and a fenced yard," and ColPali matches against the actual photos and floor plan PDFs without any captioning step. UrackIT IT helpdesk uses ColPali for screenshot-based runbooks — when a user pastes an error dialog, the agent retrieves the relevant runbook page even if the runbook stores the answer in an annotated screenshot. Healthcare uses ColPali for scanned insurance ID cards and EOB forms.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
37 agents, 90+ tools, 115+ DB tables, 6 verticals. $149 / $499 / $1499, 14-day trial, 22% affiliate. The OneRoof bundle is on /industries/real-estate; the IT helpdesk on /industries/it-services.
from colpali_engine.models import ColPali, ColPaliProcessor
model = ColPali.from_pretrained("vidore/colpali-v1.2").eval().cuda()
proc = ColPaliProcessor.from_pretrained("vidore/colpali-v1.2")
def index_page(pil_image, doc_id):
batch = proc.process_images([pil_image]).to("cuda")
with torch.no_grad():
emb = model(**batch) # (1, num_patches, 128)
store_vectors(doc_id, emb.cpu().numpy()[0])
def query(text, candidates):
qb = proc.process_queries([text]).to("cuda")
with torch.no_grad():
qe = model(**qb) # (1, num_q_tokens, 128)
scores = []
for cand in candidates:
s = (qe[0] @ cand.T).max(dim=-1).values.sum().item()
scores.append((cand, s))
return sorted(scores, key=lambda x: -x[1])[:5]
Better than OCR + dense? On visual content, yes — by 6–15 nDCG points. On plain text, comparable.
ColPali or ColQwen2? ColQwen2 for multilingual or longer pages. ColPali for English-first English document corpora.
Does it support video? Yes — frame extraction + ColPali per frame works.
Storage cost? Use binary quantization (4-bit or 2-bit) to cut 8–16x with <2pp accuracy loss.
See it on /demo? OneRoof and IT helpdesk demos both showcase visual retrieval.
ColPali in 2026: Multi-Vector Visual Retrieval for Agents sounds like a single decision, but in production it splits into eval design, prompt cost, and observability. The deeper you push toward live traffic, the more those three pull against each other — better evals catch silent failures, prompt cost limits how often you can re-run them, and weak observability hides which retries are actually saving conversations versus burning latency budget.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
Production AI agents live or die on three loops: evals, retries, and handoff state. CallSphere runs 37 agents across 6 verticals, each with its own eval suite — synthetic call transcripts replayed nightly with assertion checks on extracted entities (date, time, party size, insurance, address). Without that loop, prompt regressions ship silently and you only find out when bookings drop.
Structured tools beat free-form text every time. Our 90+ function tools all enforce JSON schemas validated server-side; if the model hallucinates an integer where a string is required, we retry with a corrective system message before falling back to a deterministic path. For long-running flows, we treat agent handoffs as a state machine — booking → confirmation → SMS — so context survives turn boundaries.
The Realtime API vs. async decision usually comes down to "is the user holding the phone right now?" If yes, Realtime; if no (callback queue, after-hours voicemail), async wins on cost-per-conversation, which we track per agent in 115+ database tables spanning all 6 verticals.
How does this apply to a CallSphere pilot specifically? CallSphere runs 37 production agents and 90+ function tools across 115+ database tables in 6 verticals, so most workflows you'd want already have a template. For a topic like "ColPali in 2026: Multi-Vector Visual Retrieval for Agents", that means you're not starting from scratch — you're configuring an agent template that's already been hardened across thousands of conversations.
What does the typical first-week implementation look like? Day one is integration mapping (scheduler, CRM, messaging) and prompt tuning against your top 20 real call transcripts. Day two through five is shadow-mode running, where the agent transcribes and recommends but a human still answers, so you can compare side-by-side. Go-live is the moment your eval pass-rate clears your internal bar.
Where does this break down at scale? The honest answer: it scales until your tool catalog gets stale. The agent is only as good as the integrations it can actually call, so the operational discipline is keeping schemas, webhooks, and fallback paths green. The platform handles the rest — observability, retries, multi-region routing — without your team owning the GPU layer.
Want to see how this maps to your stack? Book a live walkthrough at calendly.com/sagar-callsphere/new-meeting, or try the vertical-specific demo at healthcare.callsphere.tech. 14-day trial, no credit card, pilot live in 3–5 business days.
Written by
Sagar Shankaran· Founder, CallSphere
Sagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
How you chunk decides what your RAG retrieves. The 2026 chunking strategies — recursive, semantic, late, contextual — benchmarked side-by-side.
Naive RAG retrieves wrong documents and answers from them confidently. The 2026 self-correcting RAG patterns that detect and fix bad retrievals.
Late-interaction retrievers like ColPali and Jina-ColBERT changed how RAG works on documents and images in 2026. The architecture and where it wins.
In agentic RAG the agent itself controls retrieval. The 2026 patterns and where they outperform classic retrieve-then-generate.
RRF is a one-line fusion trick that beats most learned re-rankers on real RAG workloads. Why it works and when ML re-rankers are still worth it.
Multi-hop questions break naive RAG. The 2026 retrieval patterns that handle 'who is the manager of the engineer who shipped Y' style questions.
© 2026 CallSphere LLC. All rights reserved.