Fred808 commited on
Commit
f0f1142
·
verified ·
1 Parent(s): 342ca66

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -68
app.py CHANGED
@@ -365,77 +365,74 @@ async def chatbot_response(request: Request, background_tasks: BackgroundTasks):
365
  sentiment_modifier = "Great to hear from you! "
366
 
367
  # Check for specialized commands:
368
- # Check for specialized commands:
369
- if "menu" in user_message.lower():
370
- # Return menu with images and options for selection
371
- menu_with_images = []
372
- for index, item in enumerate(menu_items, start=1):
373
- image_url = google_image_scrape(item["name"])
374
- menu_with_images.append({
375
- "number": index, # Add a number for each dish
376
- "name": item["name"],
377
- "description": item["description"],
378
- "price": item["price"],
379
- "image_url": image_url
380
- })
381
- response_payload = {
382
- "response": sentiment_modifier + "Here’s our delicious menu:",
383
- "menu": menu_with_images,
384
- "follow_up": (
385
- "To order, type the *number* or *name* of the dish you'd like. "
386
- "For example, type '1' or 'Jollof Rice' to order Jollof Rice.\n\n"
387
- "You can also ask for nutritional facts by typing, for example, 'Nutritional facts for Jollof Rice'."
388
- )
389
- }
390
- background_tasks.add_task(log_chat_to_db, user_id, "outbound", str(response_payload))
391
- return JSONResponse(content=response_payload)
392
-
393
- # Handle dish selection for ordering
394
- if any(item["name"].lower() in user_message.lower() for item in menu_items) or \
395
- any(str(index) == user_message.strip() for index, item in enumerate(menu_items, start=1)):
396
- # Extract the selected dish
397
- selected_dish = None
398
- if user_message.strip().isdigit():
399
- # User selected by number
400
- dish_number = int(user_message.strip())
401
- if 1 <= dish_number <= len(menu_items):
402
- selected_dish = menu_items[dish_number - 1]["name"]
403
- else:
404
- # User selected by name
405
- for item in menu_items:
406
- if item["name"].lower() in user_message.lower():
407
- selected_dish = item["name"]
408
- break
409
-
410
- if selected_dish:
411
- # Trigger the order flow
412
- user_state[user_id] = {"flow": "order", "step": 1, "data": {"dish": selected_dish}, "last_active": datetime.utcnow()}
413
- response_text = f"You selected {selected_dish}. How many servings would you like?"
414
- background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
415
- return JSONResponse(content={"response": sentiment_modifier + response_text})
416
- else:
417
- response_text = "Sorry, I couldn't find that dish in the menu. Please try again."
 
 
 
 
 
 
 
 
 
 
418
  background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
419
  return JSONResponse(content={"response": sentiment_modifier + response_text})
420
 
421
- # Handle nutritional facts request
422
- if "nutritional facts for" in user_message.lower():
423
- dish_name = user_message.lower().replace("nutritional facts for", "").strip().title()
424
- dish = next((item for item in menu_items if item["name"].lower() == dish_name.lower()), None)
425
- if dish:
426
- response_text = f"Nutritional facts for {dish['name']}:\n{dish['nutrition']}"
427
- else:
428
- response_text = f"Sorry, I couldn't find nutritional facts for {dish_name}."
429
- background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
430
- return JSONResponse(content={"response": sentiment_modifier + response_text})
431
-
432
- # Check if this is an order flow request
433
- order_response = process_order_flow(user_id, user_message)
434
- if order_response:
435
- background_tasks.add_task(log_chat_to_db, user_id, "outbound", order_response)
436
- return JSONResponse(content={"response": sentiment_modifier + order_response})
437
-
438
-
439
 
440
  # For context-aware conversation: store conversation context
441
  conversation_context.setdefault(user_id, []).append({"timestamp": datetime.utcnow().isoformat(), "message": user_message})
 
365
  sentiment_modifier = "Great to hear from you! "
366
 
367
  # Check for specialized commands:
368
+ if "menu" in user_message.lower():
369
+ # Return menu with images and options for selection
370
+ menu_with_images = []
371
+ for index, item in enumerate(menu_items, start=1):
372
+ image_url = google_image_scrape(item["name"])
373
+ menu_with_images.append({
374
+ "number": index, # Add a number for each dish
375
+ "name": item["name"],
376
+ "description": item["description"],
377
+ "price": item["price"],
378
+ "image_url": image_url
379
+ })
380
+ response_payload = {
381
+ "response": sentiment_modifier + "Here’s our delicious menu:",
382
+ "menu": menu_with_images,
383
+ "follow_up": (
384
+ "To order, type the *number* or *name* of the dish you'd like. "
385
+ "For example, type '1' or 'Jollof Rice' to order Jollof Rice.\n\n"
386
+ "You can also ask for nutritional facts by typing, for example, 'Nutritional facts for Jollof Rice'."
387
+ )
388
+ }
389
+ background_tasks.add_task(log_chat_to_db, user_id, "outbound", str(response_payload))
390
+ return JSONResponse(content=response_payload)
391
+
392
+ # Handle dish selection for ordering
393
+ if any(item["name"].lower() in user_message.lower() for item in menu_items) or \
394
+ any(str(index) == user_message.strip() for index, item in enumerate(menu_items, start=1)):
395
+ # Extract the selected dish
396
+ selected_dish = None
397
+ if user_message.strip().isdigit():
398
+ # User selected by number
399
+ dish_number = int(user_message.strip())
400
+ if 1 <= dish_number <= len(menu_items):
401
+ selected_dish = menu_items[dish_number - 1]["name"]
402
+ else:
403
+ # User selected by name
404
+ for item in menu_items:
405
+ if item["name"].lower() in user_message.lower():
406
+ selected_dish = item["name"]
407
+ break
408
+
409
+ if selected_dish:
410
+ # Trigger the order flow
411
+ user_state[user_id] = {"flow": "order", "step": 1, "data": {"dish": selected_dish}, "last_active": datetime.utcnow()}
412
+ response_text = f"You selected {selected_dish}. How many servings would you like?"
413
+ background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
414
+ return JSONResponse(content={"response": sentiment_modifier + response_text})
415
+ else:
416
+ response_text = "Sorry, I couldn't find that dish in the menu. Please try again."
417
+ background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
418
+ return JSONResponse(content={"response": sentiment_modifier + response_text})
419
+
420
+ # Handle nutritional facts request
421
+ if "nutritional facts for" in user_message.lower():
422
+ dish_name = user_message.lower().replace("nutritional facts for", "").strip().title()
423
+ dish = next((item for item in menu_items if item["name"].lower() == dish_name.lower()), None)
424
+ if dish:
425
+ response_text = f"Nutritional facts for {dish['name']}:\n{dish['nutrition']}"
426
+ else:
427
+ response_text = f"Sorry, I couldn't find nutritional facts for {dish_name}."
428
  background_tasks.add_task(log_chat_to_db, user_id, "outbound", response_text)
429
  return JSONResponse(content={"response": sentiment_modifier + response_text})
430
 
431
+ # Check if this is an order flow request
432
+ order_response = process_order_flow(user_id, user_message)
433
+ if order_response:
434
+ background_tasks.add_task(log_chat_to_db, user_id, "outbound", order_response)
435
+ return JSONResponse(content={"response": sentiment_modifier + order_response})
 
 
 
 
 
 
 
 
 
 
 
 
 
436
 
437
  # For context-aware conversation: store conversation context
438
  conversation_context.setdefault(user_id, []).append({"timestamp": datetime.utcnow().isoformat(), "message": user_message})