leilaghomashchi commited on
Commit
af857d7
·
verified ·
1 Parent(s): b72edc1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -60
app.py CHANGED
@@ -8,15 +8,16 @@ import re
8
 
9
  @dataclass
10
  class CerebrasConfig:
11
- """تنظیمات Cerebras API"""
12
  api_key: str
13
  base_url: str = "https://api.cerebras.ai/v1"
14
- model: str = "qwen-3-32b" # مدل سبک برای سرعت بیشتر
15
  max_tokens: int = 2000
16
- temperature: float = 0.6
 
17
 
18
  class AdvancedCerebrasAnonymizer:
19
- """سیستم پیشرفته ناشناس‌سازی متون مالی/خبری فارسی"""
20
 
21
  def __init__(self, api_key: str = None):
22
  if api_key is None:
@@ -28,7 +29,7 @@ class AdvancedCerebrasAnonymizer:
28
  self.system_prompt = self._create_advanced_system_prompt()
29
 
30
  def _create_advanced_system_prompt(self) -> str:
31
- """ایجاد دستورالعمل سیستمی فشرده برای Llama 3.1-8B"""
32
  return """شما متن‌های مالی فارسی را ناشناس می‌کنید. اسامی خاص و اعداد را با شناسه جایگزین کنید.
33
 
34
  ## قوانین اندیس‌گذاری:
@@ -86,7 +87,7 @@ class AdvancedCerebrasAnonymizer:
86
  فقط متن ناشناس‌شده را برگردان، بدون توضیح."""
87
 
88
  def _make_api_request(self, text: str) -> Dict[str, Any]:
89
- """ارسال درخواست به Cerebras API"""
90
  headers = {
91
  "Authorization": f"Bearer {self.config.api_key}",
92
  "Content-Type": "application/json"
@@ -105,6 +106,7 @@ class AdvancedCerebrasAnonymizer:
105
  ],
106
  "model": self.config.model,
107
  "temperature": self.config.temperature,
 
108
  "max_tokens": self.config.max_tokens
109
  }
110
 
@@ -113,7 +115,7 @@ class AdvancedCerebrasAnonymizer:
113
  f"{self.config.base_url}/chat/completions",
114
  headers=headers,
115
  json=payload,
116
- timeout=45
117
  )
118
  response.raise_for_status()
119
  return response.json()
@@ -122,7 +124,7 @@ class AdvancedCerebrasAnonymizer:
122
  raise Exception(f"خطا در ارتباط با Cerebras API: {str(e)}")
123
 
124
  def anonymize_text(self, text: str) -> Dict[str, Any]:
125
- """ناشناس‌سازی متن با استفاده از Cerebras"""
126
  if not text.strip():
127
  return {
128
  "success": False,
@@ -305,6 +307,14 @@ def create_advanced_interface():
305
  color: #155724;
306
  margin: 10px 0;
307
  }
 
 
 
 
 
 
 
 
308
  .stats-grid {
309
  display: grid;
310
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
@@ -336,13 +346,22 @@ def create_advanced_interface():
336
  }
337
  """
338
 
339
- with gr.Blocks(css=custom_css, title="ناشناس‌ساز پیشرفته متن فارسی با Cerebras", theme=gr.themes.Soft()) as interface:
340
 
341
  # عنوان
342
  gr.Markdown("""
343
  # 🔒 سیستم پیشرفته ناشناس‌سازی متون مالی/خبری فارسی
344
- ### ⚡ قدرت‌گرفته از Cerebras AI - سریع‌ترین استنباط LLM در جهان!
345
- #### 🎯 بهینه شده برای Llama 3.1-8B
 
 
 
 
 
 
 
 
 
