import os import gradio as gr from gradio_client import Client import json from dotenv import load_dotenv load_dotenv() BACKEND_SPACE = "Omartificial-Intelligence-Space/backend" HF_TOKEN = os.getenv("HF_TOKEN") API_KEY = os.getenv("API_ACCESS_KEY", "") client = Client(BACKEND_SPACE, hf_token=HF_TOKEN) def query_backend(message): if not message.strip(): return {"response": " الرجاء إدخال استفسار صالح."} print(f"إرسال الاستفسار إلى الخلفية: {message}") try: result = client.predict( query=message, api_key_check=API_KEY, api_name="/process_query" ) print(f" استجابة الخلفية: {result}") if isinstance(result, str): return {"response": result} elif isinstance(result, dict) and "response" in result: return result else: return {"response": "تنسيق استجابة غير متوقع."} except Exception as e: print(f"خطأ: {str(e)}") return {"response": f" خطأ: {str(e)}"} import time def respond(message, chat_history): if not message.strip(): return "", chat_history chat_history = chat_history + [{"role": "user", "content": message}] chat_history = chat_history + [{"role": "assistant", "content": "⏳ جاري البحث ..."}] yield "", chat_history backend_response = query_backend(message) if isinstance(backend_response, dict) and "response" in backend_response: answer = backend_response["response"] else: answer = backend_response chat_history[-1] = {"role": "assistant", "content": answer} yield "", chat_history # تحديث الدردشة بالإجابة النهائية example_questions = [ "من هو راوي حديث مَنْ حَجَّ لِلهِ فَلَمْ يَرْفُثْ وَلَمْ يَفْسُقْ رَجَعَ كَيَوْمِ وَلَدَتْهُ أُمُّهُ؟", "ماذا قيل عن عبدالرحمن بن عبدالله بن عتبة بن مسعود؟", "اريد حديث عن فضل بيان فضل قراءة القرآن في الصلاة.", "اذكر ثلاث فوائد لهذا الحديث : عن عبد الله بن عمرو رضي الله عنهما قال: قال رسول الله صلى الله عليه وسلم: «يقالُ لصاحبِ القرآن: اقرَأ وارتَقِ، ورتِّل كما كُنْتَ ترتِّل في الدُنيا، فإن منزِلَكَ عندَ آخرِ آية تقرؤه»" ] LOGO_PATH = "image.png" with gr.Blocks(title="مساعد قاعدة بيانات الحديث الشريف") as demo: with gr.Row(): with gr.Column(scale=1, min_width=100): gr.Image(value=LOGO_PATH, show_label=False, interactive=False, height=80, width=80) with gr.Column(scale=8): gr.HTML( """