Set Gemma 4 E2B as default and document Windows app

This commit is contained in:
Hamza Ayed
2026-09-30 09:16:51 +03:00
parent 1295e4aea3
commit f0a444ca46
3 changed files with 42 additions and 9 deletions
+14 -8
View File
@@ -1,6 +1,6 @@
# SovereignAI Starter # SovereignAI Starter
مشروع تعليمي لبناء مساعد ذكاء اصطناعي محلي قابل للتوسع. النموذج الافتراضي `qwen2.5:1.5b-instruct-q4_K_M` (نحو 986 ميغابايت)، ونموذج `gemma4:e2b` (نحو 7.16 غيغابايت) مثبت للتجربة والمقارنة. مشروع تعليمي لبناء مساعد ذكاء اصطناعي محلي قابل للتوسع. النموذج الافتراضي الحالي `gemma4:e2b` ويعمل عبر Ollama محليًا. يمكن اختيار نموذج آخر بواسطة متغير البيئة `LOCAL_MODEL`.
## مكونات النسخة الأولى ## مكونات النسخة الأولى
- FastAPI كواجهة HTTP محلية. - FastAPI كواجهة HTTP محلية.
@@ -20,27 +20,27 @@ py -m venv .venv
python -m pip install -r requirements.txt python -m pip install -r requirements.txt
``` ```
4. (اختياري على جهاز جديد فقط) شغّل Ollama واسحب النموذج: 4. (اختياري على جهاز جديد فقط) شغّل Ollama واسحب Gemma 4 E2B:
```powershell ```powershell
ollama pull qwen2.5:1.5b-instruct-q4_K_M ollama pull gemma4:e2b
``` ```
الخادم الحالي مضبوط افتراضيًا على Ollama المحلي واسم النموذج أعلاه. لتغييرهما عرّف المتغيرات في نافذة PowerShell نفسها: الخادم مضبوط افتراضيًا على Ollama المحلي وGemma 4 E2B. لتغيير عنوان Ollama أو اختيار نموذج آخر، عرّف المتغيرات في نافذة PowerShell نفسها:
```powershell ```powershell
$env:LOCAL_LLM_BASE_URL = "http://127.0.0.1:11434/v1" $env:LOCAL_LLM_BASE_URL = "http://127.0.0.1:11434/v1"
$env:LOCAL_MODEL = "qwen2.5:1.5b-instruct-q4_K_M" $env:LOCAL_MODEL = "gemma4:e2b"
``` ```
لتشغيل API على Gemma 4 بدل النموذج الافتراضي في نافذة PowerShell الحالية: يمكن تثبيت اختيار Gemma صراحةً في الجلسة قبل تشغيل `start-api.ps1` (وهو النموذج الافتراضي للسكربت):
```powershell ```powershell
$env:LOCAL_MODEL = "gemma4:e2b" $env:LOCAL_MODEL = "gemma4:e2b"
.\start-api.ps1 .\start-api.ps1
``` ```
يمكن أيضًا اختيار النموذج لكل طلب من `POST /v1/chat/completions` بإرسال `model`، أو من `POST /v1/agent/run` بإرسال `model` مع `task`. يبقى النموذج الافتراضي Qwen ما لم تغيّره من البيئة. على جهاز الاختبار، Gemma 4 E2B اشتغلت محليًا على CPU، لكنها استخدمت قرابة 3.5 غيغابايت من الذاكرة أثناء التحميل؛ قد تختلف السرعة حسب الجهاز. يمكن أيضًا اختيار النموذج لكل طلب من `POST /v1/chat/completions` بإرسال `model`، أو من `POST /v1/agent/run` بإرسال `model` مع `task`. على جهاز الاختبار، Gemma 4 E2B اشتغلت محليًا على CPU؛ وقد تختلف السرعة واستهلاك الذاكرة حسب الجهاز.
راجع رخصة النموذج المختار وشروطه الحالية قبل الاستخدام التجاري. تنزيل النموذج يحتاج اتصال إنترنت ومساحة تخزين. راجع رخصة النموذج المختار وشروطه الحالية قبل الاستخدام التجاري. تنزيل النموذج يحتاج اتصال إنترنت ومساحة تخزين.
@@ -63,7 +63,13 @@ python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
## واجهة Flutter ## واجهة Flutter
يوجد تطبيق Flutter متعدد المنصات في `flutter_app`، ويبدأ كواجهة محادثة ويب عربية متصلة بهذا الـ API. راجع `flutter_app/README.md` للتشغيل. عنوان الاتصال الافتراضي `http://127.0.0.1:8000`؛ التطبيق يسمح بتغييره من الإعدادات. يوجد تطبيق Flutter متعدد المنصات في `flutter_app`، ويبدأ كواجهة محادثة عربية متصلة بهذا الـ API. عنوان الاتصال الافتراضي `http://127.0.0.1:8000`؛ التطبيق يسمح بتغييره من الإعدادات ويعرض اسم النموذج النشط من الـ API.
### تطبيق Windows
- لتشغيل النسخة المكتبية، شغّل `start-api.ps1` أولًا، ثم افتح `flutter_app/build/windows/x64/runner/Release/flutter_app.exe` بعد بنائه.
- لإنشاء نسخة Release، نفّذ `flutter build windows --release` من داخل `flutter_app`.
- التطبيق المكتبي واجهة أمامية؛ يحتاج Ollama وFastAPI شغّالين على الجهاز. النموذج لا يُضمّن داخل ملف التطبيق التنفيذي، ويظل نسخ الصوت للنص عبر Groq Whisper عند استخدام الميكروفون.
### المحادثات والصوت ### المحادثات والصوت
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail
repo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
cd "$repo_dir"
expected_origin="https://git.intaleqapp.com/Hamza/sovereign_ai.git"
actual_origin="$(git remote get-url origin)"
if [[ "$actual_origin" != "$expected_origin" ]]; then
printf 'Unexpected origin: %s\nExpected: %s\n' "$actual_origin" "$expected_origin" >&2
exit 1
fi
branch="$(git branch --show-current)"
if [[ -z "$branch" ]]; then
echo 'Cannot push from a detached HEAD.' >&2
exit 1
fi
git add -A
if ! git diff --cached --quiet; then
message="${*:-Update SovereignAI project}"
git commit -m "$message"
fi
git push --set-upstream origin "$branch"
+2 -1
View File
@@ -14,8 +14,9 @@ $ollama = Invoke-RestMethod -Uri 'http://127.0.0.1:11434/api/tags' -TimeoutSec 5
$model = if ($env:LOCAL_MODEL) { $model = if ($env:LOCAL_MODEL) {
$env:LOCAL_MODEL $env:LOCAL_MODEL
} else { } else {
'qwen2.5:1.5b-instruct-q4_K_M' 'gemma4:e2b'
} }
Write-Host "Local model: $model"
if (-not ($ollama.models.name -contains $model)) { if (-not ($ollama.models.name -contains $model)) {
throw "Ollama is running, but model '$model' is missing. Run: ollama pull $model" throw "Ollama is running, but model '$model' is missing. Run: ollama pull $model"
} }