346
  """)
347
 
348
  # نمایش وضعیت API
@@ -377,7 +396,7 @@ def create_advanced_interface():
377
 
378
  with gr.Row():
379
  anonymize_btn = gr.Button(
380
- "🔒 ناشناس‌سازی با Cerebras",
381
  variant="primary",
382
  size="lg"
383
  )
@@ -426,7 +445,7 @@ def create_advanced_interface():
426
  usage_output = gr.Markdown(label="⚡ اطلاعات پردازش")
427
 
428
  def process_advanced_text(text: str, api_key_manual: str = ""):
429
- """پردازش پیشرفته متن"""
430
  # حل مشکل NoneType
431
  if api_key_manual is None:
432
  api_key_manual = ""
@@ -546,13 +565,15 @@ def create_advanced_interface():
546
 
547
  # اطلاعات پردازش
548
  usage = result.get("usage", {})
549
- usage_md = "⚡ **اطلاعات پردازش Cerebras:**\n\n"
550
  if usage:
551
  usage_md += f"🤖 **مدل:** {anonymizer.config.model}\n"
 
 
552
  usage_md += f"📥 **Token های ورودی:** {usage.get('prompt_tokens', 'نامشخص')}\n"
553
  usage_md += f"📤 **Token های خروجی:** {usage.get('completion_tokens', 'نامشخص')}\n"
554
  usage_md += f"📊 **کل Token ها:** {usage.get('total_tokens', 'نامشخص')}\n"
555
- usage_md += f"\n⚡ **سرعت Cerebras فوق‌العاده است!**"
556
  else:
557
  usage_md += "✅ پردازش با موفقیت انجام شد"
558
 
@@ -621,59 +642,48 @@ def create_advanced_interface():
621
  # راهنمای کامل
622
  with gr.Accordion("📖 راهنمای کامل استفاده", open=False):
623
  gr.Markdown("""
624
- ## 🎯 ویژگی‌های سیستم پیشرفته با Cerebras:
 
 
 
 
 
 
 
 
625
 
626
- ### مزایای استفاده از Cerebras:
627
- - **سرعت فوق‌العاده:** سریع‌ترین استنباط LLM در جهان
628
- - **دقت بالا:** مدل‌های قدرتمند Llama 3.1-8B
629
- - **رایگان:** برای استفاده شخصی و تست
630
- - **API ساده:** سازگار با OpenAI
631
- - **پرامپت بهینه:** 60% کوتاه‌تر برای Llama 3.1-8B
632
 
633
  ### 🏷️ انواع برچسب‌ها:
634
- - **company-XX:** شرکت‌ها، سازمان‌ها، برندها، نهادها، **گروه‌ها**
635
- - ⚠️ **مهم:** "گروه همراه اول"، "گروه اقتصادی آزادگان" → همه company-XX هستند
636
- - ⚠️ **مهم:** "فاما" = "فولاد مبارکه اصفهان" هر دو company-01
637
- - ⚠️ **مهم:** "سازمان تنظیم مقررات"، "سازمان تامین اجتماعی" → company-XX
638
- - **نه:** "سه شرکت دارویی"، "چند بانک" → کلمات عمومی (حفظ شوند)
639
- - **person-XX:** اشخاص حقیقی (نام و نام‌خانوادگی)
640
- - **amount-XX:** تمام اعداد (پولی، تعدادی، حجمی، زمانی)
641
- - **percent-XX:** درصدها و بازه‌های درصدی
642
 
643
  ### ✅ موارد حفظ شده:
644
- - 📅 تاریخ‌ها و ساعت‌ها
645
- - 🂠فصل‌های سال (پاییز، بهار، تابستان، زمستان)
646
- - 🏢 عناوین شغلی و نقش‌ها
647
- - 📏 واحدها (تومان، ریال، میلیارد، تن، ...)
648
- - 📈 شاخص‌های مالی (EPS, P/E, ARPU, NPL)
649
- - 🗺️ نام مکان‌ها و آدرس‌ها
650
- - 📝 ساختار جمله و لحن
651
- - 📦 کلمات عمومی بدون نام ("سه شرکت"، "چند بانک"، "مراکز درمانی")
652
- - ⏰ **دوره‌های زمانی:** "۵ ماهه سال"، "۹ ماهه"، "۳ ماهه اول" (حفظ می‌شوند)
653
-
654
- ### 🔍 کنترل کیفیت:
655
- - بررسی شروع اندیس‌ها از 01
656
- - بررسی پیوستگی اندیس‌ها
657
- - تضمین ثبات شناسه‌ها در یک متن
658
- - حفظ واحدها و شاخص‌های مالی
659
- - شناسایی کلمات انگلیسی غیرضروری
660
 
661
  ### 💡 نکات مهم:
662
- - هر نوع موجودیت شماره‌گذاری مستقل دارد
663
- - در بازه‌های عددی: amount-01—amount-02
664
- - برای درصدها: percent-01—percent-02
665
- - اعداد چسبیده: "5هزار" "amount-01 هزار"
666
- - ⚠️ **دوره‌های زمانی حفظ می‌شوند:**
667
- - "۵ ماهه سال" → حفظ (نه amount-XX)
668
- - "۹ ماهه" → حفظ (نه amount-XX)
669
- - "در ۹ ماه" → حفظ
670
- - اما "۹ میلیون تومان" → amount-XX
671
 
