shalabyelectronics commited on
Commit
853f3aa
·
verified ·
1 Parent(s): 53adf91

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -41
app.py CHANGED
@@ -1,68 +1,81 @@
1
  import gradio as gr
2
- import google.generativeai as genai
3
  import os
 
4
 
5
- # 1. إعداد مفتاح Gemini من الإعدادات السرية
6
  api_key = os.getenv("GEMINI_API_KEY")
7
 
8
- # التحقق من وجود المفتاح
9
- if not api_key:
10
- raise ValueError("لم يتم العثور على مفتاح API. تأكد من إضافته في Settings -> Secrets")
11
-
12
- # إعداد المكتبة
13
- genai.configure(api_key=api_key)
14
-
15
- # دالة التحليل (ترسل النص لـ Gemini وتعالجه)
16
  def analyze_sentiment(text):
17
  if not text:
18
- return "يرجى إدخال نص للتحليل.", "⚪"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  try:
21
- # اختيار أسرع نموذج
22
- model = genai.GenerativeModel('gemini-pro')
23
-
24
- # 2. هندسة التلقين (Prompt Engineering)
25
- # نطلب من Gemini أن يتصرف كمحلل بيانات محترف
26
- prompt = f"""
27
- تصرف كمحلل مشاعر محترف للهجات العربية.
28
- قم تحليل النص التالي: "{text}"
29
-
30
- المطلوب منك إخراج الرد بصيغة محددة جداً كالتالي:
31
- السطر الأول: التصنيف (إيجابي أو سلبي أو محايد)
32
- السطر الثاني: جملة قصيرة جداً تشرح السبب.
33
- السطر الثالث: نسبة الثقة (رقم تقديري من عندك مثل 95%).
34
- """
35
 
36
- response = model.generate_content(prompt)
37
- result = response.text.strip()
38
-
39
- # 3. تنسيق النتيجة للعرض
40
- # Gemini سيعيد النص ونحن نعرضه كما هو
41
 
42
- # تحديد الإيموجي بناءً على الكلمات في الرد
 
 
 
 
 
 
43
  emoji = "🤔"
44
- if "إيجابي" in result:
45
  emoji = "🤩 إيجابي"
46
- elif "سلبي" in result:
47
  emoji = "😡 سلبي"
48
  else:
49
  emoji = "😐 محايد"
50
 
51
- return result, emoji
52
 
53
  except Exception as e:
54
  return f"حدث خطأ في الاتصال: {str(e)}", "❌ فشل"
55
 
56
- # 4. تصميم الواجهة (Entibaa Style)
57
  with gr.Blocks(theme=gr.themes.Soft(), css=".gradio-container {direction: rtl; text-align: right;}") as demo:
58
 
59
  gr.Markdown("# 📊 تطبيق انطباع (Entibaa)")
60
- gr.Markdown("### أداة تحليل مشاعر الجمهور باستخدام الذكاء الاصطناعي (Gemini AI)")
61
 
62
  with gr.Row():
63
  input_text = gr.Textbox(
64
  label="أدخل التعليق هنا",
65
- placeholder="مثال: المنتج ممتاز جداً ولكن التوصيل تأخر قليلاً...",
66
  lines=3,
67
  text_align="right"
68
  )
