01
Choose a Traveler
Three Profiles, Three Experiences
Select a persona to see how the engine adapts. Every component mockup below changes based on who's traveling.
Elena Vasquez
VP of Sales, Meridian Health
Hyatt Globalist
High Autonomy
LGA
Marcus Chen
Creative Director, Nomad Studio
Boutique Hotels
Medium Autonomy
MIA
New Traveler
Product Manager, Acme Corp
No History
Needs Guidance
SFO
02
Tiered Data Model
Five Tiers — What Edge Notices, Asks, and Captures
Ofir's hierarchy determines which preferences gate search, which reshape results, and which are captured silently.
T0 — Required
Hard Gate
Can't search without it. Always asked.
●DestinationCharlotte
●DatesJun 10–12
T1 — High Signal
Reshapes Results
Asked within the 2–3 question budget.
●HotelHyatt📌
●StyleBoutique
○HotelUnknown
T2 — Strong
Re-ranks Results
Surfaced as editable chips after results.
○FlightNonstop pref.
○AreaNoDa district
○Area—
T3 — Tie-Breaker
Available, Never Pushed
Captured passively. Available as chips.
◉CoffeeBlack, strong
◉DietPescatarian
○Diet—
T4 — Trivia
Captured Silently
Never surfaces. Learned via updateTravelerModel.
No component rendered — silent capture only
●Declared — "I always fly Delta"
○Inferred — pattern-derived
◉Contextual — this trip / corrected
03
Engine Pipeline
Six Steps — From Query to Learning
Ofir's six-step engine maps directly to Edge's cognitive steps. The prompts use domain language — the underlying mental process is Ofir's pipeline.
STEP 1
Acknowledge
Parse query
"Charlotte QBR, same as usual ●"
"Charlotte next week for a pitch."
"I need to book a trip to Charlotte."
→
STEP 2
Recall
Pull profile
🏨✓Pulling Charlotte preferences…
🏨✓Checking hotel style prefs…
No profile to pull — cold start
→
STEP 3
Assess
Merge & check gaps
Rich profile — 0 questions needed. Search immediately.
Any neighborhood preferences in Charlotte?
NoDaSouth EndUptown
When are you traveling?
Select dates…
→
STEP 4
Search
Rank & return
Hyatt Place CLT
★ 4.2 · Uptown $189/nt
The Dunhill Hotel
★ 4.5 · Uptown $215/nt
Waiting for answers before searching…
→
STEP 5
Recommend
Present results
3 hotels + 2 flights presented as options
Basic results after questions answered
→
STEP 6
Confirm
Refine & learn
●
HOTELHyatt Place CLT confirmed
✓
○
AREAPrefers NoDa district
✓
●
SCHEDULEFirst preference learned
✓
04
Walkthrough
Same Query, Three Profiles
"Charlotte next week for work" — profile richness determines the question budget and result quality.
Elena — Rich Profile
8/8 categories · High autonomy · 0 questions
"Your Charlotte QBR — I've got it ● Hyatt Place CLT, room 1814, United nonstop from LGA. Aisle seat, forward cabin."
Hyatt Place Charlotte City Parkbest match
★ 4.2 · Uptown · $189/night
✓ Loyalty match — Globalist
Your usual spot. Room 1814 requested, high floor, firm mattress, gym access before 7am.
United UA 1847$342
✓ Seat match — aisle, forward
Nonstop, arrives 2.5h before your QBR. Aisle seat in Economy Plus.
Confirm & Book
Marcus — Medium Profile
5/8 categories · Medium autonomy · 1–2 questions
"Charlotte for a pitch — nice ○ I know you like boutique spots. Quick question before I search:"
Any neighborhood you'd like to be near for the pitch?
NoDa
South End
Uptown
The Dunhill Hotelbest match
★ 4.5 · Uptown · $215/night
Boutique, 1912 building with exposed brick. 10min to NoDa. Local coffee roaster in lobby.
New Traveler — Empty Profile
0/8 categories · Low autonomy · 3 questions
- I learn your preferences over time
- The more we travel together, the less I ask
- Your fifth booking will feel effortless
What dates are you traveling?
Select dates…
Which airport do you fly from?
SFO
OAK
SJC
05
A/B Testing
Two Manifestations of the Same Engine
The personalization engine is the same mental process in both directions. What differs is the externalization pattern — how Edge shows its work.
Direction A — Inline Inference
Preferences woven into conversation as editable chips
"Here's what I know about your Charlotte travel:"
●HotelHyatt📌
●AirlineUnited📌
○SeatAisle, forward
◉Room1814
↑ Tap any chip to correct it. Corrections flow back to the agent in real-time via useTamboComponentState.
Components: InferenceChip, InferenceChipEditable, InferenceChipGroup, TripPrefsOverlay
Direction B — Confirm-First
Preferences compiled into a checklist before searching
Trip preferences
Review your preferences before searching
Confirm & search
Components: TripSummarySheet, TripPrefsOverlay (read-only)
06
Design Decisions
Four Decisions Encoded in the System
Ofir's design decisions govern how the engine scores, defaults, resolves conflicts, and handles dealbreakers.
Decision 01
Scoring Formula
Ofir's spec defines numeric weights (T0 hard filter, T1 +10/−5, T2 +3, T3 +1, loyalty +15). Current implementation uses qualitative LLM reasoning against tier descriptions — the LLM achieves the same ranking behavior without a scoring function.
// System prompt — all 4 variants
T0: Required — hard gate, always ask
T1: High signal — reshapes results
T2: Strong — re-ranks results
T3: Tie-breaker — never pushed
Decision 02
Defaults for Unknowns
When a preference is missing, Edge fills in conservative defaults: budget → mid-tier, loyalty → best value, timing → mid-day. TripSummarySheet shows these defaults as dash-marked rows.
Decision 03
Query vs. Profile
When the query contradicts the profile, the query always wins for this trip. The profile is not updated from a one-off — it only changes on explicit correction or repeated behavior. Edge surfaces the conflict transparently.
Schedule conflict
4:00 PM flight — arrives 30min after meeting starts
1:00 PM flight — $80 more, arrives 2h early
Recommend the earlier flight for this trip.
💡 Your profile says "fine with arrivals up to 11pm" but this meeting starts at 3pm — the late flight cuts it close.
Decision 04
Dealbreakers
Ofir's spec defines hard-filter dealbreakers that are never shown and never ranked low. This is designed but not yet built — the current system uses declared preferences with high confidence as a soft equivalent.
Sprint 3 candidate
07
Memory System
Read, Write, Learn
Every interaction teaches the model. The memory system has two sides: reading the persona profile before each response, and writing learnings back after each interaction.
Read — lookupPersonaMemory
lookupPersonaMemory(category)
Agent calls this tool to pull the traveler's profile by category. Returns structured data — loyalty status, room preferences, flight habits, dietary needs, schedule patterns, calendar events, trip history, autonomy level.
8 Memory Categories
loyalty
hotel
flight
dietary
schedule
calendar
tripPatterns
autonomyDial
Elena's Profile Sample
loyalty.hotel: "World of Hyatt — Globalist"
hotel.roomPreference: "High floor, king bed, room 1814"
flight.carrier: "United preferred"
autonomyDial.level: "high"
Marcus's Profile Sample
hotel.style: "Wynwood-style — converted warehouse"
flight.carrier: "Delta preferred for MIA hub"
dietary.preferences: "Pescatarian"
autonomyDial.level: "medium"
New Traveler Profile
loyalty: {}
hotel: {}
flight: {}
autonomyDial.level: "low"
→
Write — updateTravelerModel
updateTravelerModel(key, value, source, confidence)
After each interaction, the agent calls this tool to persist what it learned. Each entry includes a confidence score and source type. The ModelUpdateToast makes every learning visible.
Learning Accumulation
●
DECLARED · 95%"I always fly Delta"
✓ Learned
○
INFERRED · 72%Price-sensitive — asked about cost 3 times
✓ Learned
◉
CORRECTED · 90%"Actually I prefer window seats"
✓ Learned
Source confidence ranges:
● Declared: 0.9–1.0 · ○ Inferred: 0.5–0.8 · ◉ Corrected/Contextual: 0.6–0.9
08
Component Inventory
16 Registered Tambo Components
Every component the agent can select at runtime, registered with Zod schemas. The agent's description field is its only signal for when to use each component.
EdgeMessage
Base chat message with "E" avatar and memory badges
BothBoth
InferenceChip
Read-only preference chip with source dot + confidence
PrefDir A
InferenceChipEditable
Tap-to-correct chip — corrections flow to agent
PrefDir A
InferenceChipGroup
Expandable group with summary header
PrefDir A
TripPrefsOverlay
Full preference profile grouped by category
PrefBoth
TripSummarySheet
Confirm-first checklist before search
PrefDir B
HotelResultCard
Hotel result with rating, price, loyalty, reasoning
BothBoth
FlightResultCard
Flight result with timeline, carrier, seat match
BothBoth
ConfirmCTA
Action button — idle → loading → confirmed
BothBoth
WelcomeCard
Cold-start onboarding with Edge avatar + bullets
BothBoth
QuestionCard
Elicitation with choice chips + text fallback
BothBoth
PreferenceLearningIndicator
Progress bar — N/8 profile completeness
BothBoth
ThinkingStep
Inline reasoning — pulsing dot / checkmark
OrchDir A
SpecialistMessage
Persona-tinted specialist voice (hotel / flight)
OrchDir B
ConflictResolution
Warning card with radio options + recommendation
OrchDir A
ModelUpdateToast
Visible learning — source dot, key, value, confidence
BothBoth
Full interactive versions at edge-sprint2.pages.dev/gallery