Add web research and source file reading

This commit is contained in:
Hamza Ayed
2026-10-01 14:06:36 +03:00
parent 2d3778a92e
commit dc4d5bad0f
9 changed files with 310 additions and 23 deletions
+17 -3
View File
@@ -76,7 +76,20 @@ python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
}
```
يرجع الرد عنوان الصفحة ورابط المصدر وإجابة النموذج. هذا **قراءة لرابط محدد** وليس بحثًا عامًا؛ الصفحات التي تتطلب JavaScript أو تسجيل دخول لا تُقرأ بهذه النسخة. يسمح المسار فقط بروابط HTTP/HTTPS العامة، ويرفض العناوين المحلية، ويحد حجم الصفحة المقروءة إلى 2 MB. بحث الويب المتعدد المصادر سيأتي كأداة مستقلة لاحقًا.
يرجع الرد عنوان الصفحة ورابط المصدر وإجابة النموذج. هذا المسار **لقراءة رابط محدد**؛ الصفحات التي تتطلب JavaScript أو تسجيل دخول قد لا تُقرأ.
### البحث العميق على الإنترنت
يوفر `POST /v1/web/search` بحثًا أوليًا متعدد المصادر بلا مفتاح API باستخدام نتائج DuckDuckGo العامة. يجلب حتى 8 نتائج من نطاقات مختلفة، يحاول قراءة صفحاتها العامة، ثم يطلب من النموذج المحلي تلخيص المعلومات مع إحالات مرقمة وروابط المصادر. من واجهة Mithqal AI فعّل زر الكرة الأرضية ثم اكتب موضوع البحث. بعض المواقع تمنع القراءة الآلية أو تعتمد على JavaScript؛ عندها يظهر المصدر بوصفه مقتطف بحث فقط. المسار يرفض العناوين المحلية ويحد أحجام الصفحات ومصادرها.
```json
{
"query": "كيف تعمل FastAPI dependency injection؟",
"max_results": 5
}
```
هذا إصدار تجريبي يعتمد على صفحة نتائج عامة وقد يتأثر بالحجب أو تغييرات HTML ومعدلات الطلب؛ بنية مزوّد البحث قابلة للاستبدال لاحقًا بواجهة رسمية عند اختيار مزود ومفتاح مناسبين.
خادم التطبيق مربوط بـ `127.0.0.1`: يمكنه إجراء اتصالات صادرة إلى خدمات الإنترنت مثل Groq وقراءة المواقع العامة، لكنه غير منشور ليستقبل طلبات من أجهزة خارج هذا الكمبيوتر.
@@ -92,8 +105,9 @@ python -m uvicorn app.main:app --reload --host 127.0.0.1 --port 8000
- لتشغيل النسخة المكتبية، شغّل `start-api.ps1` أولًا، ثم افتح `flutter_app/build/windows/x64/runner/Release/flutter_app.exe` بعد بنائه.
- يعرض شريط المحادثة قائمة النماذج المثبتة من Ollama؛ اختيار النموذج يمرر اسمه مع الطلب.
- زر المجلد يفعّل وضع الوكيل للقراءة فقط. عند تشغيل `start-api.ps1` تكون مساحة العمل الافتراضية مجلد المشروع `SovereignAI-Starter`؛ لتغييرها عرّف `SOVEREIGNAI_WORKSPACE` قبل تشغيل الخدمة.
- الوكيل يطابق السؤال مع ملفات النص/الكود المدعومة، يمرر مقتطفات محدودة للنموذج، ويعيد أسماء الملفات التي قرأها. الملفات المخفية، مجلدات `.git` وبيئات البناء، والملفات الكبيرة أو خارج جذر مساحة العمل مستثناة.
- زر المجلد يفعّل وضع الوكيل للقراءة فقط، وزر الكرة الأرضية يفعّل البحث العميق متعدد المصادر. عند تشغيل `start-api.ps1` تكون مساحة العمل الافتراضية مجلد المشروع `SovereignAI-Starter`؛ لتغييرها عرّف `SOVEREIGNAI_WORKSPACE` قبل تشغيل الخدمة.
- الوكيل يطابق السؤال مع ملفات النص/الكود المدعومة، ويمرر مقتطفات محدودة للنموذج؛ عند ذكر مسار نسبي مثل `app/main.py` يزيد المقتطف إلى 12,000 حرف كحد أقصى. يعيد أسماء الملفات التي قرأها. الملفات المخفية، مجلدات `.git` وبيئات البناء، والملفات الكبيرة أو خارج جذر مساحة العمل مستثناة. اختيار ملف عبر نافذة النظام لم يُضف بعد.
- Gemma 4 E2B لديها قدرة نموذجية على إدخال الصور والصوت وفهم المستندات وفق [بطاقة Google الرسمية](https://ai.google.dev/gemma/docs/core/model_card_4)، لكن هذه الواجهة الحالية لا ترفع صورًا/PDF ولا تمرر مدخلات الصور بعد؛ نحتاج إضافة ذلك في التطبيق والخادم. قراءة ملفات الكود النصية تعمل ضمن مساحة العمل.
- لإنشاء نسخة Release، نفّذ `flutter build windows --release` من داخل `flutter_app`.
- التطبيق المكتبي واجهة أمامية؛ يحتاج Ollama وFastAPI شغّالين على الجهاز. النموذج لا يُضمّن داخل ملف التطبيق التنفيذي، ويظل نسخ الصوت للنص عبر Groq Whisper عند استخدام الميكروفون.