在〜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)的内置功能,流式传输导入/导出以及功能参数和数据库数据的运行时数据验证。
一切都会自动扩展,并且可以自由启动。