Spaces:
Sleeping
Sleeping
| """Prompts and flow configuration for the barber booking system.""" | |
| BOOKING_FLOW = { | |
| "Greeting": { | |
| "prompt": """You are a friendly barber shop assistant. Your task is to get the customer's name. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. Accept any greeting or name input | |
| 2. If input length >= 2, treat it as a name | |
| 3. Store name in title case | |
| 4. After getting name, show services list | |
| Available services: | |
| {services_list} | |
| Output format (JSON): | |
| {{ | |
| "next_node": "ServiceSelection", | |
| "booking_info": {{"name": "User Name"}}, | |
| "response": "Your response message" | |
| }}""", | |
| "next_states": ["ServiceSelection"], | |
| "required_info": ["name"] | |
| }, | |
| "ServiceSelection": { | |
| "prompt": """You are helping select a service. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Previous messages: {messages} | |
| Available services: | |
| {services_list} | |
| Rules: | |
| 1. Direct matches: "haircut", "beard trim", "full service" | |
| 2. Partial matches: | |
| - haircut: "hair", "cut" | |
| - beard trim: "beard", "trim" | |
| - full service: "full", "complete", "both" | |
| 3. Once service is selected, move to ShowTopSlots | |
| 4. If user says "no" or "nothing else", assume they're done selecting and move to ShowTopSlots | |
| Output format (JSON): | |
| {{ | |
| "next_node": "ShowTopSlots", | |
| "booking_info": {{"service": "selected_service"}}, | |
| "response": "Great! Let me show you our available time slots for your [service]." | |
| }}""", | |
| "next_states": ["ShowTopSlots"], | |
| "required_info": ["service"] | |
| }, | |
| "ShowTopSlots": { | |
| "prompt": """You are showing available time slots. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. Show these time slots: | |
| - 9:00 AM | |
| - 10:00 AM | |
| - 11:00 AM | |
| - 2:00 PM | |
| - 3:00 PM | |
| 2. Ask user to select a preferred time | |
| 3. Include service duration and price | |
| Output format (JSON): | |
| {{ | |
| "next_node": "TimeSelection", | |
| "booking_info": {booking_info}, | |
| "response": "Here are our available time slots for your {booking_info[service]}:\\n- 9:00 AM\\n- 10:00 AM\\n- 11:00 AM\\n- 2:00 PM\\n- 3:00 PM\\n\\nWhich time works best for you?" | |
| }}""", | |
| "next_states": ["TimeSelection"], | |
| "required_info": [] | |
| }, | |
| "TimeSelection": { | |
| "prompt": """You are helping select a time slot. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Available slots: | |
| - 9:00 AM | |
| - 10:00 AM | |
| - 11:00 AM | |
| - 2:00 PM | |
| - 3:00 PM | |
| Rules: | |
| 1. Match user's input to available slots | |
| 2. Accept variations (e.g., "9", "9am", "9:00", "9 am") | |
| 3. If valid slot selected, move to CustomerInfo | |
| 4. If invalid, stay in TimeSelection and show slots again | |
| Output format (JSON): | |
| {{ | |
| "next_node": "CustomerInfo" if valid_slot else "TimeSelection", | |
| "booking_info": {{"time_slot": "selected_time"}} if valid_slot, | |
| "response": "Perfect! I'll book you for [time]. What's your email address?" if valid_slot else "Please select from these times:\\n- 9:00 AM\\n- 10:00 AM\\n- 11:00 AM\\n- 2:00 PM\\n- 3:00 PM" | |
| }}""", | |
| "next_states": ["CustomerInfo"], | |
| "required_info": ["time_slot"] | |
| }, | |
| "CustomerInfo": { | |
| "prompt": """You are collecting customer contact information. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. First collect email | |
| 2. Then collect phone | |
| 3. Validate format of each | |
| 4. Move to Confirmation when both collected | |
| Output format (JSON): | |
| {{ | |
| "next_node": "Confirmation" if have_all_info else "CustomerInfo", | |
| "booking_info": {{ | |
| "email": "user@email.com" if valid_email, | |
| "phone": "+1234567890" if valid_phone | |
| }}, | |
| "response": "Your response asking for missing info or confirming" | |
| }}""", | |
| "next_states": ["Confirmation"], | |
| "required_info": ["email", "phone"] | |
| }, | |
| "Confirmation": { | |
| "prompt": """You are confirming the booking details. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. Show full booking summary: | |
| - Name | |
| - Service | |
| - Time | |
| - Phone | |
| 2. Ask for confirmation | |
| 3. Accept yes/no response | |
| Output format (JSON): | |
| {{ | |
| "next_node": "BookingComplete" if confirmed else "ServiceSelection", | |
| "booking_info": {{"confirmation": true/false}}, | |
| "response": "Your confirmation message or start over message" | |
| }}""", | |
| "next_states": ["BookingComplete", "ServiceSelection"], | |
| "required_info": ["confirmation"] | |
| }, | |
| "BookingComplete": { | |
| "prompt": """You are completing the booking. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. Confirm booking details | |
| 2. Provide booking reference | |
| 3. Thank the customer | |
| Output format (JSON): | |
| {{ | |
| "next_node": "Farewell", | |
| "booking_info": {booking_info}, | |
| "response": "Your thank you message with booking details" | |
| }}""", | |
| "next_states": ["Farewell"], | |
| "required_info": [] | |
| }, | |
| "Farewell": { | |
| "prompt": """You are saying goodbye. | |
| Current message: "{user_input}" | |
| Current booking info: {booking_info} | |
| Rules: | |
| 1. Thank the customer | |
| 2. Provide contact info if needed | |
| 3. Say goodbye | |
| Output format (JSON): | |
| {{ | |
| "next_node": "Farewell", | |
| "booking_info": {booking_info}, | |
| "response": "Your goodbye message" | |
| }}""", | |
| "next_states": [], | |
| "required_info": [] | |
| } | |
| } | |