Spaces:
Runtime error
Runtime error
| from models import Database | |
| from geopy.geocoders import Nominatim | |
| import os | |
| from dotenv import load_dotenv | |
| from models import NLPProcessor | |
| nlp = NLPProcessor() | |
| load_dotenv() | |
| def match_technician(text: str, user_number: str): | |
| db = Database() | |
| try: | |
| service_type = nlp.extract_service(text) | |
| location = nlp.extract_location(text) | |
| if service_type == "unknown": | |
| return None, "Could not determine service. Please specify (e.g., 'AC repair', 'plumber')" | |
| if not location: | |
| return None, "Could not detect location. Try: 'AC repair in Nairobi'" | |
| longitude, latitude = geocode_location(location) | |
| technician = db.find_technician(service_type, longitude, latitude) | |
| if not technician: | |
| return None, f"No {service_type} technicians near {location}" | |
| db.save_request(user_number, technician["id"], service_type) | |
| return technician, None | |
| except Exception as e: | |
| return None, f"System error: {str(e)}" | |
| finally: | |
| db.close() | |
| # def match_technician(text: str, user_number: str): | |
| # technician = None | |
| # db = Database() | |
| # try: | |
| # # Step 1: Extract service type and location using DistilBERT | |
| # service_type = nlp.extract_service(text) | |
| # location = nlp.extract_location(text) | |
| # if not location: | |
| # return None, "Could not detect your location. Please specify (e.g., 'AC repair in Nairobi')." | |
| # # Step 2: Get coordinates (mock function - replace with real geocoding) | |
| # longitude, latitude = geocode_location(location) | |
| # # Step 3: Find nearest technician | |
| # technician = db.find_technician(service_type, longitude, latitude) | |
| # if not technician: | |
| # db.close() | |
| # return None, f"No available {service_type} technicians near {location}." | |
| # # Step 4: Save request to DB | |
| # request_id = db.save_request(user_number, technician["id"], service_type) | |
| # return technician, None | |
| # except Exception as e: | |
| # return None, f"System error: {str(e)}" | |
| # finally: | |
| # db.close() | |
| def geocode_location(location: str) -> tuple[float, float]: | |
| geolocator = Nominatim(user_agent="technician_matcher") | |
| location = geolocator.geocode(location + ", Kenya") # Adjust country as needed | |
| if location: | |
| return (location.longitude, location.latitude) | |
| return (-1.2921, 36.8219) # Fallback to Nairobi | |