TechNext · Casa Escondida Extractor Pod

Extractor Pod — black-box overview

One AI reading per turn, wrapped in deterministic code that re-checks every number and date before it can reach a quotation. A guest's WhatsApp message goes in on the left; a structured booking and a safe reply come out on the right. Section 2 opens the box, node by node.

Inputs

What the pipeline consumes

Everything that reaches the pipeline before a single model call is made.

  • Guest WhatsApp message
    Free text, written however a real guest writes — English, Vietnamese or Chinese
  • Conversation history
    The whole transcript, re-sent every turn — no incremental state to drift
  • Manila date
    "This Saturday" is resolved in code against Asia/Manila, never taken from the model
  • Trip JSON schema
    18 fields generated from the zod contract — the only shape the model may answer in
  • House norms
    Exactly 4 fields may be defaulted — meals, transport, rooms, language
  • Provider config
    One env var picks the model — swapping vendors is not a code change
Black-box · workflow

What runs inside

What is really wired today — measured from the source, not the roadmap.

0
Trip fields
each carries a state + verbatim evidence
0
Model calls / turn
4 to read the message, 1 to word the reply
0
Field states
stated · inferred · default · derived · missing
0
Tests green
plus a 30-case multilingual eval corpus
converse() re-sends the whole transcript and re-extracts from scratch every turn — there is no incremental state to drift. The model proposes; then deterministic code, not the model, resolves relative dates on Manila time, corroborates every count against the guest's own words, applies house norms, and decides what is still missing. A value that code could not verify never reaches a quotation — and the reply the guest reads is worded by a model that is handed only those verified facts, with the deterministic template as its fallback.
Model calls main extract extractGuests extractCheckIn extractDiveWindow
Outputs

What user receive

Three things per turn, each mapped to the stage that produced it.

TripStructured booking .json

18 fields, each carrying a state and — where it claims the guest said it — the verbatim quote it came from. This is what the pricing step consumes.

ReplyGuest-facing message whatsapp

Facts come from the code-verified Trip; the wording is then written by the model in a concierge voice, under guardrails that forbid quoting a price or confirming a booking. If that call fails or times out, the deterministic template is sent instead — the guest is never left waiting.

OpenWhat is still missing []

The remaining fields in priority order. Empty means the enquiry is complete and a human takes it from there — nothing is booked automatically.

Section 2 · Node graph

Inside the workflow — stage by stage

Five phases, left to right, for one guest message. Everything orange is a model call; everything green is code that checks the model's work. Hover a node (screen) or read the callout (print) for its full detail card.

Trigger
Model call · DeepSeek Flash / Gemini
Tool
Skill
Deliverable