سهولة البحث عن رمز الدلالي على أي مستودع github في ~ 1000 SLOC.
تحقق من العرض التوضيحي

يهدف Dryad إلى أن يكون مشروعًا تجريبيًا مفيدًا وقالبًا مبتدئًا لبناء تطبيقات ويب للبحث الدلالي أكثر تطوراً.
سمات:
HEADأولاً ، استنساخ المستودع وابدأه:
$ git clone https://github.com/get-convex/dryad.git
$ npm i
$ npm run dev
سيؤدي ذلك إلى إنشاء نشر خلفي محدب ، والذي سيحاول البدء في فهرسة المستودع الافتراضي (https://github.com/get-convex/convex-helpers). بعد ذلك ، ستبدأ الواجهة الأمامية ، تعمل على منفذ Vite المعتاد 5173.
في محطة أخرى في هذا المستودع نفسه ، قم بتشغيل لوحة معلومات محدب وشاهد السجلات لمتابعة مع فهرسة الواجهة الخلفية:
$ npx convex dashboard
في لوحة Logs ، سترى أخطاء حول متغيرات البيئة المفقودة. لدينا المزيد من الإعداد لفعله!
يستخدم Dryad Openai للتلخيص والتضمين. ستحتاج إلى حساب منصة Openai ومفتاح API. تفضل بزيارة platform.openai.com لرعاية ذلك.
️ تلخيص وفهرسة حتى قاعدة كود معتدلة تستهلك قدرا كبيرا من ائتمانات Openai. من المؤكد أنك ستحتاج إلى حساب مدفوع الأجر!
الاستخدامات المجهولة ل Github API الحصول على معدل محدود بسهولة. لذا ، تتطلب Dryad أن تقوم بإنشاء رمز وصول شخصي باستخدام حساب GitHub الخاص بك. تفضل بزيارة https://github.com/settings/tokens لإنشاء رمز لـ Dryad.
باستخدام مفتاح API Openai الخاص بك ورمز الوصول إلى GitHub في متناول اليد ، عد إلى لوحة القيادة الخاصة بنشرك المحدب. في لوحة التنقل اليسرى ، انقر فوق "إعدادات" ، ثم "متغيرات البيئة".
قم بتسمية متغيرات البيئة السرية OPENAI_API_KEY و GITHUB_ACCESS_TOKEN ، مثل ذلك:

settings إذا قمت بفحص عرض Logs في لوحة معلومات محدب ، فيجب أن يكون Dryad الآن يعمل بنجاح! لكنه يقوم بفهرسة المستودع الافتراضي ، get-convex/convex-helpers . ربما تريد ذلك فهرسة الكود الخاص بك بدلاً من ذلك.
أخبار جيدة! من السهل تخصيص سلوك درياد. يحافظ Dryad على كل تكوينه في جدول settings في قاعدة بيانات محدب بنفسك. انقر فوق عرض Data في لوحة القيادة ، ثم اختر جدول settings :

انقر نقرًا مزدوجًا إلى أي قيمة في مستند الإعدادات لتحريره ، أو انقر فوق الزر "تحرير" الأزرق لإضافة حقول مفقودة إلى المستند. عادة ، يجب ألا تحتاج إلى فعل أي شيء من أجل أن تدخل تغييراتك. ولكن إذا كنت ترغب في reindex على أي حال ، فانقر فوق عداء Fn Function في اللوحة اليمنى السفلى من لوحة القيادة ، ثم اختر تشغيل syncState:reset من القائمة المنسدلة. لا توجد حجج مطلوبة.
يمكن العثور على مخطط هذا الجدول في convex/schema.ts في هذا المستودع. هذا ما يبدو عليه:
// Various project settings you can tweak in the dashboard as we go.
settings : defineTable ( {
org : v . string ( ) ,
repo : v . string ( ) ,
branch : v . string ( ) ,
extensions : v . array ( v . string ( ) ) ,
exclusions : v . optional ( v . array ( v . string ( ) ) ) , // defaults to no exclusions
byteLimit : v . optional ( v . number ( ) ) , // defaults to 24,000 bytes
chatModel : v . optional ( v . string ( ) ) , // defaults to gpt-4
} ) ,facebook .react .gpt-3.5-turbo ، gpt-4 .ثلاثة أشياء رئيسية يجب تغطيتها:
في كل دقيقة ، يدعو دراياد وظيفة تدعى repo:sync . هذا إجراء محدب يستخدم جدولًا يسمى syncState للحلق بين حالتين:
أثناء الاقتراع من أجل التزام جديد ، يستخدم Dryad واجهة برمجة تطبيقات Github (عبر Octokit) للتحقق من SHA من فرع REPO + المستهدف. طالما أن القيمة التي تعود من Github تظل كما هي آخر شا فهرسة في syncState.commit ، repo:sync يخرج حتى الاستطلاع التالي.
ولكن عندما يتم اكتشاف التزام جديد ، يتم تعيين حقل syncState.commit على ذلك على SHA الجديد ، ويتم ضبط حقل Tha commitDone على خطأ. هذا يضع Dryad في وضع "الفهرسة التي تلتزم".
عند فهرسة الالتزام ، يستخدم repo:sync أولاً واجهة برمجة تطبيقات GitHub "Trees" لجلب شجرة الملف بأكملها من هذا الالتزام ، بما في ذلك اختبارات الملف المرتبطة بكل ملف.
ثم يسير درياد هذه الشجرة بأكملها ، وتبحث عن ملفات التعليمات البرمجية المصدر (وفقًا لمواصفات تمديد جدول "الإعدادات"). بالنسبة لكل ملف مصدر ، يحدد ما إذا كان Checksum قد تغير منذ آخر مرة تم فيها فهرسة الملف. إذا كان الملف جديدًا أو تم تغييره ، فسيتم تنزيله من الريبو وإعادة الفهرس.
وإلا يتم وضع علامة على الملف الحالي - لا يزال صالحًا في الالتزام الجديد.
أخيرًا ، بعد فهرسة جميع الملفات في الشجرة بشكل صحيح ، تتم إزالة أي ملفات لم تعد جزءًا من شجرة الالتزام الجديدة هذه من الفهرس.
ومع ذلك ، يتم تعيين commitDone إلى True و Dryad يعود إلى الاقتراع من أجل التزام جديد.
تتضمن ملفات مصدر الفهرسة ثلاث خطوات:
fileGoals من محدب ، مع مرجع إلى سجل ملف المصدر الأصل في files . يستخدم حقل ناقلات الهدف الفهرسة المتجهية في محدب لدعم البحث السريع من تطبيق الويب. عندما يقوم شخص ما بتقديم استعلام في تطبيق الويب ، يستخدم Dryad نفس API Openai Embeddings لإنشاء ناقل ، ثم يستخدم فهرس ناقل محدب للعثور على ملفات المصدر بهدف مشابه بشكل دلالي لمصطلح البحث.
يؤدي البحث فقط إلى إرجاع كل ملف مصدر مرة واحدة ، وإرجاع الهدف الأعلى مرتبة كسبب أساسي لإدراج هذا الملف في مجموعة النتائج.
درياد أساسي للغاية في هذه المرحلة! هناك الكثير من الاتجاهات التي يمكن أن تأخذها المشروع.
تم زرع مشكلات المشروع بمجموعة من الامتدادات المحتملة والتحسينات على درياد للحصول على العجلات حول الأشياء الأكثر تطوراً التي يمكن بناؤها من درياد.
قرصنة سعيدة!
انضم إلى خلافنا للحديث عن درياد.
Convex عبارة عن منصة خلفية مستضافة مع قاعدة بيانات مدمجة تتيح لك كتابة مخطط قاعدة البيانات الخاص بك ووظائف الخادم في TypeScript. استعلامات قاعدة البيانات من جانب الخادم تلقائيًا وتخزينها واشتراكها في البيانات ، وتشغيل خطاف useQuery في الوقت الفعلي في عميل React الخاص بنا. هناك أيضًا عملاء لـ Python و Rust و Reactnative و Node ، بالإضافة إلى واجهة برمجة تطبيقات HTTP مباشرة.
تدعم قاعدة البيانات مستندات على غرار NOSQL مع العلاقات والفهارس المخصصة (بما في ذلك الحقول في الكائنات المتداخلة).
تتمتع وظائف خادم query mutation بالمعاملات والوصول إلى الكمون المنخفض إلى قاعدة البيانات والاستفادة من وقت تشغيل v8 الخاص بنا مع الدرابزينات الحتمية لتوفير أقوى ضمانات الحمض في السوق: الاتساق الفوري ، والعزلة القابلة للتسلسل ، وحل الصراع التلقائي من خلال التحكم في التوافق متعدد النفس المتفائل (OCC / MVCC).
تتمتع وظائف خادم action بإمكانية الوصول إلى واجهات برمجة التطبيقات الخارجية وتمكين الآثار الجانبية الأخرى وغير المحددة إما في وقت تشغيل v8 المحسن أو وقت تشغيل node أكثر مرونة.
يمكن أن تعمل الوظائف في الخلفية من خلال الجدولة والوظائف cron.
التطوير هو السحابة الأولى ، مع إعادة تحميل الساخنة لتحرير وظيفة الخادم عبر CLI. هناك واجهة مستخدم لوحة معلومات لتصفح وتحرير البيانات ، وتحرير متغيرات البيئة ، وسجلات العرض ، وتشغيل وظائف الخادم ، والمزيد.
هناك ميزات مدمجة للترقيم التفاعلي ، وتخزين الملفات ، والبحث التفاعلي ، ونقاط نهاية HTTPS (لوكوكات الويب) ، ودفق الاستيراد/التصدير ، والتحقق من صحة بيانات وقت التشغيل لوسائط الوظائف وبيانات قاعدة البيانات.
كل شيء يتردد تلقائيًا ، وهو مجاني للبدء.