Product

Ask Your Restaurant Data: We Built an AI Assistant That Doesn't Hallucinate

Ordering.Tools now ships a conversational AI assistant inside the admin panel. Type a business question in plain English, Bulgarian, or Greek — get a charted, numerically-correct answer in seconds. Here's how we built it without the usual AI failure modes.

Ordering.ToolsApril 26, 20266 min read
Restaurant operator looking at analytics on a laptop

Most restaurant operators don't open the analytics dashboard. They open it once, click around, can't find what they wanted, and close the tab. The numbers are in there — they just take too long to dig out. So decisions get made on gut feel and yesterday's number, not on what actually happened last week.

We've been thinking about this for a while. The fix isn't a better dashboard. It's no dashboard. You should be able to type the question — "what were my top 5 items last weekend vs the previous one?" — and get the answer. Today we're shipping that as a feature inside Ordering.Tools, included on every paid plan.

What it actually does

There's a chat box at /admin/ask in the admin panel. You type a question in plain English, Bulgarian, or Greek. The assistant figures out which analytics tool to call, runs it against your live bills and orders, and writes a short answer with a chart underneath. Examples that work today:

  • "What was my revenue this week vs last week?" — returns a comparison with absolute and percent deltas
  • "Top 5 items by revenue this month" — ranked product breakdown with a bar chart
  • "Why was Tuesday slow?" — pulls period comparison + busiest-hours breakdown to triangulate
  • "How does pickup compare to delivery this month?" — order-type breakdown with shares
  • "Customers who haven't ordered in 60 days" — segment list with PII redacted
  • "Show me the most cancelled hours this week" — hourly cancellation heatmap

Answers stream in as the model writes them. Tool indicators show which analytics function is running — so you see "running compare_periods…" then "checking busiest_hours…" before the prose answer arrives. Charts render inline using the same library the dashboard already uses.

The hard part: numerical correctness

Most "AI for business" tools we tried in the past hallucinate numbers. Ask "what was my revenue?" and the model confidently invents €4,200. The dashboard says €3,851. Now you have a worse problem than before — a tool that produces plausible wrong answers.

We went a different direction. The AI never computes totals. It composes calls to our analytics layer, and our analytics layer does the math. The model only narrates the result. If the dashboard says €3,851, the chat says €3,851 — exactly the same number, because both came from the same query against your bills.

Concretely: when you ask "compare this week vs last week," the model emits a tool call to compare_periods(metric=revenue, period_a, period_b). Our server runs the comparison server-side and returns { a_value, b_value, abs_delta, pct_delta }. The model only writes the sentence around those numbers. There is no path where the model is asked to subtract or divide anything.

If we don't have a tool for the question, the assistant says so plainly. No fake confidence. No invented averages. No "approximately around" fudging.

What goes to the AI provider, and what doesn't

This was the second thing we wanted to get right. Restaurant data has real privacy weight — customer emails, phone numbers, addresses, allergy notes. We don't want any of that leaking into a third-party context.

What goes out: the operator's question (the literal text typed into the chat), a venue context block (name, currency, timezone, language preferences), descriptions of available analytics tools, and aggregated tool results — counts, totals, named-only segments. Customer-bearing tool results are run through a redactor first: emails become hashes, phone numbers keep only the last four digits, names get initialised ("Maria K."). Customer IDs stay so you can look up the full record in the admin panel under your own access controls.

What stays inside our infrastructure: raw orders, full bills, customer addresses, payment metadata, allergy notes, the entire database schema. The AI never sees Prisma. It never writes SQL. It never has the option to "browse" rows. The tools are typed TypeScript functions with bounded outputs — anything else is impossible by construction.

Three tiers, including a real free one

Pricing was straightforward to figure out. The model itself is cheap when used carefully (tool-use + prompt caching keeps per-question cost in cents, not dollars). So we don't need to charge separately for it.

  • Free tier: 5 questions/month on Claude Haiku 4.5. Enough to try it, get a feel, decide if it's useful for your operation.
  • Pro tier (included with Pro plan): 40 questions/month routed automatically — simple lookups go to Haiku, "why" and comparison questions go to Sonnet 4.6. The router is heuristic, not magic; we picked the cutoffs to land roughly 70% Haiku / 30% Sonnet for a typical operator.
  • Bring Your Own Key: paste your own Anthropic API key in /admin/settings/ai-assistant and the platform cap goes away. Your key, your billing relationship with Anthropic, our orchestration. Default model becomes Sonnet 4.6 with optional override.

No add-on charge, no per-seat cost, no upsell email a week after you try it. The free tier exists to actually let you decide if the product is for you, not as a 2-question demo.

Multilingual, because that's our user base

Restaurants in Bulgaria, Greece, and the UK all run on Ordering.Tools. The assistant respects each operator's language end-to-end. If you ask "защо вторникът беше слаб?" the answer comes back in Bulgarian. If you ask "γιατί η Τρίτη ήταν αργή;" the answer comes back in Greek. Currency formatting and time zones follow the venue, not your browser locale — so a Bulgarian operator asking about a UK venue gets pounds, not leva.

The complexity router also speaks all three languages — "защо" and "γιατί" both trip the same multi-step reasoning path that "why" does in English. We tested with native speakers on each tool-catalogue change and run a snapshot suite per release.

What's in the box, and what's next

On launch, the assistant has 14 analytics tools covering the headline KPIs: dashboard summary, top products, time-series revenue, period comparisons, busiest hours, order-type breakdown, bill status distribution, cancelled-orders analysis, audit log summary, customer segments, dormant customers, KDS analytics, delivery metrics, and a recent-orders spot-check. Each is a typed function that runs server-side; the model can compose them but can't reach beyond them.

Phase 2 adds proactive insights — a nightly anomaly scan that opens your week with "three things to look at," weather overlay for the "did the rain hurt sales?" question, naive 7-day forecasts, and chain-level queries for multi-venue operators. We'll roll those out as the data quality across each surface validates.

How to try it

If you're on a paid plan: log into the admin panel, click the new "Ask AI" link near the top of the navigation, and type a question. There's a row of suggested prompts in your locale to get you started. Free plan users get 5 questions/month on the same surface.

If you have an Anthropic account already (because you're a developer or you use Claude for other things): paste your key in Settings → AI Assistant Settings to lift the platform cap. The dispatcher routes to your key automatically; nothing else changes.

We'd love to hear which questions work, which don't, and what tools you wish existed. Each missing-tool case is a clear signal for what to add next.

Try Ordering.Tools for Free

Set up your digital menu in under 2 minutes. No credit card required.