Files
sovereign_ai/SovereignAI-Starter

SovereignAI Starter

خارطة الطريق التقنية موجودة في ROADMAP.md.

مشروع تعليمي لبناء مساعد ذكاء اصطناعي محلي قابل للتوسع. النموذج الافتراضي الحالي gemma4:e2b ويعمل عبر Ollama محليًا. يمكن اختيار نموذج آخر بواسطة متغير البيئة LOCAL_MODEL.

مكونات النسخة الأولى

  • FastAPI كواجهة HTTP محلية.
  • وكيل تجريبي بأداة حساب آمنة ومحدودة.
  • واجهة المحادثة تدعم نسخ الإجابة ومشاركتها وتعديل آخر سؤال أو إعادة توليد الإجابة.
  • تختار الواجهة نموذج Ollama المثبت محليًا من قائمة النماذج.
  • وضع الوكيل التجريبي يبحث في ملفات المشروع النصية ويقرأ مقتطفات منها فقط؛ لا يكتب ملفات ولا يشغّل أوامر.
  • خطة المراحل التالية للوكيل والبيانات والنماذج موجودة في ROADMAP.md.
  • واجهة /docs لاستكشاف الـ API من المتصفح.
  • يمكن توصيلها بخادم نموذج محلي يوفّر واجهة OpenAI مثل Ollama.
  • دون إعداد عنوان خادم نموذج، تعمل الواجهة في وضع العرض التجريبي.

التشغيل على Windows

  1. ثبّت Python 3.11 أو أحدث.
  2. افتح PowerShell داخل المجلد. إذا كانت .venv موجودة، تخطَّ خطوة إنشائها وثبّت الاعتماديات فقط عند الحاجة.
  3. أنشئ بيئة افتراضية وثبت الاعتماديات:
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
  1. (اختياري على جهاز جديد فقط) شغّل Ollama واسحب Gemma 4 E2B:
ollama pull gemma4:e2b

الخادم مضبوط افتراضيًا على Ollama المحلي وGemma 4 E2B. لتغيير عنوان Ollama أو اختيار نموذج آخر، عرّف المتغيرات في نافذة PowerShell نفسها:

$env:LOCAL_LLM_BASE_URL = "http://127.0.0.1:11434/v1"
$env:LOCAL_MODEL = "gemma4:e2b"

يمكن تثبيت اختيار Gemma صراحةً في الجلسة قبل تشغيل start-api.ps1 (وهو النموذج الافتراضي للسكربت):

$env:LOCAL_MODEL = "gemma4:e2b"
.\start-api.ps1

يمكن أيضًا اختيار النموذج لكل طلب من POST /v1/chat/completions بإرسال model، أو من POST /v1/agent/run بإرسال model مع task. على جهاز الاختبار، Gemma 4 E2B اشتغلت محليًا على CPU؛ وقد تختلف السرعة واستهلاك الذاكرة حسب الجهاز.

راجع رخصة النموذج المختار وشروطه الحالية قبل الاستخدام التجاري. تنزيل النموذج يحتاج اتصال إنترنت ومساحة تخزين.

  1. شغل الـ API على جهازك فقط (أو شغل start-api.ps1):
python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
  1. افتح http://127.0.0.1:8000/docs.

نقاط التجربة

  • GET /health للتأكد من أن الخدمة تعمل.
  • POST /v1/chat/completions لإرسال رسالة.
  • POST /v1/agent/run لتجربة الوكيل والأداة الحسابية.
  • POST /v1/chat/completions يمرر الطلب إلى الخادم المحلي عند ضبط المتغيرين أعلاه.
  • يمكن التبديل في Swagger بين النموذجين بإضافة model إلى جسم الطلب، مثل gemma4:e2b.

قراءة رابط ويب محدد

يوفر الـAPI المسار POST /v1/web/read لقراءة صفحة عامة يرسل المستخدم رابطها، واستخراج نصها، ثم سؤال Gemma المحلية عنها. افتح /docs، اختر المسار، وأرسل مثلًا:

{
  "url": "https://example.com",
  "question": "لخّص الصفحة بجملة واحدة."
}

يرجع الرد عنوان الصفحة ورابط المصدر وإجابة النموذج. هذا قراءة لرابط محدد وليس بحثًا عامًا؛ الصفحات التي تتطلب JavaScript أو تسجيل دخول لا تُقرأ بهذه النسخة. يسمح المسار فقط بروابط HTTP/HTTPS العامة، ويرفض العناوين المحلية، ويحد حجم الصفحة المقروءة إلى 2 MB. بحث الويب المتعدد المصادر سيأتي كأداة مستقلة لاحقًا.

خادم التطبيق مربوط بـ 127.0.0.1: يمكنه إجراء اتصالات صادرة إلى خدمات الإنترنت مثل Groq وقراءة المواقع العامة، لكنه غير منشور ليستقبل طلبات من أجهزة خارج هذا الكمبيوتر.

الخدمة مربوطة بـ 127.0.0.1 عمدًا، فلا تعرضها لاستقبال طلبات من الشبكة أو الإنترنت الآن. الوكيل يدعم الحساب وقراءة مقتطفات ملفات المشروع المحددة وقراءة رابط ويب عام يرسله المستخدم. لا يكتب ملفات ولا ينفذ أوامر النظام.