672
- ### 🚀 مدل‌های موجود Cerebras:
673
- - `llama3.1-8b`: سریع و کارآمد (توصیه می‌شود)
674
- - `llama3.1-70b`: قدرتمندتر
675
- - `llama3.3-70b`: جدیدترین نسخه 70B
676
- """)
 
677
 
678
  return interface
679
 
 
8
 
9
  @dataclass
10
  class CerebrasConfig:
11
+ """تنظیمات Cerebras API برای Qwen 3-32B"""
12
  api_key: str
13
  base_url: str = "https://api.cerebras.ai/v1"
14
+ model: str = "qwen-3-32b" # مدل Qwen 3-32B (سرعت 2,400 t/s)
15
  max_tokens: int = 2000
16
+ temperature: float = 0.6 # توصیه شده برای Qwen (0.6)
17
+ top_p: float = 0.95 # توصیه شده برای Qwen
18
 
19
  class AdvancedCerebrasAnonymizer:
20
+ """سیستم پیشرفته ناشناس‌سازی متون مالی/خبری فارسی با Qwen 3-32B"""
21
 
22
  def __init__(self, api_key: str = None):
23
  if api_key is None:
 
29
  self.system_prompt = self._create_advanced_system_prompt()
30
 
31
  def _create_advanced_system_prompt(self) -> str:
32
+ """ایجاد دستورالعمل سیستمی فشرده برای Qwen 3-32B"""
33
  return """شما متن‌های مالی فارسی را ناشناس می‌کنید. اسامی خاص و اعداد را با شناسه جایگزین کنید.
34
 
35
  ## قوانین اندیس‌گذاری:
 
87
  فقط متن ناشناس‌شده را برگردان، بدون توضیح."""
88
 
89
  def _make_api_request(self, text: str) -> Dict[str, Any]:
90
+ """ارسال درخواست به Cerebras API با پارامترهای بهینه Qwen"""
91
  headers = {
92
  "Authorization": f"Bearer {self.config.api_key}",
93
  "Content-Type": "application/json"
 
106
  ],
107
  "model": self.config.model,
108
  "temperature": self.config.temperature,
109
+ "top_p": self.config.top_p,
110
  "max_tokens": self.config.max_tokens
111
  }
112
 
 
115
  f"{self.config.base_url}/chat/completions",
116
  headers=headers,
117
  json=payload,
118
+ timeout=60 # افزایش timeout برای Qwen 32B
119
  )
120
  response.raise_for_status()
121
  return response.json()
 
124
  raise Exception(f"خطا در ارتباط با Cerebras API: {str(e)}")
125
 
126
  def anonymize_text(self, text: str) -> Dict[str, Any]:
127
+ """ناشناس‌سازی متن با استفاده از Qwen 3-32B"""
128
  if not text.strip():
129
  return {
130
  "success": False,
 
307
  color: #155724;
308
  margin: 10px 0;
309
  }
310
+ .qwen-box {
311
+ background-color: #e7f3ff;
312
+ border: 2px solid #2196F3;
313
+ border-radius: 12px;
314
+ padding: 15px;
315
+ color: #0d47a1;
316
+ margin: 10px 0;
317
+ }
318
  .stats-grid {
319
  display: grid;
320
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
 
346
  }
347
  """
348
 
349
+ with gr.Blocks(css=custom_css, title="ناشناس‌ساز پیشرفته با Qwen 3-32B", theme=gr.themes.Soft()) as interface:
350
 
351
  # عنوان
352
  gr.Markdown("""
353
  # 🔒 سیستم پیشرفته ناشناس‌سازی متون مالی/خبری فارسی
354
+ ### ⚡ قدرت‌گرفته از Cerebras AI - سریع‌ترین استنباط در جهان
355
+ """)
356
+
357
+ # نمایش اطلاعات مدل Qwen
358
+ gr.Markdown("""
359
+ <div class="qwen-box">
360
+ 🚀 <strong>مدل: Alibaba Qwen 3-32B</strong><br>
361
+ ⚡ سرعت: 2,400 توکن در ثانیه | 🧠 قدرت: 32 میلیارد پارامتر<br>
362
+ 💰 قیمت: $0.40/M input, $0.80/M output | 📝 Context: 128K tokens<br>
363
+ 🎯 مدل Reasoning هیبریدی با دقت بالا
364
+ </div>
365
  """)
366
 
367
  # نمایش وضعیت API
 
396
 
397
  with gr.Row():
398
  anonymize_btn = gr.Button(
399
+ "🔒 ناشناس‌سازی با Qwen 3-32B",
400
  variant="primary",
401
  size="lg"
402
  )
 
