Легкий поиск в семантическом коде на любом репозитории 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). Затем фронт запустится, работая на обычном порте 5173 Vite.
В другом терминале в этом же репозитории запустите выпуклую панель панели и посмотрите журналы, чтобы следовать, а также индексация бэкэнд:
$ npx convex dashboard
На панели Logs вы увидите ошибки в отношении отсутствующих переменных среды. У нас есть немного больше настроек!
Dryad использует Openai для суммирования и внедрения. Вам понадобится аккаунт Platform Platform и ключ API. Посетите Platform.openai.com, чтобы позаботиться об этом.
️ Суммирование и индексация даже умеренная кодовая база потребляет достаточное количество кредитов OpenAI. Вам почти наверняка понадобится платная учетная запись!
Анонимное использование API GitHub очень легко получает ограниченную ограниченную ограниченность. Таким образом, 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 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 использует API GitHub (через Octokit), чтобы проверить SHA целевого филиала Repo +. Пока значение, возвращающееся из GitHub, остается таким же, как и последняя индексированная SHA в syncState.commit , repo:sync выходы до следующего опроса.
Но когда обнаружен новый коммит, поле syncState.commit устанавливается на новое SHA, а поле commitDone установлено на False. Это ставит в суд «индексировать этот коммит».
При индексации коммита, repo:sync сначала использует API GitHub "Trees", чтобы получить все дерево файлов этого коммита, включая контрольные суммы файлов, связанные с каждым файлом.
Затем Dryad ходит по всему дереву в поисках файлов исходного кода (в соответствии со спецификацией расширения таблицы «Настройки»). Для каждого исходного файла он определяет, изменилась ли контрольная сумма с тех пор, как файл был проиндексирован. Если файл является новым или изменился, он загружается из репо и повторно индексируется.
В противном случае файл помечен текущим - все еще действителен в новом коммите.
Наконец, после того, как все файлы в дереве были должным образом индексированы, любые файлы, которые больше не являются частью этого нового дерева коммита, удаляются из индекса.
И с этим, commitDone настроен на True, а Dryad возвращается к опросам для нового коммита.
Индексирование исходных файлов включает в себя три шага:
fileGoals Congex, со ссылкой на запись исходного файла в files . Векторное поле цели использует векторную индексацию Congex для поддержки быстрого поиска из веб -приложения. Когда кто-то представляет запрос в веб-приложении, Dryad использует тот же API Openai Entricdings для генерации вектора, а затем использует векторный индекс Concelex, чтобы найти исходные файлы с семантически разногласиной целью к поисковому термину.
Поиск только возвращает каждый исходный файл один раз, возвращая цель с наибольшим рейтингом в качестве основной причины включения этого файла в набор результатов.
На данный момент Дройда довольно проста! Есть много направлений, в которых вы можете принять проект.
Проблемы проекта были выявлены с помощью набора потенциальных расширений и улучшений в Dryad, чтобы заставить колеса обращаться к более сложным вещам, которые можно построить из Dryad.
Счастливого взлома!
Присоединяйтесь к нашему разногласию, чтобы поговорить о Драйде.
Concelex-это размещенная бэкэнд-платформа со встроенной базой данных, которая позволяет записать схему базы данных и функции сервера в TypeScript. Запросы базы данных на стороне сервера автоматически кэшируют и подписываются на данные, включив useQuery в реальном времени крюк в нашем клиенте React. Есть также клиенты для Python, Rust, Reactnative и Node, а также простой API HTTP.
База данных поддерживает документы в стиле NOSQL с отношениями и пользовательскими индексами (в том числе на полях в вложенных объектах).
Функции сервера query и mutation имеют транзакционный, низкий доступ к базе данных и используют наше время выполнения v8 с помощью ограждений детерминизма для обеспечения самых сильных кислотных гарантий на рынке: немедленная согласованность, сериализуемая изоляция и автоматическое разрешение конфликтов посредством оптимистичного контроля с несколькими версиями (OCC / MVCC).
Функции сервера action имеют доступ к внешним API и включают другие побочные эффекты и нетерминизм в нашем оптимизированном времени выполнения v8 , либо в более гибкое время выполнения node .
Функции могут работать в фоновом режиме с помощью планирования и заданий Cron.
Разработка первым, с горячими перезагрузками для редактирования функций сервера через CLI. Существует пользовательский интерфейс для просмотра и редактирования данных, редактирования переменных среды, просмотра журналов, запуска функций сервера и многого другого.
Существуют встроенные функции для реактивной страниц, хранилища файлов, реактивного поиска, конечных точек HTTPS (для веб-хуков), потоковой импорта/экспорта и проверки данных времени выполнения для аргументов функций и данных базы данных.
Все масштабируется автоматически, и это бесплатно.