أول مساعد ذكي متخصص بـ اللهجة السورية الشاميّة، مصمم ليكون سريعاً جداً وذكياً في التعامل مع السياق المحلي والعالمي.
🎮 Live Demo
استمتع بتجربة سرعة ONYX-AI-Syrian الآن على Hugging Face Spaces:
🏗 بنية النظام (Architecture Layers)
يعتمد الموديل على 5 طبقات أساسية لضمان الدقة والسرعة:
طبقة المحرك الأساسي (Core Model Layer): تحمل الموديل الضخم (Qwen 3.5). هي "الدماغ" المسؤول عن فهم اللغة وتوليد الكلام. تم استخدام تقنية
device_map="auto"وfloat16لتسريع الأداء وتقليل استهلاك الذاكرة (VRAM).طبقة الذاكرة القريبة (Edge Memory Layer - FAISS): وحدة التخزين المحلي باستخدام مكتبة FAISS و SentenceTransformer. يقوم النظام بتحويل المحادثات السابقة لمتجهات (Vectors)، وعند السؤال، يبحث في الذاكرة عما يشبهه ليمنح الموديل "ذاكرة قصيرة المدى" قوية.
طبقة البحث والوصول للمعلومات (Search Layer - Tavily): "نافذة النظام على العالم". تسمح لـ ONYX بعمل بحث لحظي على الإنترنت لجلب معلومات جديدة (أخبار، طقس، تقنيات حديثة) وتقديمها كـ Context للموديل.
طبقة القواعد السريعة (Rule Engine Layer): طبقة "الاستجابة الفورية" للرد على التحيات والأسئلة الشائعة فوراً دون استهلاك موارد الموديل الكبير، مما يوفر سرعة وكلفة.
طبقة بناء السياق (Prompt Builder): المطبخ الذي يجمع سياق الذاكرة + معلومات البحث + سؤال المستخدم، ويغلفهم بـ "System Prompt" احترافي يجبر الموديل على التحدث باللهجة الشامية وبأسلوب ONYX.
💻 المتطلبات والأداء (Performance)
- استهلاك الرام: خفيف جداً، يستهلك تقريباً من 7 إلى 10 غيغا فقط.
- السرعة: يشتغل بسرعة الضوء على الـ GPU فقط، مع أداء ممتاز جداً واستجابة لحظية.
- تنبيه : في حال استخدمت ال CPU فهذه نتيجة الاستهلاك وسيكون بطيء
🛠 التثبيت (Installation)
fastapi
uvicorn
python-multipart
transformers>=4.40.0
accelerate
sentencepiece
protobuf
huggingface_hub
tavily-python
🚀 كود التشغيل (Usage Guide)
1. تحميل الموديل (Model Loading)
import os
from transformers import AutoTokenizer, AutoModelForCausalLM
# 🔹 معرف الموديل على HuggingFace
MODEL_ID = "ONYX-APP-AI/onyx-ai-syrian-0.1"
# 🔹 توكن الوصول (إذا الموديل خاص)
HF_TOKEN = os.environ.get("HF_TOKEN")
print("⏳ Loading ONYX Engine...")
# 🔹 تحميل الـ Tokenizer (مسؤول عن تحويل النص لأرقام)
tokenizer = AutoTokenizer.from_pretrained(
MODEL_ID,
token=HF_TOKEN,
trust_remote_code=True # يسمح باستخدام كود مخصص من الموديل
)
# 🔹 تحميل الموديل نفسه
model = AutoModelForCausalLM.from_pretrained(
MODEL_ID,
token=HF_TOKEN,
torch_dtype=torch.bfloat16, # تقليل استهلاك الذاكرة
low_cpu_mem_usage=True, # تحسين استهلاك RAM
device_map="auto" # توزيع تلقائي على CPU/GPU
)
2. إعداد API باستخدام FastAPI
from fastapi import FastAPI, Request
from fastapi.responses import StreamingResponse
from threading import Thread
from transformers import TextIteratorStreamer
import asyncio
import json
# 🔹 إنشاء تطبيق FastAPI
app = FastAPI()
# 🔹 Endpoint لاستقبال الرسائل
@app.post("/chat")
async def chat(request: Request):
# 🔹 قراءة البيانات القادمة من المستخدم
data = await request.json()
message = data.get("message", "")
# 🔹 تحديد نوع الرد (سريع أو باستخدام البحث)
if should_skip_search(message):
system_content = "أنت ONYX، مساعد ذكي سوري بلهجة شاميّة. جاوب باختصار ودقة."
else:
system_content = "أنت ONYX، مساعد ذكي سوري بلهجة شاميّة."
# 🔹 بناء الرسائل بصيغة Chat
messages = [
{"role": "system", "content": system_content},
{"role": "user", "content": message}
]
# 🔹 تحويل الرسائل إلى Prompt يفهمه الموديل
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 🔹 تحويل النص إلى Tensor
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 🔹 إعداد نظام Streaming (إرسال الرد تدريجياً)
streamer = TextIteratorStreamer(
tokenizer,
skip_prompt=True,
skip_special_tokens=True
)
# 🔹 إعدادات التوليد
generate_kwargs = dict(
**inputs,
streamer=streamer,
max_new_tokens=512, # الحد الأقصى لطول الرد
do_sample=True, # تفعيل العشوائية
temperature=0.7, # درجة الإبداع
repetition_penalty=1.15 # تقليل التكرار
)
# 🔹 تشغيل التوليد في Thread منفصل
Thread(target=model.generate, kwargs=generate_kwargs).start()
# 🔹 إرسال الرد للمستخدم Token by Token
async def event_generator():
try:
for new_token in streamer:
# 🔹 إيقاف إذا المستخدم قطع الاتصال
if await request.is_disconnected():
break
if new_token:
yield f"data: {json.dumps({'token': new_token}, ensure_ascii=False)}\\n\\n"
await asyncio.sleep(0.005)
except Exception:
pass
# 🔹 إعادة الرد كـ Streaming
return StreamingResponse(
event_generator(),
media_type="text/event-stream",
headers={"X-Accel-Buffering": "no"} # تعطيل buffering لتحسين السرعة
)
# 🔹 تحديد إذا السؤال يحتاج بحث أو لا
def should_skip_search(message):
skip_keywords = ["خطة", "برنامج", "كيف اتعلم", "نصيحة", "احكيلي عن", "شرح"]
return any(word in message for word in skip_keywords)
💎 Credits
Developed by RUI Company Project: ONYX AI System
- Downloads last month
- 7

