app_code = r'''
import os, json, uuid
import streamlit as st
from typing import TypedDict, Record, Dict, Any, Non-compulsory
from pydantic import BaseModel, Area
from openai import OpenAI
from langgraph.graph import StateGraph, START, END
from langgraph.sorts import Command, interrupt
from langgraph.checkpoint.reminiscence import InMemorySaver
def tool_search_flights(origin: str, vacation spot: str, depart_date: str, return_date: str, budget_usd: int) -> Dict[str, Any]:
choices = [
{"airline": "SkyJet", "route": f"{origin}->{destination}", "depart": depart_date, "return": return_date, "price_usd": int(budget_usd*0.55)},
{"airline": "AeroBlue", "route": f"{origin}->{destination}", "depart": depart_date, "return": return_date, "price_usd": int(budget_usd*0.70)},
{"airline": "Nimbus Air", "route": f"{origin}->{destination}", "depart": depart_date, "return": return_date, "price_usd": int(budget_usd*0.62)},
]
choices = sorted(choices, key=lambda x: x["price_usd"])
return {"instrument": "search_flights", "top_options": choices[:2]}
def tool_search_hotels(metropolis: str, nights: int, budget_usd: int, preferences: Record[str]) -> Dict[str, Any]:
base = max(60, int(budget_usd / max(nights, 1)))
picks = [
{"name": "Central Boutique", "city": city, "nightly_usd": int(base*0.95), "notes": ["walkable", "great reviews"]},
{"title": "Riverside Keep", "metropolis": metropolis, "nightly_usd": int(base*0.80), "notes": ["quiet", "good value"]},
{"title": "Fashionable Loft Lodge", "metropolis": metropolis, "nightly_usd": int(base*1.10), "notes": ["new", "gym"]},
]
if "luxurious" in [p.lower() for p in preferences]:
picks = sorted(picks, key=lambda x: -x["nightly_usd"])
else:
picks = sorted(picks, key=lambda x: x["nightly_usd"])
return {"instrument": "search_hotels", "top_options": picks[:2]}
def tool_build_day_by_day(metropolis: str, days: int, vibe: str) -> Dict[str, Any]:
blocks = []
for d in vary(1, days+1):
blocks.append({
"day": d,
"morning": f"{metropolis}: espresso + a must-see landmark",
"afternoon": f"{metropolis}: {vibe} exercise + native lunch",
"night": f"{metropolis}: sundown spot + dinner + non-obligatory evening stroll"
})
return {"instrument": "draft_itinerary", "days": blocks}
'''