واجهة Flutter

يوجد تطبيق Flutter متعدد المنصات في flutter_app، والاسم المعروض المقترح حاليًا Mithqal AI (مثقال AI) بانتظار التحقق النهائي من العلامة التجارية. يضم أصل أيقونة واحدًا وإعدادًا لتوليد أيقونات Android وiOS وmacOS وWindows والويب؛ ويوجد ملف أيقونة وملف Desktop أوليان لتغليف Linux. عنوان الاتصال الافتراضي http://127.0.0.1:8000؛ التطبيق يسمح بتغييره من الإعدادات ويعرض اسم النموذج النشط من الـ API.

تعرض الواجهة إشعارًا داخل الصفحة عند اكتمال كل طلب أو فشله. على تطبيقات الهاتف يفعّل المستخدم إشعارات النظام من زر الجرس، فلا يطلب التطبيق الإذن عند الإقلاع. إعداد النظام على سطح المكتب مفعل افتراضيًا. نسخة الويب الحالية تعرض إشعار الصفحة؛ إذ إن الحزمة المثبتة لإشعارات النظام لا تدعم Web على نسخة Flutter الحالية.

تطبيق Windows

  • لتشغيل النسخة المكتبية، شغّل start-api.ps1 أولًا، ثم افتح flutter_app/build/windows/x64/runner/Release/flutter_app.exe بعد بنائه.
  • يعرض شريط المحادثة قائمة النماذج المثبتة من Ollama؛ اختيار النموذج يمرر اسمه مع الطلب.
  • زر المجلد يفعّل وضع الوكيل للقراءة فقط. عند تشغيل start-api.ps1 تكون مساحة العمل الافتراضية مجلد المشروع SovereignAI-Starter؛ لتغييرها عرّف SOVEREIGNAI_WORKSPACE قبل تشغيل الخدمة.
  • الوكيل يطابق السؤال مع ملفات النص/الكود المدعومة، يمرر مقتطفات محدودة للنموذج، ويعيد أسماء الملفات التي قرأها. الملفات المخفية، مجلدات .git وبيئات البناء، والملفات الكبيرة أو خارج جذر مساحة العمل مستثناة.
  • لإنشاء نسخة Release، نفّذ flutter build windows --release من داخل flutter_app.
  • التطبيق المكتبي واجهة أمامية؛ يحتاج Ollama وFastAPI شغّالين على الجهاز. النموذج لا يُضمّن داخل ملف التطبيق التنفيذي، ويظل نسخ الصوت للنص عبر Groq Whisper عند استخدام الميكروفون.

المحادثات والصوت

  • تحفظ FastAPI المحادثات والرسائل في SQLite محليًا. على Windows يوجد الملف في %LOCALAPPDATA%\SovereignAI\data\sovereign_ai.sqlite3، وخارج مجلد المشروع لتجنب مزامنة قاعدة البيانات مع OneDrive.
  • لكل سجل محادثة user_id، وتُفلتر عمليات القراءة والتعديل والحذف على أساسه. في النسخة المحلية يوفّر FastAPI ملف مستخدم تطوير ثابتًا، وترسل الواجهة معرّفه في ترويسة X-User-ID؛ هذا ليس تسجيل دخول أو عزلًا أمنيًا صالحًا للاستضافة العامة.
  • جدول user_identities مهيأ لربط المستخدم مستقبلًا بمعرّف مزود مثل Google أو البريد/الهاتف، لكن تدفق تسجيل الدخول لم يُنفذ بعد. عند إضافة مستخدمين حقيقيين يجب استبدال الترويسة بهوية موثقة من جلسة/JWT.
  • رسائل الدردشة ترسل إلى Ollama المحلي. التسجيل الصوتي يحوّل إلى نص عبر Groq Whisper؛ لذلك يُرسل الصوت إلى Groq عند الضغط على إيقاف التسجيل.
  • مفتاح Groq يجب أن يبقى في متغير البيئة GROQ_API_KEY الخاص بخادم FastAPI، ولا يوضع في Flutter أو في ملفات المشروع.
  • على جهاز التطوير الحالي حُفظ المتغير في بيئة Windows الخاصة بالمستخدم، وليس في ملف .env. يقرأه start-api.ps1 عند تشغيل الخادم، ويظهر /health حالة الإعداد فقط دون إظهار المفتاح. عند استضافة الخادم لاحقًا، أضف المفتاح إلى إعدادات البيئة السرية في خدمة الاستضافة.

عنوان الشبكة

عنوان Wi-Fi الحالي لهذا الجهاز 192.168.100.20 والبوابة 192.168.100.1، والعنوان موزع عبر DHCP. لتثبيته، احجز العنوان الحالي من صفحة الراوتر ضمن DHCP Reservation / Address Reservation للجهاز DESKTOP-13T75A5، مستخدمًا MAC واجهة Wi-Fi الظاهر في ipconfig /all. لا تغيّر إعداد IPv4 يدويًا في Windows بالتزامن مع حجز DHCP. هذا يثبت العنوان داخل الشبكة المنزلية فقط؛ لا يفتح وصولًا من الإنترنت. الخوادم ما زالت مربوطة بـ 127.0.0.1.