Skip to content
Booking AI

Conversational accommodation search

Describe your stay.
Get answers you can check.

Booking AI turns a plain-English request into explicit requirements, checks every listing against them, and shows what is confirmed, what is not, and why.

Recorded backend output · sample data

Apartment in Baku from April 10 to 15 with WiFi and a kitchen, up to $150 per night. A quiet street would be nice.

InspectorWhy this result

Selected because all required constraints are confirmed. 3 requirements confirmed, 1 optional detail not confirmed.

1

Modern Loft Apartment

Strong matchOptional details unconfirmed
Price
750.0 USD total for 5 night(s)
Budget
Within your budget of 750.0 USD

Confirmed · 3

  • Kitchen
  • Wifi
  • BudgetPRICE: 750.0 <= allowed total 750.0

Not confirmed · 1

  • Quiet streetOptional
Sample listing · no external page

Multi-turn conversation

New search, refinement, listing questions and general chat, with explicit state between turns.

Seven-stage pipeline

LLMs interpret language; deterministic code matches, verifies evidence and ranks.

1,000+ offline tests

Hermetic test suite plus golden-set and end-to-end evaluation.

See it in action

Screenshots of the demo replaying responses the real backend produced on the sample dataset. Recorded, not a live AI session.

Recorded walkthrough · sample data
Booking AI demo: two apartment cards in Baku with confirmed and not confirmed requirements, and the Decision Inspector for the first result

1 · Search with several requirements

WiFi and a kitchen are required, a quiet street is optional, the budget is per night. Each card shows what is confirmed; the Decision Inspector shows why the first result was selected.

Refined results: two listings with the balcony confirmed

2 · Refine the search

“Only show places with a balcony.” The balcony is added; city, dates, budget and the other requirements stay.

Open full size
Answer to a parking question: could not verify, verdict UNCERTAIN

3 · Ask about a listing

“Does the first one have parking?” The listing data does not say, so the answer is “couldn’t verify”, not “no”.

Open full size
Clarifying question: per night or for the whole stay

4 · Ask before guessing

“$200 max” for a three-night stay is ambiguous, so the assistant asks one question before searching.

Open full size

What Booking AI can do

Six things the system does today, each one visible in the Decision Inspector.

Natural-language search

City, dates, guests, budget and what matters to you, written as one plain-English message.

Apartment in Baku, April 10–15, WiFi and a kitchen

Constraint extraction

Every wish becomes an explicit requirement, marked as required, nice to have or excluded.

kitchen · required quiet street · optional

Transparent matching

Each listing shows which requirements are confirmed, not confirmed or not satisfied, with the reason.

✓ WiFi ✓ Kitchen ? Quiet street

Conversational refinement

Change one thing in your own words. City, dates and the other requirements stay as they were.

Only show places with a balcony.

Listing questions

Ask about a listing you were shown. The answer is checked against that listing’s own data.

Does the first one have parking?

Explicit uncertainty

When the data does not say, the answer is “not confirmed”. Unclear requests get one short question.

Do you mean $200 per night or for the whole stay?

What’s built

Eight implemented parts. Language models handle language; everything that decides an outcome is ordinary, tested code.

Conversation Router

LLM

Classifies each message as a new search, a refinement, a listing question or general chat. Ambiguous turns get a clarifying question; “the second one” is validated against what was shown.

Intent Extraction

LLMDeterministic

Turns the message into a typed search request or a patch to the current one. Code normalises dates, asks about budget scope and never turns a monthly rate into a nightly price.

Retrieval

Deterministic

Fetches candidate listings for the city and dates. The demo searches a bundled sample dataset; an optional Apify-based retriever loads live data. No embeddings.

Structured Matching

Deterministic

Checks requirements against canonical listing fields. Price, bedrooms, bathrooms and area are compared as numbers; area must belong to the bookable unit.

Textual Evidence Fallback

LLMDeterministic

Requirements no field answers are read from the listing text. The model must quote the listing, quotes are verified, and code decides the verdict.

Ranking & Selection

Deterministic

Sorts eligible listings into strong, partial and weak matches. An unconfirmed required item never yields a strong match; unchecked optional wishes stay visible.

Decision Inspector

UI

A public record of each turn: routing, the understood request, every verdict with its reason and evidence, plus latency, LLM calls and estimated cost.

FastAPI + Astro Demo

APIUI

One application service per turn behind POST /api/chat with per-session state. Astro and React render the public turn contract without duplicating search logic.

Typed contracts between stagesGraceful provider failuresGolden-set & end-to-end evaluation1,000+ hermetic tests

How it works

