Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
"""ایجاد دستورالعمل سیستمی فشرده برای
|
| 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=
|
| 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 |
-
"""ناشناسسازی متن با استفاده از
|
| 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="ناشناسساز پیشرفته
|
| 340 |
|
| 341 |
# عنوان
|
| 342 |
gr.Markdown("""
|
| 343 |
# 🔒 سیستم پیشرفته ناشناسسازی متون مالی/خبری فارسی
|
| 344 |
-
### ⚡ قدرتگرفته از Cerebras AI - سریعترین استنباط
|
| 345 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 346 |
""")
|
| 347 |
|
| 348 |
# نمایش وضعیت API
|
|
@@ -377,7 +396,7 @@ def create_advanced_interface():
|
|
| 377 |
|
| 378 |
with gr.Row():
|
| 379 |
anonymize_btn = gr.Button(
|
| 380 |
-
"🔒 ناشناسسازی با
|
| 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⚡ **سرعت
|
| 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 |
-
## 🎯 ویژگیهای سیستم
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 625 |
|
| 626 |
-
###
|
| 627 |
-
-
|
| 628 |
-
-
|
| 629 |
-
-
|
| 630 |
-
- **API ساده:** سازگار با OpenAI
|
| 631 |
-
- **پرامپت بهینه:** 60% کوتاهتر برای Llama 3.1-8B
|
| 632 |
|
| 633 |
### 🏷️ انواع برچسبها:
|
| 634 |
-
- **company-XX:** شرکتها، سازمانها،
|
| 635 |
-
- ⚠️
|
| 636 |
-
- ⚠️
|
| 637 |
-
|
| 638 |
-
|
| 639 |
-
- **
|
| 640 |
-
- **amount-XX:** تمام اعداد (پولی، تعدادی، حجمی، زمانی)
|
| 641 |
-
- **percent-XX:** درصدها و بازههای درصدی
|
| 642 |
|
| 643 |
### ✅ موارد حفظ شده:
|
| 644 |
-
-
|
| 645 |
-
-
|
| 646 |
-
-
|
| 647 |
-
-
|
| 648 |
-
-
|
| 649 |
-
- 🗺️ نام مکانها و آدرسها
|
| 650 |
-
- 📝 ساختار جمله و لحن
|
| 651 |
-
- 📦 کلمات عمومی بدون نام ("سه شرکت"، "چند بانک"، "مراکز درمانی")
|
| 652 |
-
- ⏰ **دورههای زمانی:** "۵ ماهه سال"، "۹ ماهه"، "۳ ماهه اول" (حفظ میشوند)
|
| 653 |
-
|
| 654 |
-
### 🔍 کنترل کیفیت:
|
| 655 |
-
- بررسی شروع اندیسها از 01
|
| 656 |
-
- بررسی پیوستگی اندیسها
|
| 657 |
-
- تضمین ثبات شناسهها در یک متن
|
| 658 |
-
- حفظ واحدها و شاخصهای مالی
|
| 659 |
-
- شناسایی کلمات انگلیسی غیرضروری
|
| 660 |
|
| 661 |
### 💡 نکات مهم:
|
| 662 |
-
-
|
| 663 |
-
-
|
| 664 |
-
-
|
| 665 |
-
-
|
| 666 |
-
- ⚠️ **دورههای زمانی حفظ میشوند:**
|
| 667 |
-
- "۵ ماهه سال" → حفظ (نه amount-XX)
|
| 668 |
-
- "۹ ماهه" → حفظ (نه amount-XX)
|
| 669 |
-
- "در ۹ ماه" → حفظ
|
| 670 |
-
- اما "۹ میلیون تومان" → amount-XX
|
| 671 |
|
| 672 |
-
###
|
| 673 |
-
-
|
| 674 |
-
|
| 675 |
-
|
| 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 |
|