Spaces:
Running
Running
| """Shared text helpers.""" | |
| from __future__ import annotations | |
| import re | |
| def message_text(content): | |
| """Normalize Gradio / chat payloads to plain text (never use str(ChatMessage)).""" | |
| if content is None: | |
| return "" | |
| if isinstance(content, str): | |
| return content | |
| # Gradio 5/6 ChatMessage / objects with .content (str or multimodal list) | |
| if hasattr(content, "content") and not isinstance(content, (dict, list, tuple)): | |
| return message_text(getattr(content, "content", None)) | |
| if isinstance(content, dict): | |
| if "text" in content: | |
| return message_text(content.get("text")) | |
| if "content" in content: | |
| return message_text(content.get("content")) | |
| return "" | |
| if isinstance(content, (list, tuple)): | |
| parts = [] | |
| for part in content: | |
| if isinstance(part, dict) and part.get("type") == "text": | |
| parts.append(message_text(part.get("text"))) | |
| else: | |
| parts.append(message_text(part)) | |
| return "\n".join(filter(None, parts)) | |
| return str(content) | |
| def has_khmer(text): | |
| return bool(re.search(r"[\u1780-\u17FF]", text or "")) | |
| def needs_product_data(text): | |
| keywords = [ | |
| "ααααα", | |
| "price", | |
| "size", | |
| "ααα α", | |
| "αααα»α", | |
| "stock", | |
| "ααΆαααα", | |
| "ααΆααα", | |
| "ααΆαα’αα", | |
| "ααα·ααα", | |
| "αααα·α", | |
| "αααααΈ", | |
| "list", | |
| "α’αΆα", | |
| "α’αΆαααΊα", | |
| "αα", | |
| "αααααααΎα", | |
| "ααΆααΌα", | |
| "αα½α", | |
| "ααΆα‘α·ααΆ", | |
| "ααααα", | |
| "αααα", | |
| "ααα", | |
| "ααααΉα", | |
| "ααα·ααΆ", | |
| "sale", | |
| "promo", | |
| "discount", | |
| "hoodie", | |
| "t-shirt", | |
| "tshirt", | |
| "tee", | |
| "hat", | |
| "backpack", | |
| "jacket", | |
| "chino", | |
| "jogger", | |
| "pant", | |
| "pants", | |
| "jean", | |
| "jeans", | |
| "shirt", | |
| "product", | |
| "produt", | |
| "produts", | |
| "buy", | |
| "got", | |
| "hv", | |
| "have", | |
| "need", | |
| "find", | |
| "search", | |
| "want", | |
| "wanna", | |
| "αα·α", | |
| "α αααα·α", | |
| "αα", | |
| "αααΆααΆ", | |
| "αααΌ", | |
| "shoe", | |
| "watch", | |
| "belt", | |
| "sock", | |
| "underwear", | |
| "nike", | |
| "adidas", | |
| "blk", | |
| "black", | |
| "new", | |
| "ααααΈ", | |
| ] | |
| lower = text.lower() | |
| return any(k.lower() in lower for k in keywords) | |
| def is_bestseller_question(text): | |
| keywords = [ | |
| "αααααΆα α", | |
| "αααααααΆαα", | |
| "best seller", | |
| "bestseller", | |
| "best-selling", | |
| "best selling", | |
| "top seller", | |
| "top-selling", | |
| "popular", | |
| "most popular", | |
| "trending", | |
| "ααααα·αα", | |
| "ααΆα ααααα»α", | |
| "αααα αααΎα", | |
| "αααα·ααααααΆα α", | |
| ] | |
| lower = text.lower() | |
| return any(k.lower() in lower for k in keywords) | |