~ 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을 방문하십시오.
켈 중간 정도의 코드베이스조차 요약하고 인덱싱하면 상당한 양의 오픈 라이 크레딧이 소비됩니다. 당신은 거의 확실히 유료 계좌가 필요합니다!
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 기능 러너를 클릭 한 다음 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을 통해)를 사용하여 대상 Repo + Branch의 SHA를 확인합니다. GitHub에서 돌아 오는 값이 syncState.commit 에서 마지막으로 인덱스 된 SHA와 동일하게 유지되는 한, repo:sync 다음 여론 조사까지 종료됩니다.
그러나 새로운 커밋이 발견되면 syncState.commit 필드가 새 SHA로 설정되고 commitDone 필드가 False로 설정됩니다. 이로 인해 DryAD는 "Commit Commit"모드에 "INDEXING"으로 만듭니다.
커밋을 색인화 할 때 repo:sync 먼저 GitHub "Trees"API를 사용하여 모든 파일과 관련된 파일 체크섬을 포함하여 해당 커밋의 전체 파일 트리를 가져옵니다.
그런 다음 Dryad는이 전체 트리를 걸어 소스 코드 파일을 찾고 있습니다 (`settings` 테이블의 확장 사양에 따라). 모든 소스 파일의 경우 파일이 마지막으로 인덱싱 된 이후 체크섬이 변경되었는지 확인합니다. 파일이 새 것으로 또는 변경된 경우 Repo에서 다운로드하고 다시 표시됩니다.
그렇지 않으면 파일이 New Commit에서 유효한 현재 - 유효합니다.
마지막으로, 트리의 모든 파일이 올바르게 인덱싱 된 후에이 새로운 커밋 트리의 일부가 아닌 파일은 인덱스에서 제거됩니다.
그리고 commitDone True로 설정되었으며 Dryad는 새로운 커밋을 위해 여론 조사로 돌아갑니다.
소스 파일 인덱싱 세 가지 단계가 포함됩니다.
files 의 상위 소스 파일 레코드를 참조하여 Convex의 fileGoals 테이블에 저장하십시오. 목표의 벡터 필드는 Convex의 벡터 인덱싱을 사용하여 웹 앱에서 빠른 검색을 지원하는 것입니다. 누군가가 웹 앱에 쿼리를 제출하면 Dryad는 동일한 OpenAI Imbeddings API를 사용하여 벡터를 생성 한 다음 VieC의 벡터 인덱스를 사용하여 검색 용어에 의미 적으로 유사한 목표를 가진 소스 파일을 찾습니다.
검색은 각 소스 파일 만 한 번만 리턴하여 결과 세트에 해당 파일이 포함 된 주된 이유로 가장 높은 순위 목표를 반환합니다.
이 시점에서 Dryad는 매우 기본적입니다! 프로젝트를 취할 수있는 많은 지침이 있습니다.
이 프로젝트의 문제는 Dryad에서 구축 될 수있는보다 정교한 것들을 바꾸어 바퀴를 돌리기 위해 잠재적 확장 및 Dryad에 대한 개선으로 인해 시드되었습니다.
행복한 해킹!
Dryad에 대해 이야기하기 위해 불화에 가입하십시오.
Convex는 내장 데이터베이스가있는 호스팅 된 백엔드 플랫폼으로, 데이터베이스 스키마 및 서버 기능을 TypeScript에서 작성할 수 있습니다. 서버 측 데이터베이스 쿼리는 자동으로 캐시 및 데이터를 구독하여 React 클라이언트에서 실시간 useQuery 훅을 전원합니다. 또한 Python, Rust, Reactnative 및 Node의 클라이언트와 간단한 HTTP API가 있습니다.
데이터베이스는 관계 및 사용자 정의 인덱스 (중첩 객체의 필드 포함)가있는 NOSQL 스타일 문서를 지원합니다.
query 및 mutation 서버 기능에는 데이터베이스에 대한 트랜잭션, 낮은 대기 시간 액세스가 있으며, 낙관적 v8 버전 동시 제어 (OCC / MVCC)를 통한 즉각적인 일관성, 직렬화 가능한 격리 및 자동 충돌 해상도 (즉각적인 일관성, 직렬화 가능한 격리 및 자동 충돌 해상도)를 제공하기 위해 Decininism Guardrails와 함께 V8 런타임을 활용합니다.
action Server 기능은 외부 API에 액세스 할 수 있으며 최적화 된 v8 런타임 또는보다 유연한 node 런타임에서 다른 부작용 및 비 결정을 가능하게합니다.
기능은 스케줄링 및 CRON 작업을 통해 백그라운드에서 실행할 수 있습니다.
CLI를 통한 서버 기능 편집을위한 핫 재 장전이있는 개발은 클라우드 우선입니다. 데이터를 탐색하고 편집하고 환경 변수 편집, 로그보기, 서버 기능 실행 등을위한 대시 보드 UI가 있습니다.
반응 페이지 매김, 파일 저장, 반응성 검색, HTTPS 엔드 포인트 (WebHooks), 스트리밍 가져 오기/내보내기 및 기능 인수 및 데이터베이스 데이터에 대한 런타임 데이터 유효성에 대한 내장 기능이 있습니다.
모든 것이 자동으로 스케일링되며 무료로 시작할 수 있습니다.