Seven stages run on every search turn. Under each step, one real request shows what that stage produces.

  1. 1

    User message

    Input

    The message arrives with the conversation state: the current search and the listings already shown.

    “Apartment in Baku from April 10 to 15 with WiFi and a kitchen, up to $150 per night. A quiet street would be nice.”

  2. 2

    Intent understanding

    LLM + Deterministic

    A router decides what the message is, and an LLM extracts the search. Code validates dates and asks when the budget scope is unclear.

    action: new search · city: Baku · stay: 10 Apr 2026 – 15 Apr 2026 · budget: up to 150 USD per night

    • wifi · Required
    • kitchen · Required
    • quiet street · Optional
  3. 3

    Candidate retrieval

    Deterministic

    Listings for the city and dates come from the listing source, in the demo a bundled sample dataset. No embeddings are used.

    Apartments in Baku available 10 Apr 2026 – 15 Apr 2026 from the sample dataset, priced for the requested nights.

  4. 4

    Matching

    Deterministic

    Requirements are checked against structured listing fields. Price, bedrooms and area are compared as numbers.

    • ✓Kitchen · Kitchen
    • ✓Wifi · WiFi
    • ✓Budget · PRICE: 750.0 <= allowed total 750.0
    • ?Quiet street · no structured field
  5. 5

    Evidence verification

    LLM + Deterministic

    Requirements no field answers go to an LLM, which must quote the listing. The quote is checked against the listing text before it counts.

    Another sample listing, Sunny Central Apartment, asked about a “quiet location”:

    “Quiet street but still central.”

    quote found in listing text → confirmed

  6. 6

    Ranking

    Deterministic

    Eligible listings are tiered and ordered by what is confirmed. An unconfirmed required item is never a strong match.

    1. 1. Modern Loft Apartmentstrong · score 30
    2. 2. City Center Compact Loftstrong · score 30
  7. 7

    Response generation

    LLM

    An LLM words the already-decided outcome, with a deterministic fallback. Facts about a listing are rendered straight from the verdict.

    The reply is worded from the decided outcome: 2 strong matches in Baku. Listing cards and the Decision Inspector come straight from the same data.

Use cases

Real exchanges recorded from the backend on the sample dataset, replayed here. Pick a scenario.

Why conversational search

A stay is a set of requirements, some strict and some flexible. Filters flatten them into fields, and the real answer often sits in the listing text.

With filters and pages

  • Translate “quiet, with a proper kitchen” into checkboxes that may not exist
  • Re-enter dates, budget and amenities every time one thing changes
  • Open listing after listing to see whether a filter really applied

With Booking AI

  • Say what you need in your own words, required and nice-to-have alike
  • Refine with one sentence; the rest of the search stays as it was
  • See per listing what is confirmed, not confirmed or not satisfied, and why

How to get started

Three steps to see what Booking AI does and how it is built.

  1. 1

    See it in action

    The walkthrough shows the demo replaying responses the real backend produced on a bundled sample dataset. It is recorded, not a live session.

    See the walkthrough
  2. 2

    Follow a request through the system

    These are the prompts behind the recorded examples. How it works traces the first one through all seven stages.

    Prompts used in the recorded examples
    1Apartment in Baku from April 10 to 15 with WiFi and a kitchen, up to $150 per night. A quiet street would be nice.
    2A hotel in Baku from April 10 to 13, $200 max
    Explore how it works
  3. 3

    Explore the source code

    Every listing card sorts requirements into three groups, and the Decision Inspector shows why. The code behind each verdict is on GitHub.

    ConfirmedNot confirmedNot satisfied
    View source code

FAQ

How does Booking AI understand my preferences?

A language model turns your message into a structured search: city, dates, guests, budget and a list of requirements, each marked as required, nice to have or excluded. Code then validates it — for example, it asks whether a budget is per night or for the whole stay instead of assuming.

What happens if listing information is incomplete?

Requirements are checked against structured listing fields first. If a field does not answer it, a model reads the listing text and has to quote it; the quote is verified against the listing. Anything still unproven is shown as “not confirmed” — it is never counted as a yes, and a required item that is not confirmed keeps a listing from being a strong match.

Can I refine my search?

Yes. Say what to change — “only places with a balcony”, “make it a hotel instead” — and the existing search is updated while everything else is kept. You can also ask about a listing you were shown, such as “Does the first one have parking?”.

Does Booking AI use real accommodation data?

The examples on this site were recorded on a bundled sample dataset, so listings, prices and links are illustrative and say nothing about real availability. The backend also has an optional Apify-based retriever for live listing data, which is not enabled in the demo.

Can I book accommodation through the assistant?

No. Booking AI is a search and decision assistant. It does not take bookings or payments and does not guarantee availability or prices.

Can I try it myself?

Not online yet. The interactive demo is not public for now; it runs against the same backend when the project is run locally. The walkthrough and use cases on this page show recorded output from that backend.

Which languages does it support?

English. Requests in other languages are not supported yet.

Can I inspect the source code?

Yes. The whole project, including the backend, its tests and the evaluation harness, is on GitHub. View source code.

Built by

Leyla Mehtiyeva

AI engineering project

Booking AI was designed and built independently, end to end: conversation state, typed contracts between stages, evidence verification, evaluation, the API and this site.

  • Python
  • Pydantic v2
  • FastAPI
  • Google ADK
  • Gemini 2.5 Flash-Lite
  • Astro
  • React
  • Tailwind CSS
  • pytest

Code, tests and evaluation are on GitHub.

View source code