Grounded answers over my data
A rag application stack.
RAG application · 100,000 req/mo. At the default case — 100k requests a month, no further constraints — drawn from the 112 tools already in the index. Each pick is a tool whose own skip-when is stated, because a stack built on tools it does not know how to overcommit to is a guess.
This is the default case, stated as such. Describe your case to change it — the recommendation recomputes, and anything it assumes comes back in the answer rather than staying silent.
The picks
Routing — Bifrost
WorkableA high-throughput OpenAI-compatible proxy with a small footprint.
Watch out: You need the breadth of a full routing stack.
Consider Cloudflare AI Gateway instead when edge caching and latency dominate, on Cloudflare already
Retrieval — Elasticsearch
Strong fitOne index carrying BM25 and dense vectors, with ranking you can tune.
Watch out: You need a permissive licence — the Elastic licence is not OSI-approved.
Consider pgvector instead when under a few million vectors, or when retrieval joins rows you already have
Inference — KoboldCpp
WorkableLocal generation with a UI tuned for interactive, long-form use.
Watch out: You need headless serving at scale.
Consider llama.cpp instead when the constraint is hardware, not throughput — no GPU, or an edge box
Prompts — Agenta
Strong fitOpen-source prompt management with a playground and versioning.
Watch out: You need eval depth rather than prompt ergonomics.
Consider DSPy instead when compiling prompts into optimised programs from labelled examples
Evals — Arize Phoenix
WorkableOpenTelemetry-native evaluation you can run yourself.
Watch out: You want a vendor support contract behind it.
Consider Braintrust instead when making evaluation, rather than tracing, the primary workflow
The costs and the risks
- Estimated cost
- $40–$238 per month — a heuristic band from query volume, not a vendor quote.
- Confidence
- 87% — lower when constraints narrow the field.
- Cost drivers
- Elasticsearch
Biggest risk at the default case: Retrieval quality decides the outcome — most failures are ranking or chunking failures, not model failures. Build the eval set before tuning anything.
A starting point, not a prescription. The recommendation at the default case is what the engine would tell a stranger with your workload; the recommendation at *your* case is what it tells you once it knows the constraints. The Stack Builder holds both — the builder link preselects this workload and starts with your volumes from here.