Update app.py
Browse files
app.py
CHANGED
|
@@ -112,33 +112,192 @@ REAL_PROVIDERS = {
|
|
| 112 |
REAL_PROVIDERS = {k: v for k, v in REAL_PROVIDERS.items() if v}
|
| 113 |
|
| 114 |
# =====================================================
|
| 115 |
-
# MODELS - جميع نماذج Qwen
|
| 116 |
# =====================================================
|
| 117 |
PROVIDER_MODELS_FALLBACK = {
|
| 118 |
"Qwen": [
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
"
|
| 124 |
-
"
|
| 125 |
-
"
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
"qwen",
|
| 133 |
"qwen2.5",
|
| 134 |
"qwen-coder",
|
| 135 |
-
"qwen2.5-coder",
|
| 136 |
"qwen-vl",
|
| 137 |
-
"
|
| 138 |
-
"
|
| 139 |
-
"qvq-72b",
|
| 140 |
-
"qwen-max-latest",
|
| 141 |
-
"qwen-plus-latest",
|
| 142 |
],
|
| 143 |
}
|
| 144 |
|
|
@@ -350,7 +509,7 @@ async def v1_models(request: Request):
|
|
| 350 |
for pname, pobj in REAL_PROVIDERS.items():
|
| 351 |
if pname not in _PROVIDER_MODEL_CACHE:
|
| 352 |
_PROVIDER_MODEL_CACHE[pname] = discover_provider_models(pobj, pname)
|
| 353 |
-
for model in _PROVIDER_MODEL_CACHE[pname][:
|
| 354 |
models.append({
|
| 355 |
"id": model,
|
| 356 |
"type": "model",
|
|
@@ -359,12 +518,11 @@ async def v1_models(request: Request):
|
|
| 359 |
|
| 360 |
if not models:
|
| 361 |
models = [
|
| 362 |
-
{"id": "
|
|
|
|
| 363 |
{"id": "qwen-plus", "type": "model", "display_name": "Qwen - Plus"},
|
| 364 |
-
{"id": "
|
| 365 |
-
{"id": "
|
| 366 |
-
{"id": "qwen2.5-72b", "type": "model", "display_name": "Qwen 2.5 - 72B"},
|
| 367 |
-
{"id": "qwen2.5-32b", "type": "model", "display_name": "Qwen 2.5 - 32B"},
|
| 368 |
]
|
| 369 |
|
| 370 |
return {"data": models}
|
|
@@ -462,7 +620,7 @@ async def v1_messages_stream(request: Request):
|
|
| 462 |
@app.get("/")
|
| 463 |
async def root():
|
| 464 |
return {
|
| 465 |
-
"message": "G4F Smart Router is running (Qwen Only)",
|
| 466 |
"provider": "Qwen",
|
| 467 |
"endpoints": {
|
| 468 |
"GET /": "Home page",
|
|
@@ -476,6 +634,7 @@ async def root():
|
|
| 476 |
},
|
| 477 |
"authentication": "Bearer YOUR_API_KEY or X-API-Key: YOUR_API_KEY",
|
| 478 |
"cookies": COOKIE_STATUS,
|
|
|
|
| 479 |
"status": "✅ Server is working"
|
| 480 |
}
|
| 481 |
|
|
|
|
| 112 |
REAL_PROVIDERS = {k: v for k, v in REAL_PROVIDERS.items() if v}
|
| 113 |
|
| 114 |
# =====================================================
|
| 115 |
+
# MODELS - جميع نماذج Qwen (بعد البحث)
|
| 116 |
# =====================================================
|
| 117 |
PROVIDER_MODELS_FALLBACK = {
|
| 118 |
"Qwen": [
|
| 119 |
+
# =====================================
|
| 120 |
+
# Qwen 3.6 SERIES (أحدث الإصدارات حسب Alibaba Cloud 2026-04-02)
|
| 121 |
+
# المصدر: https://www.alibabacloud.com/help/en/model-studio/newly-released-models
|
| 122 |
+
# =====================================
|
| 123 |
+
"qwen3.6-plus", # Qwen3.6-Plus الرئيسي
|
| 124 |
+
"qwen3.6-plus-2026-04-02", # إصدار مؤرخ
|
| 125 |
+
"qwen3.6-35b-a3b", # النموذج المفتوح المصدر 35B MoE
|
| 126 |
+
|
| 127 |
+
# =====================================
|
| 128 |
+
# Qwen 3.5 SERIES
|
| 129 |
+
# المصدر: Alibaba Cloud Model Catalog
|
| 130 |
+
# =====================================
|
| 131 |
+
"qwen3.5-plus", # Qwen3.5-Plus الرئيسي
|
| 132 |
+
"qwen3.5-plus-2026-02-15", # إصدار مؤرخ
|
| 133 |
+
"qwen3.5-flash", # للاستجابة السريعة
|
| 134 |
+
"qwen3.5-flash-2026-02-23", # إصدار مؤرخ
|
| 135 |
+
"qwen3.5-122b-a10b", # 122B مع 10B نشط
|
| 136 |
+
"qwen3.5-27b", # 27B كثيف
|
| 137 |
+
"qwen3.5-35b-a3b", # 35B MoE كثيف
|
| 138 |
+
|
| 139 |
+
# =====================================
|
| 140 |
+
# Qwen 3 MAX & FLAGSHIP
|
| 141 |
+
# المصدر: Promptfoo Documentation
|
| 142 |
+
# =====================================
|
| 143 |
+
"qwen3-max", # الجيل التالي الرائد
|
| 144 |
+
"qwen3-max-preview", # نسخة تجريبية
|
| 145 |
+
"qwen3-max-2025-09-23", # إصدار مؤرخ
|
| 146 |
+
"qwen-max", # الرائد الأصلي
|
| 147 |
+
"qwen-max-latest", # دائماً محدث
|
| 148 |
+
"qwen-max-2025-01-25", # إصدار مؤرخ
|
| 149 |
+
|
| 150 |
+
# =====================================
|
| 151 |
+
# Qwen PLUS & TURBO (متعددة الاستخدامات)
|
| 152 |
+
# =====================================
|
| 153 |
+
"qwen-plus", # متوازن للغاية
|
| 154 |
+
"qwen-plus-latest", # دائماً محدث
|
| 155 |
+
"qwen-plus-2025-09-11", # إصدار مؤرخ
|
| 156 |
+
"qwen-plus-2025-07-28", # إصدار مؤرخ
|
| 157 |
+
"qwen-plus-2025-07-14", # إصدار مؤرخ
|
| 158 |
+
"qwen-plus-2025-04-28", # إصدار مؤرخ
|
| 159 |
+
"qwen-plus-2025-01-25", # إصدار مؤرخ
|
| 160 |
+
"qwen-turbo", # سريع وفعال من حيث التكلفة
|
| 161 |
+
"qwen-turbo-latest", # دائماً محدث
|
| 162 |
+
"qwen-turbo-2025-04-28", # إصدار مؤرخ
|
| 163 |
+
"qwen-turbo-2024-11-01", # إصدار مؤرخ
|
| 164 |
+
"qwen-flash", # محسّن للوقت (يستبدل النفاث)
|
| 165 |
+
"qwen-flash-2025-07-28", # إصدار مؤرخ
|
| 166 |
+
|
| 167 |
+
# =====================================
|
| 168 |
+
# Qwen LONG (سياق فائق الطول)
|
| 169 |
+
# =====================================
|
| 170 |
+
"qwen-long-latest", # مليون سياق
|
| 171 |
+
"qwen-long-2025-01-25", # إصدار مؤرخ
|
| 172 |
+
|
| 173 |
+
# =====================================
|
| 174 |
+
# Qwen 3 CODER (نماذج البرمجة المتخصصة)
|
| 175 |
+
# المصدر: Alibaba Cloud + Promptfoo
|
| 176 |
+
# =====================================
|
| 177 |
+
"qwen3-coder-plus", # كود احترافي مع أداة الاتصال
|
| 178 |
+
"qwen3-coder-plus-2025-09-23", # إصدار مؤرخ
|
| 179 |
+
"qwen3-coder-plus-2025-07-22", # إصدار مؤرخ
|
| 180 |
+
"qwen3-coder-flash", # توليد كود سريع
|
| 181 |
+
"qwen3-coder-flash-2025-07-28", # إصدار مؤرخ
|
| 182 |
+
"qwen3-coder-next", # الجيل التالي من الكود
|
| 183 |
+
"qwen3-coder-480b-a35b-instruct", # 480B نموذج كود مفتوح
|
| 184 |
+
"qwen3-coder-30b-a3b-instruct", # 30B نموذج كود مفتوح
|
| 185 |
+
|
| 186 |
+
# =====================================
|
| 187 |
+
# Qwen 3 VL (الرؤية والفيديو)
|
| 188 |
+
# المصدر: Promptfoo + DashScope
|
| 189 |
+
# =====================================
|
| 190 |
+
"qwen3-vl-plus", # رؤية رائدة
|
| 191 |
+
"qwen3-vl-plus-2025-09-23", # إصدار مؤرخ
|
| 192 |
+
"qwen3-vl-flash", # نموذج رؤية سريع
|
| 193 |
+
"qwen3-vl-flash-2025-10-15", # إصدار مؤرخ
|
| 194 |
+
"qwen3-vl-235b-a22b-thinking", # 235B مع التفكير
|
| 195 |
+
"qwen3-vl-235b-a22b-instruct", # 235B تعليمات
|
| 196 |
+
"qwen3-vl-32b-thinking", # 32B مع التفكير
|
| 197 |
+
"qwen3-vl-32b-instruct", # 32B تعليمات
|
| 198 |
+
"qwen3-vl-30b-a3b-thinking", # 30B مع التفكير
|
| 199 |
+
"qwen3-vl-30b-a3b-instruct", # 30B تعليمات
|
| 200 |
+
"qwen3-vl-8b-thinking", # 8B مع التفكير
|
| 201 |
+
"qwen3-vl-8b-instruct", # 8B تعليمات
|
| 202 |
+
"qwen-vl-max", # VL ماكس
|
| 203 |
+
"qwen-vl-plus", # VL بلص
|
| 204 |
+
"qwen-vl-ocr", # محسّن للتعرف الضوئي على الحروف
|
| 205 |
+
|
| 206 |
+
# =====================================
|
| 207 |
+
# Qwen 3 OMN (رؤية + كلام)
|
| 208 |
+
# =====================================
|
| 209 |
+
"qwen3-omni-flash", # متعدد الوسائط
|
| 210 |
+
"qwen3-omni-flash-2025-09-15", # إصدار مؤرخ
|
| 211 |
+
"qwen3-omni-flash-realtime", # بث مباشر في الوقت الفعلي
|
| 212 |
+
"qwen3-omni-flash-realtime-2025-09-15", # إصدار مؤرخ
|
| 213 |
+
"qwen3-omni-30b-a3b-captioner", # تذييل الصوت
|
| 214 |
+
|
| 215 |
+
# =====================================
|
| 216 |
+
# QwQ REASONING (الاستدلال والبحث)
|
| 217 |
+
# المصدر: Promptfoo
|
| 218 |
+
# =====================================
|
| 219 |
+
"qwq-plus", # نموذج استدلال تجاري
|
| 220 |
+
"qwq-32b", # QwQ 32B مفتوح
|
| 221 |
+
"qwen-deep-research", # مساعد بحث مع استعلام ويب
|
| 222 |
+
"qvq-max", # استدلال بصري
|
| 223 |
+
"qvq-max-latest", # دائماً محدث
|
| 224 |
+
"qvq-max-2025-03-25", # إصدار مؤرخ
|
| 225 |
+
"qvq-72b-preview", # استدلال بصري 72B
|
| 226 |
+
|
| 227 |
+
# =====================================
|
| 228 |
+
# Qwen 3 OPEN-SOURCE (مفتوحة المصدر)
|
| 229 |
+
# المصدر: Alibaba Cloud
|
| 230 |
+
# =====================================
|
| 231 |
+
"qwen3-next-80b-a3b-thinking", # الجيل التالي 80B مع التفكير
|
| 232 |
+
"qwen3-next-80b-a3b-instruct", # الجيل التالي 80B تعليمات
|
| 233 |
+
"qwen3-235b-a22b-thinking-2507", # 235B يوليو 2025 مع التفكير
|
| 234 |
+
"qwen3-235b-a22b-instruct-2507", # 235B يوليو 2025 تعليمات
|
| 235 |
+
"qwen3-30b-a3b-thinking-2507", # 30B يوليو 2025 مع التفكير
|
| 236 |
+
"qwen3-30b-a3b-instruct-2507", # 30B يوليو 2025 تعليمات
|
| 237 |
+
"qwen3-235b-a22b", # 235B وضع مزدوج
|
| 238 |
+
"qwen3-32b", # 32B وضع مزدوج
|
| 239 |
+
"qwen3-30b-a3b", # 30B وضع مزدوج
|
| 240 |
+
"qwen3-14b", # 14B وضع مزدوج
|
| 241 |
+
"qwen3-8b", # 8B وضع مزدوج
|
| 242 |
+
"qwen3-4b", # 4B وضع مزدوج
|
| 243 |
+
"qwen3-1.7b", # 1.7B للأجهزة الطرفية
|
| 244 |
+
"qwen3-0.6b", # 0.6B للأجهزة الطرفية
|
| 245 |
+
|
| 246 |
+
# =====================================
|
| 247 |
+
# Qwen 2.5 SERIES (مستقرة ومجربة)
|
| 248 |
+
# =====================================
|
| 249 |
+
"qwen2.5-72b-instruct", # 72B نموذج كثيف
|
| 250 |
+
"qwen2.5-32b-instruct", # 32B نموذج كثيف
|
| 251 |
+
"qwen2.5-14b-instruct", # 14B نموذج كثيف
|
| 252 |
+
"qwen2.5-7b-instruct", # 7B نموذج كثيف
|
| 253 |
+
"qwen2.5-1.5b-instruct", # 1.5B نموذج صغير
|
| 254 |
+
"qwen2.5-0.5b-instruct", # 0.5B نموذج صغير جداً
|
| 255 |
+
"qwen2.5-7b-instruct-1m", # 7B مع سياق مليوني
|
| 256 |
+
"qwen2.5-14b-instruct-1m", # 14B مع سياق مليوني
|
| 257 |
+
"qwen2.5-coder-32b-instruct", # 32B كود
|
| 258 |
+
"qwen2.5-coder-14b-instruct", # 14B كود
|
| 259 |
+
"qwen2.5-coder-7b-instruct", # 7B كود
|
| 260 |
+
"qwen2.5-coder-1.5b-instruct", # 1.5B كود
|
| 261 |
+
"qwen2.5-coder-0.5b-instruct", # 0.5B كود
|
| 262 |
+
|
| 263 |
+
# =====================================
|
| 264 |
+
# QWEN MATH (النماذج الرياضية)
|
| 265 |
+
# =====================================
|
| 266 |
+
"qwen-math-plus", # عددي بلص
|
| 267 |
+
"qwen-math-plus-latest", # دائماً محدث
|
| 268 |
+
"qwen-math-plus-2024-09-19", # إصدار مؤرخ
|
| 269 |
+
"qwen-math-plus-2024-08-16", # إصدار مؤرخ
|
| 270 |
+
"qwen-math-turbo", # عددي توربو
|
| 271 |
+
"qwen-math-turbo-latest", # دائماً محدث
|
| 272 |
+
"qwen-math-turbo-2024-09-19", # إصدار مؤرخ
|
| 273 |
+
"qwen2.5-math-72b-instruct", # 72B للنماذج الرياضية
|
| 274 |
+
"qwen2.5-math-7b-instruct", # 7B للنماذج الرياضية
|
| 275 |
+
|
| 276 |
+
# =====================================
|
| 277 |
+
# QWEN TRANSLATION (الترجمة)
|
| 278 |
+
# =====================================
|
| 279 |
+
"qwen-mt-plus", # مترجمة بلص
|
| 280 |
+
"qwen-mt-turbo", # مترجمة توربو
|
| 281 |
+
|
| 282 |
+
# =====================================
|
| 283 |
+
# QWEN DOCUMENT (استخراج المستندات)
|
| 284 |
+
# =====================================
|
| 285 |
+
"qwen-doc-turbo", # استخراج المستندات المهيكلة
|
| 286 |
+
|
| 287 |
+
# =====================================
|
| 288 |
+
# QWEN IMAGE GENERATION (توليد الصور)
|
| 289 |
+
# =====================================
|
| 290 |
+
"qwen-image-plus", # نص إلى صورة مع عرض نصي معقد
|
| 291 |
+
|
| 292 |
+
# =====================================
|
| 293 |
+
# ALIASES (استعلامات مختصرة)
|
| 294 |
+
# =====================================
|
| 295 |
"qwen",
|
| 296 |
"qwen2.5",
|
| 297 |
"qwen-coder",
|
|
|
|
| 298 |
"qwen-vl",
|
| 299 |
+
"qwq",
|
| 300 |
+
"qvq",
|
|
|
|
|
|
|
|
|
|
| 301 |
],
|
| 302 |
}
|
| 303 |
|
|
|
|
| 509 |
for pname, pobj in REAL_PROVIDERS.items():
|
| 510 |
if pname not in _PROVIDER_MODEL_CACHE:
|
| 511 |
_PROVIDER_MODEL_CACHE[pname] = discover_provider_models(pobj, pname)
|
| 512 |
+
for model in _PROVIDER_MODEL_CACHE[pname][:30]:
|
| 513 |
models.append({
|
| 514 |
"id": model,
|
| 515 |
"type": "model",
|
|
|
|
| 518 |
|
| 519 |
if not models:
|
| 520 |
models = [
|
| 521 |
+
{"id": "qwen3.6-plus", "type": "model", "display_name": "Qwen 3.6 - Plus"},
|
| 522 |
+
{"id": "qwen3-max", "type": "model", "display_name": "Qwen 3 - Max"},
|
| 523 |
{"id": "qwen-plus", "type": "model", "display_name": "Qwen - Plus"},
|
| 524 |
+
{"id": "qwen3-coder-plus", "type": "model", "display_name": "Qwen 3 - Coder Plus"},
|
| 525 |
+
{"id": "qwen3-vl-plus", "type": "model", "display_name": "Qwen 3 - Vision Plus"},
|
|
|
|
|
|
|
| 526 |
]
|
| 527 |
|
| 528 |
return {"data": models}
|
|
|
|
| 620 |
@app.get("/")
|
| 621 |
async def root():
|
| 622 |
return {
|
| 623 |
+
"message": "G4F Smart Router is running (Qwen Only - Full Models)",
|
| 624 |
"provider": "Qwen",
|
| 625 |
"endpoints": {
|
| 626 |
"GET /": "Home page",
|
|
|
|
| 634 |
},
|
| 635 |
"authentication": "Bearer YOUR_API_KEY or X-API-Key: YOUR_API_KEY",
|
| 636 |
"cookies": COOKIE_STATUS,
|
| 637 |
+
"models_count": len(PROVIDER_MODELS_FALLBACK.get("Qwen", [])),
|
| 638 |
"status": "✅ Server is working"
|
| 639 |
}
|
| 640 |
|