👁️

ربط ONNX Runtime وتشغيل الخبيرين معاً

SYS.TIME12 أغسطس 2026 - 16:30 PM (GMT+3)
CATEGORYالتأسيس

ربط ONNX Runtime وتشغيل الخبيرين معاً

في هذه المرحلة، اكتملت البنية التحتية الكاملة للمشروع — كلا المحركين يعملان ويُنظَّفان بشكل صحيح.

ما تم إنجازه

vision_engine (ONNX Runtime)

  • اكتشاف libonnxruntime.so.1.21.0 موجودة في النظام (/usr/lib/x86_64-linux-gnu/)
  • تثبيت libonnxruntime-dev للحصول على الـ symlink المطلوب للربط
  • كتابة pz_vision_engine_wrapper.cpp — واجهة C فوق ONNX Runtime C API تعرض:
    • pz_vision_init() — تهيئة ORT بـ API version 21
    • pz_ocr_run(bytes, len, buf, buf_size) — تشغيل OCR (stub مؤقت)
    • pz_vision_free() — تحرير الموارد
  • حل تعارض API version (header = 30، library = 21)

FFI الكاملة

  • src/ffi/llama.rs يحتوي الآن على bindings للمحركين معاً
  • OcrExpert يستدعي pz_vision_* عبر unsafe FFI ويُطبّق Drop للتنظيف التلقائي

build.rs

يبني الآن ملفي wrapper دفعة واحدة ويربط بـ:

المكتبةالنوعالمصدر
libllama.astatictext_engine/build
libggml*.astatictext_engine/build
libonnxruntime.sodynamicالنظام
libstdc++ / libgompdynamicالنظام

نتيجة التشغيل النهائية ✅

[llama] ✅ Backend جاهز
[pz_wrapper] تم تحميل النموذج بنجاح ✅
[pz_vision] ✅ ONNX Runtime v1.21 API جاهز
المدير جاهز — 2 خبير مسجل
النتيجة: عاصمة المملكة العربية السعودية هي الرياض. (الخبير: llama-text)
[llama] 🧹 Backend أُفرغ بنجاح
[pz_wrapper] تم تحرير النموذج 🧹
[pz_vision] 🧹 ONNX Runtime أُفرغ

البنية الكاملة الحالية

Rust (main)
├── Manager ──► routes Input::Text  ──► LlamaExpert
│                                         └─► pz_llama_complete() [C++]
│                                               └─► llama.cpp inference
│                                                     └─► Qwen2.5-0.5B GGUF

└── Manager ──► routes Input::Image ──► OcrExpert
                                          └─► pz_ocr_run() [C++]
                                                └─► ONNX Runtime v1.21
                                                      └─► [نموذج OCR قيد الإضافة]

الخطوة التالية

  • تنزيل نموذج OCR عربي (ONNX) وتوصيله بـ pz_ocr_run()