445
  usage_output = gr.Markdown(label="⚡ اطلاعات پردازش")
446
 
447
  def process_advanced_text(text: str, api_key_manual: str = ""):
448
+ """پردازش پیشرفته متن با Qwen 3-32B"""
449
  # حل مشکل NoneType
450
  if api_key_manual is None:
451
  api_key_manual = ""
 
565
 
566
  # اطلاعات پردازش
567
  usage = result.get("usage", {})
568
+ usage_md = "⚡ **اطلاعات پردازش Cerebras (Qwen 3-32B):**\n\n"
569
  if usage:
570
  usage_md += f"🤖 **مدل:** {anonymizer.config.model}\n"
571
+ usage_md += f"🌡️ **Temperature:** {anonymizer.config.temperature}\n"
572
+ usage_md += f"🎲 **Top-P:** {anonymizer.config.top_p}\n"
573
  usage_md += f"📥 **Token های ورودی:** {usage.get('prompt_tokens', 'نامشخص')}\n"
574
  usage_md += f"📤 **Token های خروجی:** {usage.get('completion_tokens', 'نامشخص')}\n"
575
  usage_md += f"📊 **کل Token ها:** {usage.get('total_tokens', 'نامشخص')}\n"
576
+ usage_md += f"\n⚡ **سرعت Qwen 3-32B: 2,400 tokens/second - فوق‌العاده سریع!**"
577
  else:
578
  usage_md += "✅ پردازش با موفقیت انجام شد"
579
 
 
642
  # راهنمای کامل
643
  with gr.Accordion("📖 راهنمای کامل استفاده", open=False):
644
  gr.Markdown("""
645
+ ## 🎯 ویژگی‌های سیستم با Qwen 3-32B:
646
+
647
+ ### 🚀 مزایای Qwen 3-32B:
648
+ - **سرعت فوق‌العاده:** 2,400 tokens/second
649
+ - **دقت بالا:** 32 میلیارد پارامتر
650
+ - **Context بزرگ:** 128K tokens
651
+ - **مدل Reasoning:** قابلیت استدلال پیشرفته
652
+ - **قیمت مناسب:** $0.40/M input, $0.80/M output
653
+ - **پشتیبانی عالی از فارسی:** به عنوان یکی از مدل‌های قدرتمند چندزبانه
654
 
655
+ ### ⚙️ پارامترهای بهینه شده:
656
+ - **Temperature:** 0.6 (توصیه شده برای Qwen)
657
+ - **Top-P:** 0.95 (برای تنوع و دقت بهتر)
658
+ - **Max Tokens:** 2000
 
 
659
 
660
  ### 🏷️ انواع برچسب‌ها:
661
+ - **company-XX:** شرکت‌ها، سازمان‌ها، گروه‌ها
662
+ - ⚠️ "گروه همراه اول" = company-XX (نه group-XX)
663
+ - ⚠️ "فاما" = "فولاد مبارکه" = company-01
664
+ - **person-XX:** اشخاص حقیقی
665
+ - **amount-XX:** مبالغ (با حفظ واحد)
666
+ - **percent-XX:** درصدها
 
 
667
 
668
  ### ✅ موارد حفظ شده:
669
+ - تاریخ‌ها، فصل‌ها، مکان‌ها
670
+ - عناوین شغلی و واحدها
671
+ - شاخص‌های مالی (EPS, P/E, etc.)
672
+ - کلمات عمومی ("سه شرکت"، "چند بانک")
673
+ - دوره‌های زمانی ( ماهه"، ماهه سال")
 
 
 
 
 
 
 
 
 
 
 
674
 
675
  ### 💡 نکات مهم:
676
+ - Qwen 3-32B دقت بالاتری نسبت به Llama 3.1-8B دارد
677
+ - مدل Reasoning برای تحلیل پیچیده بهتر است
678
+ - سرعت 2,400 t/s یعنی پاسخ تقریباً لحظه‌ای
679
+ - برای متون طولانی‌تر (تا 128K tokens) مناسب است
 
 
 
 
 
680
 
681
+ ### 🔧 مدل‌های جایگزین Cerebras:
682
+ qwen-3-32b # فعلی (توصیه می‌شود)
683
+ qwen-3-235b-a22b-instruct-2507 # قدرتمندتر اما گران‌تر
684
+ llama3.1-8b # سریع‌تر اما ضعیف‌تر
685
+ llama3.3-70b # تعادل خوب
686
+ """)
687
 
688
  return interface
689