Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Search cannot serve a backend: no token, no scores, no paging, no filter

Open
#1,271 5 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
rust

Research direction

Start with the rrf_fuse fusion step and the POST /kbs/{id}/search route, which the issue names as the entry points, and check where the full-text index stores document_id. The issue is a set of separate PRs (scores and paging, token access, filters, MCP search_chunks), so take one piece at a time and read the existing search tests before changing them. Done means the route returns fused scores, per-arm ranks, has_more and vector_used, and the filters narrow both arms, with each piece covered by a test.

Written by the indexing model from the issue text.

Description

enhancement

We want a backend to search a base the way the chat does: hybrid full-text and vector retrieval, fused by rank. POST /kbs/{id}/search is close, but four things stop a service from using it:

  1. It takes a session JWT only; a personal token gets 401.
  2. It returns chunks without scores or ranks, so a caller cannot blend the results with its own or tell a strong hit from a weak one, and it cannot tell when the vector arm was skipped (no embedding model, or the call failed) because the fallback to full-text only is silent.
  3. There is no paging: top_k and nothing else.
  4. It searches the whole base. A base that holds several kinds of documents (code, docs, a memory log), each in its own source, cannot be searched one kind at a time.

Proposal, as small PRs:

  • scores: rrf_fuse keeps the fused score and each arm's rank; the route returns them with source_id, external_id, has_more and vector_used, takes offset, caps top_k at 50, and accepts a token (read scope, kb_ids narrowing, as document content does)
  • filters: source_ids, filename_prefix, external_id_prefix, exclude_missing, pushed into both arms through the document ids they allow (the full-text index already stores document_id, so no reindex)
  • the same filters and scores on MCP search_chunks
Dominant language
Rust
Stars
8.1k
Forks
1.1k
Avg merge
21h 2m
Merged PRs (30d)
263

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from deeplethe/utopia

All issues in deeplethe/utopia

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.