Trump:Colombia is very sick — run by a sick man wh

← العودة
Blog Post

عنوان المحادثة: Trump:Colombia is very sick — run by a sick man who likes making cocai...

التاريخ: 05.01.2026

التصنيف: 🧠 الذكاء الاصطناعي وتعلم الآلة

إجمالي الرسائل: 16 | ياسر: 8 | M: 8

Yasser
Trump:Colombia is very sick — run by a sick man who likes making cocaine and selling it to the United States. And he’s not going to be doing it very long.An operation by the U.S. sounds good to me.
Yasser
Senator Graham:You just wait for Cuba. Cuba is a communist dictatorship that’s killed priests and nuns. They’ve preyed on their own people. Their days are numbered. We’re going to wake up one day — I hope in ’26 — and in our backyard, we’re going to have allies in these countries doing business with America, not terrorist dictators killing Americans.
Yasser
هتعطي ال AI لوب مكون من مرحلتين مع بريك
المحادثة الكاملة - 05.01.2026
ياسر
Trump:Colombia is very sick — run by a sick man who likes making cocaine and selling it to the United States. And he’s not going to be doing it very long.An operation by the U.S. sounds good to me.
05.01.2026 12:18
ياسر
Senator Graham:You just wait for Cuba. Cuba is a communist dictatorship that’s killed priests and nuns. They’ve preyed on their own people. Their days are numbered. We’re going to wake up one day — I hope in ’26 — and in our backyard, we’re going to have allies in these countries doing business with America, not terrorist dictators killing Americans.
05.01.2026 12:18
ياسر
git branch rag
05.01.2026 15:20
ياسر
git checkout rag
05.01.2026 15:20
M
## ❌ لا، RAG للسيارات مش فكرة كويسةدعني أوضحلك ليش:---## 🚫 المشاكل مع RAG لبيانات السيارات:### 1️⃣ البيانات متغيرة باستمرار:اليوم: هيونداي أكسنت 2024 - 85,000 ريال ✅ متوفرةغداً: ❌ تم البيعبعد يومين: 87,000 ريال ✅ متوفرة (سعر جديد)RAG سيعطيك: معلومات قديمة ❌### 2️⃣ التوفر الفوري مهم:- العميل: "عندكم هيونداي أكسنت؟"- RAG: "نعم متوفرة" (لكن ممكن انباعت قبل ساعة!)- النتيجة: تجربة سيئة للعميل ❌### 3️⃣ الألوان المتاحة تتغير:- اليوم: أبيض، أسود، فضي متوفرين- الأسبوع الجاي: الأسود خلص- RAG: سيقول متوفر ❌### 4️⃣ تحديث Vector DB مكلف:# كل ما تتغير سيارة، لازم:1. Delete old embedding2. Create new embedding3. Re-index4. Sync with API# لو عندك 500 سيارة وتتحدث يومياً؟ 💸💸---## ✅ الحل الأفضل: Hybrid Semantic Search### 📌 النهج المقترح:# 1. Cache السيارات من API (تتحدث كل ساعة)# 2. Semantic search على الـ cache المحلي# 3. التحقق من API للتوفر والسعر النهائي### مثال عملي:# المستخدم: "أبي سيارة عائلية اقتصادية"# الخطوة 1: Semantic Search (محلي - سريع)candidates = semantic_search("عائلية اقتصادية")# → [Hyundai Accent, Kia Pegas, Nissan Sunny]# الخطوة 2: التحقق من API (حي - دقيق)for car in candidates: live_data = api.get_car_realtime(car.id) if live_data.is_available and live_data.price results.append(live_data) # بيانات حية ✅---## 🎯 استخدامات مناسبة لـ RAG:| البيانات | RAG ينفع؟ | السبب ||---------|----------|-------|| السيارات المتوفرة | ❌ لا | تتغير باستمرار || الأسعار | ❌ لا | متغيرة || الألوان المتاحة | ❌ لا | تنفذ وتتجدد || مواصفات السيارة الثابتة | ✅ نعم | المحرك، السعة، إلخ || مقارنات بين موديلات | ✅ نعم | معلومات عامة || مراجعات السيارات | ✅ نعم | محتوى ثابت |---## 💡 التوصية النهائية:### الطريقة الحالية (Function Calling + API) هي الأفضل لأنها:1. ✅ دائماً محدّثة - تجيب من API مباشرة2. ✅ دقيقة 100% - السعر والتوفر الحقيقي3. ✅ بسيطة - بدون تعقيد Vector DB4. ✅ اقتصادية - ما فيه تكلفة embeddings مستمرة### 🔧 التحسينات الممكنة (بدون RAG):# 1. Cache ذكي (1-2 ساعة)@cache(ttl=3600)async def search_cars(filters): return await api.get_cars(filters)# 2. Fuzzy Search أفضل"هونداي" → "هيونداي" ✅"اكسنت" → "أكسنت" ✅# 3. NLP للاستخراج"أبي سيارة عائلية بـ 80 ألف" → {category: "sedan", budget: 80000}---## 🎬 الخلاصة:RAG للسيارات = ❌ فكرة سيئةالسبب: البيانات حية ومتغيرة، تحتاج API مباشرالبديل: استمر بالطريقة الحالية (ممتازة!) + حسّن الـ caching والبحثهل تبي أطبقلك تحسينات البحث والـ caching؟ 🚀
05.01.2026 16:18
M
عم بحاول اخلي ال ai يجيبلي زي مبارح انو سيارات غلط بس ما عم بجيب
05.01.2026 16:19
ياسر
هتعطي ال AI لوب مكون من مرحلتين مع بريك
05.01.2026 16:28
ياسر
AI تاني
05.01.2026 16:29
ياسر
بدي نظام أكثر ذكاء في ردود الذكاء الصناعي مكون من التالي: دالة كبيرة بتبدأ بإن نمرر رد العميل لل AI ثم ال AI يقرر قرار إما يرد وينهي الدالة أو ياخد قرارات إستدعاء دوال وكده ويتخزن رده كنص نهائيثم رده يتمرر بعدها لمرحلة ذكاء صناعي تانية تحلل لو المعلومات كافية وكويسة ولا لا لو كافية يصيغ منها رد ويبعته للعميل وينهي الدالةلو مش كافية يعيد إستدعاء الدالة تاني لكن مع مدخلات وهي محاولته الفاشلة علشان الذكاء الصناعي في المحاولة الجديدة ما يعيد نفس طلبات الدواللما يوصل لجواب كويس يبعته وينهي الريكرشن دهلو ملقاش رد في خلال 3 محاولات ريكرشن يرد بأفضل رد ممكن لكن بدون إختراع داتا غير حقيقية
05.01.2026 16:32
M
Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#1-1), lines 1 to 400Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#400-400), lines 400 to 543Searched for text ai_chat_service (**/backend/**), 10 resultsRead [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/api/chat.py#560-560), lines 560 to 720Created 4 todosUsing "Apply Patch"Using "Apply Patch"Using "Apply Patch"Using "Apply Patch"Using "Apply Patch"Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#1-1), lines 1 to 200Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#200-200), lines 200 to 520Searched for text VALIDATION_SYSTEM_PROMPT (**/backend/app/services/ai_chat.py), no resultsRead [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py)Using "Apply Patch"Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#1-1), lines 1 to 250Using "Apply Patch"Read [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#1-1), lines 1 to 5Using "Apply Patch"Ran terminal command: $content = @'"""AI Chat Service using GPT-4o-miniخدمة الذكاء الاصطناعي للمحادثة"""from openai import AsyncOpenAIfrom typing import Optional, List, Dict, Anyimport jsonimport refrom app.core.config import settingsfrom app.services.aldaman_client import aldaman_client# System Prompt للبوتSYSTEM_PROMPT = """أنت مساعد مبيعات ودود وذكي لشركة "أعمال الدمعان للسيارات" 🚗 في السعودية.تتحدث بالعربية بطريقة ودية ومهنية. استخدم الإيموجي بشكل معتدل.## مهمتك:مساعدة العملاء في اختيار وحجز السيارات بطريقة ودية ومحترفة.## المعلومات التي تحتاج جمعها (بالترتيب):1. **customer_type**: أفراد أو شركات2. payment_method: كاش أو تمويل3. budget: الميزانية4. selected_car: السيارة المختارة (من الأزرار)5. color: اللون المفضل (من الأزرار)6. quantity: (للشركات فقط) عدد السيارات7. name: الاسم الكامل8. phone: رقم الجوال9. city: المدينة (من الأزرار)10. company_name: (للشركات) اسم الشركة11. business_field: (للشركات) مجال العمل12. bank_name: (للتمويل فقط) اسم البنك (من الأزرار)13. source: كيف عرف عنا (من الأزرار)## ⚠️ قواعد مهمة:### 1. استخدم أزرار الخيارات دائماً:- عند السؤال عن اللون → أضف options بالألوان- عند السؤال عن المدينة → أضف options بالمدن- عند السؤال عن البنك → أضف options بالبنوك- عند السؤال عن المصدر → أضف options بالمصادر### 2. عند السؤال عن اللون:"اختيار رائع! 🎨 ما هو اللون المفضل لديك؟"options: [ {"id": "white", "label": "⚪️ أبيض", "value": "أبيض"}, {"id": "black", "label": "⚫️ أسود", "value": "أسود"}, {"id": "silver", "label": "🔘 فضي", "value": "فضي"}, {"id": "gray", "label": "⬜️ رمادي", "value": "رمادي"}, {"id": "blue", "label": "🔵 أزرق", "value": "أزرق"}, {"id": "red", "label": "🔴 أحمر", "value": "أحمر"}]### 3. عند السؤال عن المدينة:"ممتاز! 📍 في أي مدينة تتواجد؟"options: [ {"id": "riyadh", "label": "الرياض", "value": "الرياض"}, {"id": "jeddah", "label": "جدة", "value": "جدة"}, {"id": "dammam", "label": "الدمام", "value": "الدمام"}, {"id": "makkah", "label": "مكة المكرمة", "value": "مكة المكرمة"}, {"id": "madinah", "label": "المدينة المنورة", "value": "المدينة المنورة"}, {"id": "other", "label": "مدينة أخرى", "value": "أخرى"}]### 4. عند السؤال عن البنك (للتمويل):"🏦 ما هو البنك المفضل للتمويل؟"options: [ {"id": "alrajhi", "label": "مصرف الراجحي", "value": "الراجحي"}, {"id": "alinma", "label": "مصرف الإنماء", "value": "الإنماء"}, {"id": "snb", "label": "البنك الأهلي", "value": "الأهلي"}, {"id": "sab", "label": "بنك ساب", "value": "ساب"}, {"id": "riyad", "label": "بنك الرياض", "value": "الرياض"}, {"id": "other", "label": "بنك آخر", "value": "آخر"}]
05.01.2026 17:02
M
fallback = last_candidate or { "success": True, "message": fallback_message, "collected_field": None, "collected_value": None, "next_step": "chat", "is_complete": False, "options": [], "images": [], } fallback["message"] = fallback_message fallback["success"] = True return fallback except Exception as e: print(f"❌ AI Chat Error: {type(e).name}: {str(e)}") import traceback traceback.print_exc() return { "success": False, "message": "عذراً، حدث خطأ. يرجى المحاولة مرة أخرى. 🙏", "error": str(e), } def _build_candidate_payload( self, result: Dict[str, Any], user_wants_images: bool, cars_data: List[Dict[str, Any]], selected_car_from_message: Optional[Dict[str, Any]], ) -> Dict[str, Any]: """بناء الرد النهائي بعد مرحلة التوليد مع الصور والخيارات.""" images: List[Dict[str, Any]] = [] car_options: List[Dict[str, Any]] = [] message_text = result.get("message", "") show_cars_flag = result.get("show_cars", False) or result.get("show_images", False) should_show_cars = ( user_wants_images or show_cars_flag or "السيارات المتاحة" in message_text or "إليك السيارات" in message_text or "إليك الخيارات" in message_text or result.get("next_step") == "select_car" or result.get("collected_field") == "budget" ) if should_show_cars and cars_data: for car in cars_data[:6]: car_name = car.get("name", "سيارة") price = car.get("_calculated_price") if car.get("image_url"): images.append({ "url": car.get("image_url"), "title": car_name, "price": price, "car_id": car.get("id"), }) if price: car_options.append({ "id": str(car.get("id")), "label": f"{car_name} - {int(price):,} ريال", "value": car_name, }) final_options = car_options if car_options else result.get("options", []) collected_field = result.get("collected_field") collected_value = result.get("collected_value") if selected_car_from_message and not collected_field: collected_field = "selected_car" collected_value = selected_car_from_message.get("name") return { "success": True, "message": message_text, "collected_field": collected_field, "collected_value": collected_value, "next_step": result.get("next_step"), "is_complete": result.get("is_complete", False), "options": final_options, "images": images, }
05.01.2026 17:02
M
async def get_car_image(self, car_name: str) -> Optional[Dict]: """جلب صورة سيارة بالاسم""" car = self.find_car_by_name(car_name) if car and car.get("image_url"): return { "url": car.get("image_url"), "title": car.get("name"), "price": car.get("_calculated_price") or car.get("discount_price") or car.get("original_price"), "car_id": car.get("id"), } return None async def get_welcome_message(self) -> Dict[str, Any]: """رسالة الترحيب""" return { "message": "أهلاً وسهلاً بك في أعمال الدمعان للسيارات! 🚗✨\n\nيسعدني مساعدتك في اختيار سيارة أحلامك! 😊\n\nبدايةً، هل الحجز لك شخصياً أم لشركة؟", "options": [ {"id": "individual", "label": "👤 لي شخصياً (أفراد)", "value": "أفراد"}, {"id": "company", "label": "🏢 لشركة أو مؤسسة", "value": "شركات"} ], "next_step": "select_customer_type", "images": [] }# Singletonai_chat_service = AIChatService()'@Set-Content -Path "c:\Users\miraz\OneDrive\Desktop\cars\aldamancars\backend\app\services\ai_chat.py" -Value $contentRan terminal command: $content = @'"""AI Chat Service using GPT-4o-miniخدمة الذكاء الاصطناعي للمحادثة"""from openai import AsyncOpenAIfrom typing import Optional, List, Dict, Anyimport jsonimport refrom app.core.config import settingsfrom app.services.aldaman_client import aldaman_client# System Prompt للبوتSYSTEM_PROMPT = """أنت مساعد مبيعات ودود وذكي لشركة "أعمال الدمعان للسيارات" 🚗 في السعودية.تتحدث بالعربية بطريقة ودية ومهنية. استخدم الإيموجي بشكل معتدل.## مهمتك:مساعدة العملاء في اختيار وحجز السيارات بطريقة ودية ومحترفة.## المعلومات التي تحتاج جمعها (بالترتيب):1. customer_type: أفراد أو شركات2. payment_method: كاش أو تمويل3. budget: الميزانية4. selected_car: السيارة المختارة (من الأزرار)5. color: اللون المفضل (من الأزرار)6. quantity: (للشركات فقط) عدد السيارات7. name: الاسم الكامل8. phone: رقم الجوال9. city: المدينة (من الأزرار)10. company_name: (للشركات) اسم الشركة11. business_field: (للشركات) مجال العمل12. bank_name: (للتمويل فقط) اسم البنك (من الأزرار)13. source: كيف عرف عنا (من الأزرار)## ⚠️ قواعد مهمة:### 1. استخدم أزرار الخيارات دائماً:- عند السؤال عن اللون → أضف options بالألوان- عند السؤال عن المدينة → أضف options بالمدن- عند السؤال عن البنك → أضف options بالبنوك- عند السؤال عن المصدر → أضف options بالمصادر### 2. عند السؤال عن اللون:"اختيار رائع! 🎨 ما هو اللون المفضل لديك؟"options: [ {"id": "white", "label": "⚪️ أبيض", "value": "أبيض"}, {"id": "black", "label": "⚫️ أسود", "value": "أسود"}, {"id": "silver", "label": "🔘 فضي", "value": "فضي"}, {"id": "gray", "label": "⬜️ رمادي", "value": "رمادي"}, {"id": "blue", "label": "🔵 أزرق", "value": "أزرق"}, {"id": "red", "label": "🔴 أحمر", "value": "أحمر"}]### 3. عند السؤال عن المدينة:"ممتاز! 📍 في أي مدينة تتواجد؟"options: [ {"id": "riyadh", "label": "الرياض", "value": "الرياض"}, {"id": "jeddah", "label": "جدة", "value": "جدة"}, {"id": "dammam", "label": "الدمام", "value": "الدمام"}, {"id": "makkah", "label": "مكة المكرمة", "value": "مكة المكرمة"}, {"id": "madinah", "label": "المدينة المنورة", "value": "المدينة المنورة"}, {"id": "other", "label": "مدينة أخرى", "value": "أخرى"}]### 4. عند السؤال عن البنك (للتمويل):"🏦 ما هو البنك المفضل للتمويل؟"options: [ {"id": "alrajhi", "label": "مصرف الراجحي", "value": "الراجحي"}, {"id": "alinma", "label": "مصرف الإنماء", "value": "الإنماء"}, {"id": "snb", "label": "البنك الأهلي", "value": "الأهلي"}, {"id": "sab", "label": "بنك ساب", "value": "ساب"}, {"id": "riyad", "label": "بنك الرياض", "value": "الرياض"}, {"id": "other", "label": "بنك آخر", "value": "آخر"}]
05.01.2026 17:02
M
fallback = last_candidate or { "success": True, "message": fallback_message, "collected_field": None, "collected_value": None, "next_step": "chat", "is_complete": False, "options": [], "images": [], } fallback["message"] = fallback_message fallback["success"] = True return fallback except Exception as e: print(f"❌ AI Chat Error: {type(e).name}: {str(e)}") import traceback traceback.print_exc() return { "success": False, "message": "عذراً، حدث خطأ. يرجى المحاولة مرة أخرى. 🙏", "error": str(e), } def _build_candidate_payload( self, result: Dict[str, Any], user_wants_images: bool, cars_data: List[Dict[str, Any]], selected_car_from_message: Optional[Dict[str, Any]], ) -> Dict[str, Any]: """بناء الرد النهائي بعد مرحلة التوليد مع الصور والخيارات.""" images: List[Dict[str, Any]] = [] car_options: List[Dict[str, Any]] = [] message_text = result.get("message", "") show_cars_flag = result.get("show_cars", False) or result.get("show_images", False) should_show_cars = ( user_wants_images or show_cars_flag or "السيارات المتاحة" in message_text or "إليك السيارات" in message_text or "إليك الخيارات" in message_text or result.get("next_step") == "select_car" or result.get("collected_field") == "budget" ) if should_show_cars and cars_data: for car in cars_data[:6]: car_name = car.get("name", "سيارة") price = car.get("_calculated_price") if car.get("image_url"): images.append({ "url": car.get("image_url"), "title": car_name, "price": price, "car_id": car.get("id"), }) if price: car_options.append({ "id": str(car.get("id")), "label": f"{car_name} - {int(price):,} ريال", "value": car_name, }) final_options = car_options if car_options else result.get("options", []) collected_field = result.get("collected_field") collected_value = result.get("collected_value") if selected_car_from_message and not collected_field: collected_field = "selected_car" collected_value = selected_car_from_message.get("name") return { "success": True, "message": message_text, "collected_field": collected_field, "collected_value": collected_value, "next_step": result.get("next_step"), "is_complete": result.get("is_complete", False), "options": final_options, "images": images, }
05.01.2026 17:02
M
async def get_car_image(self, car_name: str) -> Optional[Dict]: """جلب صورة سيارة بالاسم""" car = self.find_car_by_name(car_name) if car and car.get("image_url"): return { "url": car.get("image_url"), "title": car.get("name"), "price": car.get("_calculated_price") or car.get("discount_price") or car.get("original_price"), "car_id": car.get("id"), } return None async def get_welcome_message(self) -> Dict[str, Any]: """رسالة الترحيب""" return { "message": "أهلاً وسهلاً بك في أعمال الدمعان للسيارات! 🚗✨\n\nيسعدني مساعدتك في اختيار سيارة أحلامك! 😊\n\nبدايةً، هل الحجز لك شخصياً أم لشركة؟", "options": [ {"id": "individual", "label": "👤 لي شخصياً (أفراد)", "value": "أفراد"}, {"id": "company", "label": "🏢 لشركة أو مؤسسة", "value": "شركات"} ], "next_step": "select_customer_type", "images": [] }# Singletonai_chat_service = AIChatService()'@Set-Content -Path "c:\Users\miraz\OneDrive\Desktop\cars\aldamancars\backend\app\services\ai_chat.py" -Value $contentRead [](file:///c%3A/Users/miraz/OneDrive/Desktop/cars/aldamancars/backend/app/services/ai_chat.py#1-1), lines 1 to 200Ran terminal command: $content = @'"""AI Chat Service using GPT-4o-miniخدمة الذكاء الاصطناعي للمحادثة"""from openai import AsyncOpenAIfrom typing import Optional, List, Dict, Anyimport jsonimport refrom app.core.config import settingsfrom app.services.aldaman_client import aldaman_client# System Prompt للبوتSYSTEM_PROMPT = """أنت مساعد مبيعات ودود وذكي لشركة "أعمال الدمعان للسيارات" 🚗 في السعودية.تتحدث بالعربية بطريقة ودية ومهنية. استخدم الإيموجي بشكل معتدل.## مهمتك:مساعدة العملاء في اختيار وحجز السيارات بطريقة ودية ومحترفة.## المعلومات التي تحتاج جمعها (بالترتيب):1. customer_type: أفراد أو شركات2. payment_method: كاش أو تمويل3. budget: الميزانية4. selected_car: السيارة المختارة (من الأزرار)5. color: اللون المفضل (من الأزرار)6. quantity: (للشركات فقط) عدد السيارات7. name: الاسم الكامل8. phone: رقم الجوال9. city: المدينة (من الأزرار)10. company_name: (للشركات) اسم الشركة11. business_field: (للشركات) مجال العمل12. bank_name: (للتمويل فقط) اسم البنك (من الأزرار)13. source: كيف عرف عنا (من الأزرار)## ⚠️ قواعد مهمة:### 1. استخدم أزرار الخيارات دائماً:- عند السؤال عن اللون → أضف options بالألوان- عند السؤال عن المدينة → أضف options بالمدن- عند السؤال عن البنك → أضف options بالبنوك- عند السؤال عن المصدر → أضف options بالمصادر### 2. عند السؤال عن اللون:"اختيار رائع! 🎨 ما هو اللون المفضل لديك؟"options: [ {"id": "white", "label": "⚪️ أبيض", "value": "أبيض"}, {"id": "black", "label": "⚫️ أسود", "value": "أسود"}, {"id": "silver", "label": "🔘 فضي", "value": "فضي"}, {"id": "gray", "label": "⬜️ رمادي", "value": "رمادي"}, {"id": "blue", "label": "🔵 أزرق", "value": "أزرق"}, {"id": "red", "label": "🔴 أحمر", "value": "أحمر"}]### 3. عند السؤال عن المدينة:"ممتاز! 📍 في أي مدينة تتواجد؟"options: [ {"id": "riyadh", "label": "الرياض", "value": "الرياض"}, {"id": "jeddah", "label": "جدة", "value": "جدة"}, {"id": "dammam", "label": "الدمام", "value": "الدمام"}, {"id": "makkah", "label": "مكة المكرمة", "value": "مكة المكرمة"}, {"id": "madinah", "label": "المدينة المنورة", "value": "المدينة المنورة"}, {"id": "other", "label": "مدينة أخرى", "value": "أخرى"}]### 4. عند السؤال عن البنك (للتمويل):"🏦 ما هو البنك المفضل للتمويل؟"options: [ {"id": "alrajhi", "label": "مصرف الراجحي", "value": "الراجحي"}, {"id": "alinma", "label": "مصرف الإنماء", "value": "الإنماء"}, {"id": "snb", "label": "البنك الأهلي", "value": "الأهلي"}, {"id": "sab", "label": "بنك ساب", "value": "ساب"}, {"id": "riyad", "label": "بنك الرياض", "value": "الرياض"}, {"id": "other", "label": "بنك آخر", "value": "آخر"}]
05.01.2026 17:02
M
fallback = last_candidate or { "success": True, "message": fallback_message, "collected_field": None, "collected_value": None, "next_step": "chat", "is_complete": False, "options": [], "images": [], } fallback["message"] = fallback_message fallback["success"] = True return fallback except Exception as e: print(f"❌ AI Chat Error: {type(e).name}: {str(e)}") import traceback traceback.print_exc() return { "success": False, "message": "عذراً، حدث خطأ. يرجى المحاولة مرة أخرى. 🙏", "error": str(e), } def _build_candidate_payload( self, result: Dict[str, Any], user_wants_images: bool, cars_data: List[Dict[str, Any]], selected_car_from_message: Optional[Dict[str, Any]], ) -> Dict[str, Any]: """بناء الرد النهائي بعد مرحلة التوليد مع الصور والخيارات.""" images: List[Dict[str, Any]] = [] car_options: List[Dict[str, Any]] = [] message_text = result.get("message", "") show_cars_flag = result.get("show_cars", False) or result.get("show_images", False) should_show_cars = ( user_wants_images or show_cars_flag or "السيارات المتاحة" in message_text or "إليك السيارات" in message_text or "إليك الخيارات" in message_text or result.get("next_step") == "select_car" or result.get("collected_field") == "budget" ) if should_show_cars and cars_data: for car in cars_data[:6]: car_name = car.get("name", "سيارة") price = car.get("_calculated_price") if car.get("image_url"): images.append({ "url": car.get("image_url"), "title": car_name, "price": price, "car_id": car.get("id"), }) if price: car_options.append({ "id": str(car.get("id")), "label": f"{car_name} - {int(price):,} ريال", "value": car_name, }) final_options = car_options if car_options else result.get("options", []) collected_field = result.get("collected_field") collected_value = result.get("collected_value") if selected_car_from_message and not collected_field: collected_field = "selected_car" collected_value = selected_car_from_message.get("name") return { "success": True, "message": message_text, "collected_field": collected_field, "collected_value": collected_value, "next_step": result.get("next_step"), "is_complete": result.get("is_complete", False), "options": final_options, "images": images, }
05.01.2026 17:02
ياسر
الكوتشي الحريمي Nike Air Force الغني عن التعريفقطعه أساسيه لا يمكن الاستغناء عنها , بطانه داخليه لشعور أكثر راحهتقفيل مميز جدا , يضاهي الاوريجينال بكل تفاصيله نعل حقن , فرش محترم مريح جدا , مقاسات من 41:37كوتشي كل المناسبات يليق علي اكتر من outfit
05.01.2026 17:18
← العودة إلى الرئيسية