How the personalization engine works in Sprint 2—mapped onto 16 Tambo components with live persona data, five behavioral tiers, and two A/B conversation directions.

Five Tiers
Engine Pipeline
Personas
A/B Directions
Memory
01

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
8/8 categories
Hyatt Globalist High Autonomy LGA

Marcus Chen

Creative Director, Nomad Studio
5/8 categories
Boutique Hotels Medium Autonomy MIA

New Traveler

Product Manager, Acme Corp
0/8 categories
No History Needs Guidance SFO
02

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

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.
E
Preference
Any neighborhood preferences in Charlotte?
NoDaSouth EndUptown
E
Required
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
Confirm & Book
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

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
7:15aLGA
2h 15m
9:30aCLT
✓ 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:"
E
Preference
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
E
Welcome to Edge
  • I learn your preferences over time
  • The more we travel together, the less I ask
  • Your fifth booking will feel effortless
E
Required
What dates are you traveling?
Select dates…
E
Required
Which airport do you fly from?
SFO OAK SJC
05

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
HotelHyatt
AirlineUnited
SeatAisle, forward
Nonstop+$80 okay
Confirm & search
Components: TripSummarySheet, TripPrefsOverlay (read-only)
06

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.
Defaults applied
BudgetMid-tier
LoyaltyBest value
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
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

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

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