tirth8205/code-review-graph · error · ValueError
Embedding refresh refused: existing embeddings use {existing
Error message
Embedding refresh refused: existing embeddings use {existing}; requested provider resolves to {resolved_identity}. What it means
refresh refuses when the set of provider identities stored in the embeddings table differs from what the requested provider resolves to (including endpoint for OpenAI-compatible setups). This prevents mixing vectors from different models/endpoints in one index.
Source
Thrown at code_review_graph/embeddings.py:1388
graph_store.db_path,
provider=provider,
model=model,
)
try:
if not embedding_store.available or embedding_store.provider is None:
raise RuntimeError(
f"Embedding provider '{provider}' is unavailable in this environment.",
)
resolved_identity = embedding_store.provider.name
if provider == "minimax":
resolved_model = resolved_identity.partition(":")[2]
if model != resolved_model:
raise ValueError(
f"MiniMax refresh model must be '{resolved_model}', got '{model}'.",
)
if identities != {resolved_identity}:
existing = ", ".join(sorted(identities))
raise ValueError(
"Embedding refresh refused: existing embeddings use "
f"{existing}; requested provider resolves to {resolved_identity}.",
)
purged = embedding_store.purge_orphans()
all_nodes: list[GraphNode] = []
for file_path in graph_store.get_all_files():
all_nodes.extend(graph_store.get_nodes_by_file(file_path))
embedded = embedding_store.embed_nodes(all_nodes)
return {"embedded": embedded, "purged": purged}
finally:
embedding_store.close()
def semantic_search(
query: str,
graph_store: GraphStore,
embedding_store: EmbeddingStore,View on GitHub (pinned to b58668751a)
Solutions
- Refresh with the exact existing identity (the error lists 'existing' vs 'resolved')
- If a genuine migration is intended, run an explicit full re-embed under the new provider/model
- Restore the env config (base URL, model) that was active when the index was built
Example fix
# before export CRG_OPENAI_BASE_URL=https://api.openai.com/v1 refresh_embeddings(gs, provider='openai', model='text-embedding-3-small') # rows were embedded via custom gateway # after export CRG_OPENAI_BASE_URL=https://gateway.example.com/v1 # match original identity refresh_embeddings(gs, provider='openai', model='text-embedding-3-small')
Defensive patterns
Strategy: validation
Validate before calling
rows = gs._conn.execute("SELECT DISTINCT provider FROM embeddings").fetchall()
identities = {r["provider"] for r in rows}
if identities and identities != {expected_identity}:
raise RuntimeError(f"index uses {identities}; refusing refresh") Try / catch
try:
refresh_embeddings(gs, provider=p, model=m)
except ValueError as e:
if "existing embeddings use" in str(e):
# intentional migration → full re-embed instead of refresh
embed_graph(gs, provider=p, model=m)
else:
raise Prevention
- Freeze provider/base-url/model config between embed and refresh
- Store the embed-time identity in your pipeline metadata
- Treat identity mismatch as a signal to re-embed, never to force refresh
When it happens
Trigger: Calling refresh_embeddings(provider=P, model=M) when existing rows were written under a different identity — e.g. rows say 'openai:https://old/v1:text-embedding-3-small' but the request resolves to 'openai:https://new/v1:...' or a different provider entirely.
Common situations: Changing CRG_OPENAI_BASE_URL/model between embed and refresh, switching providers, or pointing at the same model via a different gateway URL.
Related errors
- Voyage API returned malformed indices (got {indices}, expect
- Voyage API returned {len(data)} embeddings for {len(texts)}
- Voyage API returned mixed indexed/unindexed data — refusing
- Embedding refresh requires an explicit provider and model.
- Embedding provider '{provider}' is unavailable in this envir
AI-assisted analysis of tirth8205/code-review-graph@b58668751a (2026-08-28).
Data as JSON: /api/errors/705057436fb4dc74.
Report an issue: GitHub.