78 lines
4.0 KiB
Markdown
78 lines
4.0 KiB
Markdown
# Source-code relevance checkpoint
|
||||
|
|
|
|||
|
|
Recorded 2026-10-12 using the actual verified Google EmbeddingGemma 2 Q8_0
|
|||
|
|
model, rebuilt native worker, shared hybrid service and MCP protocol. Windows
|
|||
|
|
VM, CPU only, one inference thread. No simulated provider or injected vectors.
|
|||
|
|
|
|||
|
|
Google describes local code retrieval in its
|
|||
|
|
[launch blog](https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/).
|
|||
|
|
Its [model card](https://ai.google.dev/gemma/docs/embeddinggemma/model_card_2)
|
|||
|
|
specifies `task: code retrieval | query: {query}` for queries and
|
|||
|
|
`title: {filename} | text: {code}` for indexed source. searchi uses that pairing
|
|||
|
|
in Code scope. Google's published benchmark measures their full-precision
|
|||
|
|
checkpoint; it is not a searchi benchmark.
|
|||
|
|
|
|||
|
|
## Frozen small regression
|
|||
|
|
|
|||
|
|
[The evaluator](../tools/code-eval/evaluate.py) fixes the implementations,
|
|||
|
|
queries and expected files before inference. Eight short source files use
|
|||
|
|
generic filenames; a ninth ordinary document deliberately contains search
|
|||
|
|
terms. All nine files are indexed, so code filtering must exclude that document
|
|||
|
|
before ranking. The expected code excerpts are checked byte-for-byte through
|
|||
|
|
MCP `read_source`, including line locations. Fixture hashes and every returned
|
|||
|
|
rank are recorded in [raw CPU evidence](evidence/code-search-cpu.json).
|
|||
|
|
|
|||
|
|
| Query intent | Source | Lexical rank | Hybrid rank |
|
|||
|
|
| --- | --- | --- | --- |
|
|||
|
|
| Streaming file SHA256 | Python | absent | 1 |
|
|||
|
|
| Lower bound in sorted numbers | C++ | absent | 1 |
|
|||
|
|
| Sum amounts by category | TypeScript | absent | 1 |
|
|||
|
|
| Retry requests with exponential backoff | Python | absent | 1 |
|
|||
|
|
| Release semaphore after async failure | C# | absent | 1 |
|
|||
|
|
| Escape unsafe HTML characters | PHP | absent | 1 |
|
|||
|
|
| Ten most expensive records | Python | absent | 1 |
|
|||
|
|
| File verification without full memory load, German | Python | absent | 1 |
|
|||
|
|
| Exact `refreshAccessToken` symbol | Rust | 1 | 1 |
|
|||
|
|
|
|||
|
|
Top-1 success: **9/9 hybrid, 1/9 lexical**. Every expected hybrid source was
|
|||
|
|
verified and no ordinary document leaked into Code scope. Measured MCP
|
|||
|
|
roundtrips for these nine uncached code queries ranged from **63.88–228.21 ms**,
|
|||
|
|
median **110.76 ms**. Those timings exclude process/model startup and describe
|
|||
|
|
this tiny corpus only; they are not desktop first-use or large-project targets.
|
|||
|
|
|
|||
|
|
## Defect discovered and fixed
|
|||
|
|
|
|||
|
|
The first actual indexing attempt failed on TypeScript: Google's tokenizer
|
|||
|
|
normalized source characters, invalidating a detokenization-based byte-offset
|
|||
|
|
assumption. The worker now retains original UTF-8 source, checks the complete
|
|||
|
|
prefixed token budget, and splits normalized long inputs on original character
|
|||
|
|
boundaries. It returns exact original slices with bounded overlap and complete
|
|||
|
|
tail coverage. Short code that fits uses a direct fast path. A separate actual
|
|||
|
|
CPU regression covers the failing TypeScript plus roughly 38 KB of repeated
|
|||
|
|
code with German, Japanese and emoji. Fixtures were not edited to hide failure.
|
|||
|
|
|
|||
|
|
Additional checks cover strict filtering before lexical/ANN candidate limits,
|
|||
|
|
named build files, overlapping routine context, schema upgrades, task-specific
|
|||
|
|
query caching, actual code/general vector separation and debug-vector parity.
|
|||
|
|
|
|||
|
|
## Reproduce and limits
|
|||
|
|
|
|||
|
|
Build the CLI and provision the pinned CPU worker/model as documented in
|
|||
|
|
[BUILDING.md](BUILDING.md) and [SEMANTIC.md](SEMANTIC.md), then run:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
$env:SEARCHI_FORCE_CPU = '1'
|
|||
|
|
python tools/code-eval/evaluate.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The script uses the repository's generated `.searchi/code-eval` folder and
|
|||
|
|
default local runtime/model paths. It does not index private project folders.
|
|||
|
|
Outputs stay in that generated folder until deliberately reviewed and copied
|
|||
|
|
into documentation evidence.
|
|||
|
|
|
|||
|
|
These are synthetic, short implementations with one intended answer per query.
|
|||
|
|
They do not prove general project accuracy, declaration-first ranking,
|
|||
|
|
call-graph understanding or reliable no-answer detection. Extraction is
|
|||
|
|
line-based, not an AST parser. Independent real repositories, difficult
|
|||
|
|
near-duplicates, more languages, native UI interaction, other operating systems
|
|||
|
|
and actual GPU execution remain open evaluation gates.
|