ochakai 0.10.2
Attachments become searchable (design doc 0020, #92): filenames match in every search, and attachment contents join hybrid search — the follow-through on the groundwork design doc 0013 laid when it aligned the attachment allowlist with what Gemini embeds.
Attachment search (design doc 0020)
- Filenames join the lexical haystack. Searching
seedsfinds the entry carryingseeds.txt— on every instance, embedder or not, effective immediately for existing attachments. - Attachment contents join hybrid search. On attach, the file is embedded into a new
attachment_embeddingtable and fused into results as a third reciprocal-rank-fusion list. A hit is always the owning entry — attachments never stand alone (design doc 0008/0013), and ochakai still never interprets them (embedding is deterministic encoding, not interpretation).text/plainembeds through the text path and works with any embedding model.- Images and PDFs embed with
gemini-embedding-2(GA 2026-04-22): setOCHAKAI_VERTEX_MODEL=gemini-embedding-2andOCHAKAI_VERTEX_LOCATION=global(the model lives inglobal/us/euonly). On a text-only model they stay findable by name.
- Replacing or detaching an attachment drops its vector in the same transaction; soft-deleting an entry keeps attachment vectors stored (search never surfaces them — revival brings them back).
- No backfill, matching entry embeddings: only new attaches embed. Filename search needs none.
gemini-embedding-2 wire dialect
The Vertex driver now speaks two dialects, selected by model name: gemini-embedding-2* uses v1 :embedContent — task instructions folded into the prompt (the model has no task_type), outputDimensionality top-level, file bytes as inline_data parts next to a filename text part — while earlier models keep :predict + task_type. Verified against the live API; details recorded in design doc 0020 §2.3.
Switching an existing knowledge base to gemini-embedding-2 leaves previously stored vectors in the old model's space until entries are written again — there is no reindex mechanism, by the same write-time-only posture as entry embeddings. The default model stays gemini-embedding-001.
Container image
docker pull ghcr.io/na0fu3y/ochakai:0.10.2
gh attestation verify oci://ghcr.io/na0fu3y/ochakai:0.10.2 -R na0fu3y/ochakai