@@ -70,13 +83,9 @@ with gr.Blocks(theme=gr.themes.Soft(), css=".gradio-container {direction: rtl; t
70
  analyze_btn = gr.Button("تحليل الانطباع 🚀", variant="primary")
71
 
72
  with gr.Row():
73
- # مكان عرض النتيجة التفصيلية
74
  output_text = gr.Textbox(label="تقرير التحليل", lines=4, text_align="right")
75
- # مكان عرض الحالة المختصرة
76
  sentiment_badge = gr.Label(label="النتيجة النهائية")
77
 
78
- # ربط الزر بالدالة
79
  analyze_btn.click(analyze_sentiment, inputs=input_text, outputs=[output_text, sentiment_badge])
80
 
81
- # تشغيل التطبيق
82
  demo.launch()
 
1
  import gradio as gr
2
+ import requests
3
  import os
4
+ import json
5
 
6
+ # 1. جلب المفتاح
7
  api_key = os.getenv("GEMINI_API_KEY")
8
 
 
 
 
 
 
 
 
 
9
  def analyze_sentiment(text):
10
  if not text:
11
+ return "يرجى إدخال نص.", "⚪"
12
+
13
+ if not api_key:
14
+ return "خطأ: لم يتم العثور على مفتاح API Key.", "❌"
15
+
16
+ # 2. الرابط المباشر لنموذج Gemini 1.5 Flash (الأسرع والأحدث)
17
+ url = f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={api_key}"
18
+
19
+ # 3. تجهيز الرسالة (Prompt)
20
+ prompt_text = f"""
21
+ أنت خبير في تحليل المشاعر للنصوص العربية (اللهجات والفصحى).
22
+ حلل هذا النص: "{text}"
23
+
24
+ القواعد الصارمة للإجابة:
25
+ 1. صنف النص إلى واحد من ثلاثة: (إيجابي، سلبي، محايد).
26
+ 2. اذكر السبب في جملة واحدة قصيرة.
27
+ 3. أعط نسبة ثقة (مثلاً 90%).
28
+
29
+ نسق الإجابة بحيث تكون واضحة ومختصرة.
30
+ """
31
+
32
+ payload = {
33
+ "contents": [{
34
+ "parts": [{"text": prompt_text}]
35
+ }]
36
+ }
37
+
38
+ headers = {'Content-Type': 'application/json'}
39
 
40
  try:
41
+ # 4. الإرسال المباشر (تجاوزنا المكتبة التي تسبب المشاكل)
42
+ response = requests.post(url, headers=headers, data=json.dumps(payload))
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
+ if response.status_code != 200:
45
+ return f"خطأ من جوجل: {response.text}", "❌"
46
+
47
+ data = response.json()
 
48
 
49
+ # استخراج النص من الرد المعقد
50
+ try:
51
+ result_text = data['candidates'][0]['content']['parts'][0]['text']
52
+ except:
53
+ return "لم يتمكن النموذج من توليد رد مفهوم.", "⚠️"
54
+
55
+ # تحديد الإيموجي
56
  emoji = "🤔"
57
+ if "إيجابي" in result_text:
58
  emoji = "🤩 إيجابي"
59
+ elif "سلبي" in result_text:
60
  emoji = "😡 سلبي"
61
  else:
62
  emoji = "😐 محايد"
63
 
64
+ return result_text, emoji
65
 
66
  except Exception as e:
67
  return f"حدث خطأ في الاتصال: {str(e)}", "❌ فشل"
68
 
69
+ # تصميم الواجهة
70
  with gr.Blocks(theme=gr.themes.Soft(), css=".gradio-container {direction: rtl; text-align: right;}") as demo:
71
 
72
  gr.Markdown("# 📊 تطبيق انطباع (Entibaa)")
73
+ gr.Markdown("### أداة تحليل مشاعر الجمهور (Gemini 1.5 Flash Direct API)")
74
 
75
  with gr.Row():
76
  input_text = gr.Textbox(
77
  label="أدخل التعليق هنا",
78
+ placeholder="اكتب تعليقاً للتجربة...",
79
  lines=3,
80
  text_align="right"
81
  )
 
83
  analyze_btn = gr.Button("تحليل الانطباع 🚀", variant="primary")
84
 
85
  with gr.Row():
 
86
  output_text = gr.Textbox(label="تقرير التحليل", lines=4, text_align="right")
 
87
  sentiment_badge = gr.Label(label="النتيجة النهائية")
88
 
 
89
  analyze_btn.click(analyze_sentiment, inputs=input_text, outputs=[output_text, sentiment_badge])
90
 
 
91
  demo.launch()