Pencarian kode semantik yang mudah pada repositori gitub dalam ~ 1000 sloc.
Lihat demo yang sedang berjalan

Dryad dimaksudkan untuk menjadi proyek demo yang berguna dan templat starter untuk membangun aplikasi web pencarian semantik yang lebih canggih.
Fitur:
HEADPertama, klon repositori dan memulainya:
$ git clone https://github.com/get-convex/dryad.git
$ npm i
$ npm run dev
Ini akan membuat penyebaran cembung cembung Anda, yang akan mencoba untuk mulai mengindeks repositori default (https://github.com/get-covex/convex-helpers). Kemudian, frontend akan mulai, berjalan di port 5173 Vite yang biasa.
Di terminal lain di repositori yang sama ini, luncurkan dasbor cembung dan tonton log yang akan diikuti bersama dengan pengindeksan backend:
$ npx convex dashboard
Di panel Logs , Anda akan melihat kesalahan tentang variabel lingkungan yang hilang. Kami memiliki sedikit lebih banyak pengaturan yang harus dilakukan!
Dryad menggunakan openai untuk meringkas dan menanamkan. Anda akan memerlukan akun platform OpenAI dan kunci API. Kunjungi platform.openai.com untuk mengurusnya.
️ Meringkas dan mengindeks bahkan basis kode moderat mengkonsumsi cukup banyak kredit OpenAI. Anda hampir pasti membutuhkan akun berbayar!
Penggunaan anonim dari GITHUB API Get Rate Limited dengan sangat mudah. Jadi Dryad mengharuskan Anda membuat token akses pribadi menggunakan akun GitHub Anda. Kunjungi https://github.com/settings/tokens untuk menghasilkan token untuk dryad.
Dengan tombol API OpenAI Anda dan token akses GitHub di tangan, kembali ke dasbor penyebaran cembung Anda. Di panel navigasi kiri, klik "Pengaturan", dan kemudian "Variabel Lingkungan".
Sebutkan dua variabel lingkungan rahasia OPENAI_API_KEY dan GITHUB_ACCESS_TOKEN , seperti itu:

settings Jika Anda memeriksa tampilan Logs di dasbor cembung Anda, Dryad sekarang harus berjalan dengan sukses! Tapi itu mengindeks repositori default, get-convex/convex-helpers . Anda mungkin ingin mengindeks kode Anda sendiri.
Kabar Baik! Mudah untuk menyesuaikan perilaku Dryad. Dryad menyimpan semua konfigurasinya di tabel settings di basis data cembung Anda sendiri. Klik tampilan Data di dasbor, lalu pilih tabel settings :

Klik dua kali nilai apa pun di dokumen Pengaturan untuk mengeditnya, atau klik tombol "Edit" biru untuk menambahkan bidang yang hilang ke dokumen. Biasanya, Anda tidak perlu melakukan apa pun agar perubahan Anda berlaku. Tetapi jika Anda ingin kembali, klik runner fungsi Fn di panel kanan bawah dasbor, dan kemudian pilih untuk menjalankan syncState:reset dari dropdown. Tidak ada argumen yang diperlukan.
Skema tabel ini dapat ditemukan di convex/schema.ts di repositori ini. Begitulah rasanya:
// 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 .Tiga hal utama yang harus diliput:
Setiap menit, Dryad memanggil pekerjaan bernama repo:sync . Ini adalah tindakan cembung yang menggunakan tabel yang disebut syncState untuk mengulang antara dua negara:
Saat pemungutan suara untuk komit baru, Dryad menggunakan API GitHub (via Octokit) untuk memeriksa SHA cabang Target Repo +. Selama nilai yang kembali dari GitHub tetap sama dengan SHA yang diindeks terakhir di syncState.commit , repo:sync keluar hingga jajak pendapat berikutnya.
Tetapi ketika komit baru ditemukan, bidang syncState.commit commitDone Ini menempatkan Dryad ke dalam mode "pengindeksan komit".
Saat mengindeks komit, repo:sync pertama kali menggunakan API "Trees" GitHub untuk mengambil seluruh pohon file komitmen itu, termasuk checksum file yang terkait dengan setiap file.
Dryad kemudian berjalan seluruh pohon ini, mencari file kode sumber (sesuai dengan spesifikasi ekstensi tabel `Pengaturan``). Untuk setiap file sumber, ini menentukan apakah checksum telah berubah sejak terakhir kali file diindeks. Jika file baru atau telah berubah, itu diunduh dari repo dan diindeks ulang.
Kalau tidak, file ditandai saat ini - masih valid dalam komit baru.
Akhirnya, setelah semua file di pohon diindeks dengan benar, file apa pun yang tidak lagi menjadi bagian dari pohon komit baru ini dihapus dari indeks.
Dan dengan itu, commitDone diatur ke True dan Dryad kembali ke pemungutan suara untuk komit baru.
Pengindeksan file sumber melibatkan tiga langkah:
fileGoals convex, dengan referensi ke catatan file sumber induk dalam files . Bidang vektor tujuan menggunakan pengindeksan vektor CONVEX untuk mendukung pencarian cepat dari aplikasi web. Ketika seseorang mengirimkan kueri di aplikasi Web, Dryad menggunakan OpenAI Embeddings API yang sama untuk menghasilkan vektor, dan kemudian menggunakan indeks vektor CONVEX untuk menemukan file sumber dengan tujuan yang sangat mirip dengan istilah pencarian.
Pencarian hanya mengembalikan setiap file sumber satu kali, mengembalikan tujuan dengan peringkat tertinggi sebagai alasan utama untuk dimasukkannya file tersebut dalam set hasil.
Dryad cukup mendasar pada saat ini! Ada banyak arah yang bisa Anda ambil.
Masalah proyek telah diunggulkan dengan kumpulan ekstensi potensial dan perbaikan ke Dryad untuk membuat roda berputar tentang hal -hal yang lebih canggih yang dapat dibangun dari Dryad.
Selamat peretasan!
Bergabunglah dengan perselisihan kami untuk berbicara tentang Dryad.
CONVEX adalah platform backend yang di-host dengan database bawaan yang memungkinkan Anda menulis skema database dan fungsi server di TypeScript. Kueri basis data sisi server secara otomatis cache dan berlangganan data, menyalakan realtime useQuery hook di klien reaksi kami. Ada juga klien untuk Python, Rust, Reactnative, dan Node, serta HTTP API langsung.
Basis data mendukung dokumen gaya NoSQL dengan hubungan dan indeks khusus (termasuk di bidang di objek bersarang).
Fungsi server query dan mutation memiliki akses transaksional, latensi rendah ke database dan memanfaatkan runtime v8 kami dengan pagar determinisme untuk memberikan jaminan asam terkuat di pasaran: konsistensi langsung, isolasi serializable, dan resolusi konflik otomatis melalui kontrol konkurensi multi-versi yang optimis (Occuration / MVCC).
Fungsi server action memiliki akses ke API eksternal dan memungkinkan efek samping lainnya dan non-determinisme baik dalam runtime v8 yang dioptimalkan atau runtime node yang lebih fleksibel.
Fungsi dapat berjalan di latar belakang melalui penjadwalan dan pekerjaan cron.
Pengembangan adalah cloud-first, dengan hot reload untuk pengeditan fungsi server melalui CLI. Ada UI dasbor untuk menelusuri dan mengedit data, mengedit variabel lingkungan, tampilan log, menjalankan fungsi server, dan banyak lagi.
Ada fitur bawaan untuk pagination reaktif, penyimpanan file, pencarian reaktif, titik akhir HTTPS (untuk webhooks), streaming impor/ekspor, dan validasi data runtime untuk argumen fungsi dan data basis data.
Semuanya berskala secara otomatis, dan gratis untuk memulai.