Skip to content

feat(search): add turbovec vector backend - #88

Merged
steipete merged 1 commit into
mainfrom
maint/pr83-turbovec-release
Jun 10, 2026
Merged

feat(search): add turbovec vector backend#88
steipete merged 1 commit into
mainfrom
maint/pr83-turbovec-release

Conversation

@steipete

Copy link
Copy Markdown
Collaborator

Summary

  • Adds optional [search.embeddings].vector_backend = "turbovec" semantic scoring via Crawlkit v0.12.0 while preserving exact cosine as the default.
  • Keeps exact scoring streaming/top-K and batches turbovec candidates before merging the global top-K.
  • Updates README/config docs and maintainer changelog with thanks to @vincentkoc.

Supersedes #83 because the contributor branch has maintainerCanModify=false, so the pseudo-version could not be updated in place.

Proof

  • DISCRAWL_TEST_TURBOVEC_PYTHON=/tmp/.../bin/python go test ./internal/cli ./internal/store -run 'TestSearchSemanticCommandUsesTurboVecBackend|TestSearchMessagesSemanticTurboVecBackend' -count=1 -v
  • GOWORK=off go test ./...
  • GOWORK=off go test -race ./...
  • go test -count=1 ./... -coverprofile=coverage.out plus coverage floor: 85.0%
  • golangci-lint run ./...
  • staticcheck ./...
  • deadcode -test ./...
  • gofumpt -l .
  • go vet ./...
  • go build ./...
  • go mod verify
  • govulncheck ./...
  • gosec -exclude=G101,G115,G202,G301,G304 ./...
  • gitleaks dir . --no-banner --redact
  • gitleaks git --no-banner --redact
  • goreleaser release --snapshot --clean --skip=publish
  • autoreview --mode local: clean, no accepted/actionable findings

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
@steipete
steipete requested a review from a team as a code owner June 10, 2026 23:53
@steipete
steipete merged commit 1916f8e into main Jun 10, 2026
10 checks passed
@steipete
steipete deleted the maint/pr83-turbovec-release branch June 10, 2026 23:56

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8cec59f477

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Model: r.cfg.Search.Embeddings.Model,
InputVersion: store.EmbeddingInputVersion,
Dimensions: dimensions,
VectorBackend: r.cfg.Search.Embeddings.VectorBackend,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve hybrid fallback when turbovec is unavailable

When this option is set to turbovec, hybrid search now routes semantic scoring through the Python bridge. In environments where Python or the turbovec package is not installed, or where the embedding dimensions are unsupported, SearchMessagesSemantic returns a backend error such as score embeddings: run turbovec bridge...; however hybridSemanticUnavailable only falls back for missing embeddings or query-embedding errors. As a result discrawl search --mode hybrid fails instead of returning the FTS results it already computed, which breaks the documented fallback behavior for this optional backend.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant