ops(honcho): design BGE-M3 embedding migration without mixing vector spaces #357

Closed
opened 2026-05-18 01:41:13 +02:00 by codex · 3 comments
Collaborator

Context

Honcho is being prepared for an LLM-only switch to gemma4:31b-cloud through an Ollama Cloud OpenAI-compatible endpoint. Embeddings intentionally stay on the current OpenAI path for this deploy.

Read-only evidence captured on 2026-05-18:

  • documents.embedding is vector(1536) with 26141 rows.
  • message_embeddings.embedding is vector(1536) with 13558 rows.
  • Current embedding model/config remains text-embedding-3-small over the OpenAI transport.
  • Planned BGE-M3 vectors are 1024-dimensional, so they cannot replace existing production vectors in-place.

Problem

BGE-M3 production deployment needs an explicit vector-space migration. Retrieval must never mix embeddings from different model spaces or dimensions.

Required design choices

  1. Add a parallel 1024-dimensional embedding table/column/index while keeping the 1536-dimensional production vectors intact; or
  2. Run a full re-embed migration with backup, shadow validation, rollback, and delayed deletion of old embeddings.

The design must store/query by embedding model version, not only by dimension.

Acceptance criteria

  • Migration plan documents schema shape, indexes, write path, read path, rollback path, and delayed deletion policy.
  • Shadow validation compares retrieval quality without mixing vector spaces.
  • Backup-before commands for Honcho Postgres and Redis are part of the procedure.
  • Production Honcho does not use BGE-M3 until this issue is resolved.
  • Evidence artifact includes BGE-M3 synthetic smoke: 1024 dimensions, PL/EN sentinel texts, batch embedding, p50/p95 latency, and proof the endpoint is internal/local or explicitly cloud-backed.

References

  • state/cutover/honcho-gemma-ollama-prep.md
  • runbooks/honcho-ollama-gemma-switch.md
  • scripts/honcho/bge-m3-embedding-smoke.py
  • OpenClaw issue: pdurlej/iskra-openclaw#293
## Context Honcho is being prepared for an LLM-only switch to `gemma4:31b-cloud` through an Ollama Cloud OpenAI-compatible endpoint. Embeddings intentionally stay on the current OpenAI path for this deploy. Read-only evidence captured on 2026-05-18: - `documents.embedding` is `vector(1536)` with 26141 rows. - `message_embeddings.embedding` is `vector(1536)` with 13558 rows. - Current embedding model/config remains `text-embedding-3-small` over the OpenAI transport. - Planned BGE-M3 vectors are 1024-dimensional, so they cannot replace existing production vectors in-place. ## Problem BGE-M3 production deployment needs an explicit vector-space migration. Retrieval must never mix embeddings from different model spaces or dimensions. ## Required design choices 1. Add a parallel 1024-dimensional embedding table/column/index while keeping the 1536-dimensional production vectors intact; or 2. Run a full re-embed migration with backup, shadow validation, rollback, and delayed deletion of old embeddings. The design must store/query by embedding model version, not only by dimension. ## Acceptance criteria - Migration plan documents schema shape, indexes, write path, read path, rollback path, and delayed deletion policy. - Shadow validation compares retrieval quality without mixing vector spaces. - Backup-before commands for Honcho Postgres and Redis are part of the procedure. - Production Honcho does not use BGE-M3 until this issue is resolved. - Evidence artifact includes BGE-M3 synthetic smoke: 1024 dimensions, PL/EN sentinel texts, batch embedding, p50/p95 latency, and proof the endpoint is internal/local or explicitly cloud-backed. ## References - `state/cutover/honcho-gemma-ollama-prep.md` - `runbooks/honcho-ollama-gemma-switch.md` - `scripts/honcho/bge-m3-embedding-smoke.py` - OpenClaw issue: `pdurlej/iskra-openclaw#293`
Collaborator

🔭 Dziadek: cross-repo coordination

To issue (BGE-M3 embedding migration design) jest częścią większego łańcucha:

Repo Issue Co Status
iskra-openclaw #293 Wizja: Honcho → Gemma + BGE-M3 open
platform #357 (to issue) Design migracji embeddingów owner-attention
platform #359 Infisical secret access (BLOKUJE deploy) owner-attention, BLOCKED
platform #371 Wyciek danych w logach Honcho (security) class/security-sensitive

Kolejność: #371#359#357#293.

## 🔭 Dziadek: cross-repo coordination To issue (BGE-M3 embedding migration design) jest częścią większego łańcucha: | Repo | Issue | Co | Status | |---|---|---|---| | iskra-openclaw | [#293](https://git.pdurlej.com/pdurlej/iskra-openclaw/issues/293) | Wizja: Honcho → Gemma + BGE-M3 | open | | **platform** | **#357 (to issue)** | **Design migracji embeddingów** | `owner-attention` | | platform | [#359](https://git.pdurlej.com/pdurlej/platform/issues/359) | Infisical secret access (BLOKUJE deploy) | `owner-attention`, BLOCKED | | platform | [#371](https://git.pdurlej.com/pdurlej/platform/issues/371) | Wyciek danych w logach Honcho (security) | `class/security-sensitive` | Kolejność: #371 → #359 → #357 → #293.
Author
Collaborator

Codex Fork C — embedding-space design PR opened

PR: #377

Summary:

  • keeps production Honcho embeddings on text-embedding-3-small / 1536d;
  • adds design artifact state/cutover/honcho-embedding-space-migration.md;
  • treats BGE-M3 as first self-host text baseline and Qwen3-Embedding-0.6B as challenger;
  • keeps image/voice/music as later extraction/index lanes, not part of the text-vector switch;
  • extends the synthetic smoke to report expected dimensions and endpoint class without emitting sentinel/private text.

Validation:

  • git diff --check pass;
  • Honcho contract tests: 7 passed;
  • non-local endpoint smoke blocks by default with metadata-only JSON.

This PR does not close #357 and does not wire BGE-M3 into production. It converts #357 into an executable E1-E7 migration sequence with additive schema, shadow validation, backup-before, rollback, and delayed deletion policy.

## Codex Fork C — embedding-space design PR opened PR: https://git.pdurlej.com/pdurlej/platform/pulls/377 Summary: - keeps production Honcho embeddings on `text-embedding-3-small` / 1536d; - adds design artifact `state/cutover/honcho-embedding-space-migration.md`; - treats BGE-M3 as first self-host text baseline and Qwen3-Embedding-0.6B as challenger; - keeps image/voice/music as later extraction/index lanes, not part of the text-vector switch; - extends the synthetic smoke to report expected dimensions and endpoint class without emitting sentinel/private text. Validation: - `git diff --check` pass; - Honcho contract tests: 7 passed; - non-local endpoint smoke blocks by default with metadata-only JSON. This PR does **not** close #357 and does not wire BGE-M3 into production. It converts #357 into an executable E1-E7 migration sequence with additive schema, shadow validation, backup-before, rollback, and delayed deletion policy.
Author
Collaborator

Status note from #699: the Qwen change is text-generation/model-routing only.

#699 updates Honcho's default Ollama/OpenAI-compatible LLM roles to qwen3.5 and keeps embeddings explicitly unchanged on text-embedding-3-small / 1536d. That means this issue remains the canonical embedding-space migration/design gate: no BGE-M3 or Qwen3-Embedding production cutover, no vector-shape change, and no mixed-space retrieval.

So #357 should stay open until the embedding-space migration design and shadow/rollback plan are accepted separately.

Status note from #699: the Qwen change is text-generation/model-routing only. #699 updates Honcho's default Ollama/OpenAI-compatible LLM roles to `qwen3.5` and keeps embeddings explicitly unchanged on `text-embedding-3-small` / 1536d. That means this issue remains the canonical embedding-space migration/design gate: no BGE-M3 or Qwen3-Embedding production cutover, no vector-shape change, and no mixed-space retrieval. So #357 should stay open until the embedding-space migration design and shadow/rollback plan are accepted separately.
Sign in to join this conversation.
No labels
W6d-automerge-calibration
agent/claude-code
agent/codex
agent/hermes
agent/iskra
agent/ollama
agent/patchwarden
automerge-candidate
class/security-sensitive
cutover-gate
dependency/blocked
dependency/blocks-others
dependency/cross-repo
dependency/needs-confirmation
domain:agents
domain:ci
domain:docs
domain:forgejo
domain:infra
domain:memory
domain:runtime
domain:signal
domain:ux
flow/architecture
flow/blocked
flow/deployed
flow/done
flow/implementation
flow/intake
flow/maintained
flow/observed
flow/ready
flow/refining
flow/retired
flow/review
iterating
judge/codex-candidate
judge/hermes-candidate
judge/low-confidence
judge/needs-refinement
judge/operator-needed
judge/p0
judge/p1
judge/p2
judge/p3
judge/park
judge/patchwarden-candidate
judge/stale-priority
kind/adr
kind/bug
kind/chore
kind/feature
kind/infra
kind/ops
kind/refactor
kind/research
large-impact
merge/auto
merge/manual
merge/manual-dependency-conflict
merge/manual-failing-tests
merge/manual-merge-conflict
merge/manual-missing-review
merge/manual-operator-preference
merge/manual-red-zone
merge/manual-security-sensitive
merge/manual-unclear-scope
merge/manual-unknown
meta
mode:operator-only
mode:patchwarden-iskra-approved
mode:safe-auto
needs-operator-decision
needs-triage
not-ready
observed/erroring
observed/needs-followup
observed/pending
observed/retire-candidate
observed/unused
observed/used
operator-emotional
owner-attention
phase/02
phase/03
priority:p0
priority:p1
priority:p2
priority:p3
proposed
ready-for-agent
ready-for-operator
recovery
review:claude-reviewed
review:codex-reviewed
review:dziadek-reviewed
review:needs-human
risk/exposure
risk/process
risk/product
risk/runtime
safety:external-write
safety:no-prod-mutation
safety:prod-impact
safety:secret-touch
size/large
size/medium
size/small
size/tiny
size/unknown
source/adr
source/agent-generated
source/manual
source/operator-chat
source/voice-note
status:blocked
status:codex-ready
status:merged:pending-evidence
status:needs-evidence
status:operator-needed
status:parked
tier/full
tier/lite
tier/stacked
tier:0-platform-substrate
tier:1-iskra-value-layer
tier:2-tools-products-modules
type:bug
type:chore
type:docs
type:feat
type:policy
type:research
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pdurlej/platform#357
No description provided.