| | import gradio as gr |
| | from google import genai |
| | from google.genai import types |
| |
|
| | |
| | client = genai.Client(api_key='AIzaSyBZ26ErI0Q5hya4L4u-H3nBnv09AYVBWMA') |
| |
|
| | def query_gemini(message, history): |
| | """ |
| | Query the Gemini model with file search capabilities and conversation history |
| | |
| | Args: |
| | message (str): The user's current message |
| | history (list): The conversation history in messages format |
| | |
| | Returns: |
| | str: The model's response |
| | """ |
| | if not message.strip(): |
| | return "⚠️ يرجى إدخال سؤال" |
| | |
| | try: |
| | |
| | |
| | contents = [] |
| | |
| | |
| | for msg in history: |
| | |
| | if msg['role'] == 'user': |
| | contents.append(types.Content( |
| | role='user', |
| | parts=[types.Part(text=msg['content'])] |
| | )) |
| | elif msg['role'] == 'assistant': |
| | contents.append(types.Content( |
| | role='model', |
| | parts=[types.Part(text=msg['content'])] |
| | )) |
| | |
| | |
| | contents.append(types.Content( |
| | role='user', |
| | parts=[types.Part(text=message)] |
| | )) |
| | |
| | |
| | response = client.models.generate_content( |
| | model="gemini-flash-latest", |
| | contents=contents, |
| | config=types.GenerateContentConfig( |
| | tools=[ |
| | types.Tool( |
| | file_search=types.FileSearch( |
| | file_search_store_names=[ |
| | "fileSearchStores/sanhouri-dwquoge2cowu", |
| | "fileSearchStores/sanhouri1-oq0fg9gnv444" |
| | ] |
| | ) |
| | ) |
| | ] |
| | ) |
| | ) |
| | |
| | return response.text |
| | |
| | except Exception as e: |
| | return f"❌ حدث خطأ: {str(e)}" |
| |
|
| | |
| | with gr.Blocks( |
| | theme=gr.themes.Soft( |
| | primary_hue="blue", |
| | secondary_hue="indigo" |
| | ), |
| | title="تحدث مع السنهوري", |
| | css=""" |
| | .gradio-container {direction: rtl;} |
| | .contain {max-width: 1000px; margin: auto;} |
| | .message-wrap {direction: rtl !important;} |
| | """ |
| | ) as demo: |
| | |
| | |
| | gr.Markdown( |
| | """ |
| | # 👨⚖️ تحدث مع السنهوري |
| | ### محادثة تفاعلية مع خبير القانون المدني باستخدام Gemini AI |
| | #### 💬 يحفظ النموذج سياق المحادثة للإجابات الأكثر دقة |
| | """ |
| | ) |
| | |
| | |
| | gr.ChatInterface( |
| | fn=query_gemini, |
| | type="messages", |
| | chatbot=gr.Chatbot( |
| | label="محادثة", |
| | height=500, |
| | rtl=True, |
| | show_copy_button=True, |
| | avatar_images=(None, "🎓") |
| | ), |
| | textbox=gr.Textbox( |
| | placeholder="اكتب سؤالك عن القانون المدني هنا...", |
| | container=False, |
| | scale=7, |
| | rtl=True |
| | ), |
| | examples=[ |
| | "كيف عالج القانون المدني الجديد التهديد المالي؟", |
| | "ما هي شروط صحة العقد في القانون المدني؟", |
| | "كيف ينظم القانون المدني المسؤولية التقصيرية؟", |
| | "ما هي أركان العقد؟", |
| | "اشرح لي مفهوم السبب في العقود", |
| | ], |
| | ) |
| | |
| | |
| | gr.Markdown( |
| | """ |
| | --- |
| | **ℹ️ ملاحظة:** هذا المساعد الذكي يبحث في قواعد بيانات القانون المدني (موسوعة السنهوري) |
| | للحصول على إجابات دقيقة وموثوقة. |
| | |
| | **💡 مميزات:** |
| | - 🧠 يتذكر سياق المحادثة الكاملة |
| | - 🔍 يبحث في قواعد بيانات القانون المدني |
| | - 💬 يمكنك طرح أسئلة متتابعة ومترابطة |
| | - 📝 يمكنك الرجوع لأي نقطة سابقة في المحادثة |
| | |
| | **💭 نصيحة:** استخدم أزرار "Retry" لإعادة توليد الإجابة أو "Undo" للتراجع عن آخر رسالة |
| | """ |
| | ) |
| |
|
| | |
| | if __name__ == "__main__": |
| | demo.launch( |
| | share=True, |
| | server_name="0.0.0.0" |
| | |
| | ) |