khidmatAI / agents /booking.py
CoderHassan's picture
Upload 10 files
59ce1e2 verified
"""Agent 4 — Booking Agent (writes to data/bookings.json)"""
import json, uuid, os
from datetime import datetime, timedelta
from pathlib import Path
BOOKINGS_FILE = Path(__file__).parent.parent / "data" / "bookings.json"
TIME_SLOT_MAP = {
"morning": ["09:00", "10:00", "11:00"],
"afternoon": ["13:00", "14:00", "15:00"],
"evening": ["17:00", "18:00", "19:00"],
"asap": ["09:00", "10:00", "11:00", "13:00", "14:00"],
}
def pick_slot(provider: dict, requested_time: str) -> str:
available = provider.get("available_slots", [])
rt = (requested_time or "").lower()
for key, slots in TIME_SLOT_MAP.items():
if key in rt:
for s in slots:
if s in available:
return s
return available[0] if available else "10:00"
def run(recommendation: dict, intent: dict) -> dict:
provider = recommendation.get("best_provider")
if not provider:
return {"error": "No provider available to book."}
slot = pick_slot(provider, intent.get("time", "morning"))
booking_id = f"BK-{datetime.now().strftime('%Y%m%d')}-{str(uuid.uuid4())[:5].upper()}"
remind_time = f"{int(slot.split(':')[0]) - 1:02d}:{slot.split(':')[1]}"
booked_date = (datetime.now() + timedelta(days=1)).strftime("%A, %d %b %Y")
record = {
"booking_id": booking_id,
"provider_id": provider["provider_id"],
"provider_name": provider["name"],
"service": intent.get("service_type"),
"location": intent.get("location"),
"confirmed_slot": slot,
"booked_date": booked_date,
"provider_phone": provider.get("phone"),
"reminder_time": remind_time,
"created_at": datetime.now().isoformat(),
"status": "confirmed",
}
# Write to bookings.json
try:
existing = json.loads(BOOKINGS_FILE.read_text()) if BOOKINGS_FILE.exists() else []
existing.append(record)
BOOKINGS_FILE.write_text(json.dumps(existing, indent=2))
except Exception:
pass # HF free tier ephemeral filesystem — non-fatal
return record