diff --git a/pos/blueprints/chat_bp.py b/pos/blueprints/chat_bp.py index 7741836..654d558 100644 --- a/pos/blueprints/chat_bp.py +++ b/pos/blueprints/chat_bp.py @@ -46,10 +46,23 @@ def chat(): vehicle_match = _resolve_vehicle(master, vehicle) # Run catalog search if we have a search query - if search_query and master and tenant: + # Also search if AI identified a vehicle but didn't give a search_query + effective_query = search_query + if not effective_query and vehicle: + # Extract likely part keywords from the user's message + import re + # Remove brand/model/year from message to get the part description + part_words = user_message.lower() + for remove in [vehicle.get('brand',''), vehicle.get('model',''), str(vehicle.get('year',''))]: + part_words = part_words.replace(remove.lower(), '') + part_words = re.sub(r'necesito|quiero|busco|para|un|una|el|la|de|del|los|las|mi|\d{4}', '', part_words).strip() + if len(part_words) >= 3: + effective_query = part_words + + if effective_query and master and tenant: try: results = catalog_service.smart_search( - master, search_query, tenant, branch_id, limit=10 + master, effective_query, tenant, branch_id, limit=10 ) search_results = results if results else [] except Exception: diff --git a/pos/services/ai_chat.py b/pos/services/ai_chat.py index 9247940..7aa61f0 100644 --- a/pos/services/ai_chat.py +++ b/pos/services/ai_chat.py @@ -10,28 +10,36 @@ MODEL = "anthropic/claude-haiku-4.5" # Fast + cheap for chat SYSTEM_PROMPT = """Eres un asistente de refaccionaria automotriz mexicana. Tu trabajo es ayudar a encontrar autopartes. -Cuando el usuario describe lo que necesita, extrae: -1. Marca del vehiculo (si la menciona) -2. Modelo del vehiculo (si lo menciona) -3. Ano del vehiculo (si lo menciona) -4. Tipo de parte que busca - -Responde en espanol, de forma breve y directa. Si puedes identificar el numero de parte OEM, incluyelo. -Si no tienes suficiente informacion, pregunta lo que falte. - -IMPORTANTE: Responde SIEMPRE en formato JSON con esta estructura: +IMPORTANTE: Responde SIEMPRE en formato JSON valido con esta estructura: { - "message": "Tu respuesta al usuario", - "search_query": "texto para buscar en el catalogo" | null, - "vehicle": {"brand": "TOYOTA", "model": "Corolla", "year": 2020} | null + "message": "Tu respuesta al usuario en espaƱol", + "search_query": "termino de busqueda EN INGLES para el catalogo", + "vehicle": {"brand": "TOYOTA", "model": "Corolla", "year": 2020} } -Reglas: -- "message" es tu respuesta conversacional al usuario. -- "search_query" es el texto clave para buscar partes en la base de datos (nombre de parte en ingles, numero OEM, etc). Usa null si no hay busqueda. -- "vehicle" extrae marca, modelo y ano si los menciona. Usa null si no hay vehiculo. -- La marca debe ir en MAYUSCULAS (NISSAN, TOYOTA, CHEVROLET, etc). -- Nombres comunes mexicanos: Tsuru = Sentra/Tsuru, Aveo, Jetta, Pointer, Chevy = Corsa, Vocho = Beetle. +Reglas OBLIGATORIAS: +1. "search_query" SIEMPRE debe tener un valor cuando el usuario menciona una parte. NUNCA dejes null si el usuario pide algo. +2. "search_query" debe estar EN INGLES porque el catalogo TecDoc tiene nombres en ingles. Traducciones comunes: + - Balatas/Pastillas de freno = "Brake Pad" + - Discos de freno = "Brake Disc" + - Amortiguador = "Shock Absorber" + - Filtro de aceite = "Oil Filter" + - Filtro de aire = "Air Filter" + - Bujias = "Spark Plug" + - Banda serpentina = "V-Belt" o "Serpentine Belt" + - Bomba de agua = "Water Pump" + - Alternador = "Alternator" + - Radiador = "Radiator" + - Sensor de oxigeno = "Oxygen Sensor" + - Terminal de direccion = "Tie Rod End" + - Bomba de gasolina = "Fuel Pump" + - Clutch/Embrague = "Clutch Kit" + - Mofle/Escape = "Exhaust" + - Inyector = "Injector" +3. "vehicle" extrae marca, modelo y ano. La marca en MAYUSCULAS. +4. Nombres mexicanos: Tsuru = TSURU, Aveo = AVEO, Jetta = JETTA, Pointer = POINTER, Chevy = CORSA, Vocho = BEETLE. +5. No preguntes mas info si ya puedes buscar. Si el usuario dice "balatas para Tsuru 2015", busca directo. +6. "message" es breve y directo: "Buscando balatas para Nissan Tsuru 2015..." """