在〜1000 sloc中的任何github存儲庫上的簡易語義代碼搜索。
查看運行的演示

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來解決這個問題。
配x 總結和索引甚至中等的代碼庫也會消耗大量的OpenAI信用。您幾乎肯定需要一個付費帳戶!
GitHub API的匿名用途非常容易獲得限制。因此,Dryad要求您使用GitHub帳戶生成個人訪問令牌。訪問https://github.com/settings/tokens為Dryad生成一個令牌。
借助您的OpenAI API鍵,並手頭訪問GITHUB訪問令牌,請返回凸部部署的儀表板。在左導航面板中,單擊“設置”,然後單擊“環境變量”。
命名兩個秘密環境變量OPENAI_API_KEY和GITHUB_ACCESS_TOKEN ,例如:

settings表中自定義Dryad設置如果您檢查凸儀表板中的Logs視圖,Dryad現在應該成功運行!但這是索引默認存儲庫, get-convex/convex-helpers 。您可能希望它索引自己的代碼。
好消息!自定義Dryad的行為很容易。 Dryad將其所有配置都保存在凸數據庫本身的settings表中。單擊儀表板中的Data視圖,然後選擇settings表:

雙擊“設置文檔”中的任何值以進行編輯,或單擊藍色“編輯”按鈕以在文檔中添加缺失字段。通常,您不需要做任何事情才能生效。但是,如果您想在儀表板的右下面板中單擊Fn功能跑步者,請選擇Runner,然後選擇運行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 。要涵蓋的三件事:
每分鐘,Dryad都會調用名為repo:sync工作。這是一個凸操作,它使用稱為syncState的表在兩個狀態之間循環:
在對新提交進行投票時,Dryad使用GitHub API(通過OCTOKIT)檢查目標倉庫 +分支的SHA。只要從github返回repo:sync值與syncState.commit中的最後一個索引的sha相同。
但是,當發現新提交時,將syncState.commit字段設置為新的SHA,然後將THA commitDone字段設置為false。這使Dryad進入“索引該提交”模式。
索引提交時, repo:sync首先使用github“樹” API獲取該提交的整個文件樹,包括與每個文件關聯的文件checksums。
然後,Dryad然後走整棵樹,尋找源代碼文件(根據“設置”的擴展規範)。對於每個源文件,它都會確定自上次索引以來的校驗和是否已更改。如果文件是新的或已更改的,則將其從存儲庫下載並重新索引。
否則,該文件將在新提交中標記為電流。
最後,在正確索引了樹中的所有文件之後,從索引中刪除了該新提交樹中不再部分的任何文件。
因此, commitDone設定為真實,Dryad可以追溯到新的提案。
索引源文件涉及三個步驟:
fileGoals表中,並引用files中的父源文件記錄。該目標的向量字段使用凸的矢量索引來支持Web應用程序的快速搜索。 當某人在Web應用中提交查詢時,Dryad使用相同的OpenAI嵌入式API生成向量,然後使用convex的矢量索引來查找具有搜索詞的語義相似目標的源文件。
搜索僅一次返回每個源文件,將排名最高的目標作為該文件包含在結果集中的主要原因。
在這一點上,Dryad是很基本的!您可以將項目帶入很多方向。
該項目的問題已經播種了一些潛在的擴展和改進,以使車輪變成更複雜的事物,這些東西可以從Dryad構建。
快樂黑客!
加入我們的不和諧談論Dryad。
凸面是一個帶有內置數據庫的託管後端平台,可讓您在打字稿中編寫數據庫架構和服務器功能。服務器端數據庫查詢自動緩存並訂閱數據,並在我們的React客戶端中為實時useQuery鉤供電。還有Python,Rust,Reactnative和Node的客戶,以及直接的HTTP API。
該數據庫支持具有關係和自定義索引的NOSQL風格文檔(包括嵌套對像中的字段)。
query和mutation服務器功能具有交易性的,低的延遲訪問數據庫的訪問權限,並利用確定性護欄的v8運行時間來提供市場上最強的酸保證:即時一致性,可序列化的隔離,以及通過樂觀的多次多反轉一致性控制(OCC / MVCC)通過樂觀的多次沖突解決。
action服務器功能可以訪問外部API,並在我們優化的v8運行時或更靈活的node運行時啟用其他副作用和非確定性。
功能可以通過調度和CRON作業在後台運行。
開發是雲優先,並帶有用於通過CLI的服務器功能編輯的熱裝加載。有一個儀表板UI可以瀏覽和編輯數據,編輯環境變量,查看日誌,運行服務器功能等。
有用於反應性分頁,文件存儲,反應性搜索,HTTPS端點(用於Webhooks)的內置功能,流式傳輸導入/導出以及功能參數和數據庫數據的運行時數據驗證。
一切都會自動擴展,並且可以自由啟動。