HKUDS/DeepTutor · error · ValueError
Embedding response parsed successfully but no vectors were f
Error message
Embedding response parsed successfully but no vectors were found.
What it means
The response JSON parsed and matched a known schema, but every extracted vector list was empty — e.g. "data": [] with HTTP 200. The provider acknowledged the request but returned zero embeddings, which is indistinguishable from a broken endpoint downstream.
Source
Thrown at deeptutor/services/embedding/adapters/openai_compatible.py:358
logger.warning(
f"Embedding request transport error ({type(exc).__name__}: {exc}) "
f"on attempt {attempt + 1}/{1 + self._MAX_RETRIES}, "
f"retrying in {wait:.1f}s..."
)
await asyncio.sleep(wait)
else:
logger.error(
f"Embedding request failed after {1 + self._MAX_RETRIES} attempts "
f"({type(exc).__name__}: {exc})"
)
raise
else:
if last_exc:
raise last_exc
embeddings = self._extract_embeddings_from_response(data)
if not embeddings:
raise ValueError("Embedding response parsed successfully but no vectors were found.")
actual_dims = len(embeddings[0]) if embeddings else 0
expected_dims = request.dimensions or self.dimensions
model_name = data.get("model") if isinstance(data, dict) else None
if not model_name:
model_name = model
if expected_dims and actual_dims != expected_dims:
logger.warning(
f"Dimension mismatch: expected {expected_dims}, got {actual_dims}. "
f"Model '{model_name}' may not support custom dimensions."
)
logger.info(
f"Successfully generated {len(embeddings)} embeddings "
f"(model: {model_name}, dimensions: {actual_dims})"
)
View on GitHub (pinned to 3e82f13042)
Solutions
- Check that request.texts is non-empty before calling embed
- Inspect the raw response body (attach logging) to see what the provider returned for the same input
- If the gateway consistently returns empty data for valid input, report/switch — it is a provider-side bug
- Retry once: transient empty responses do occur on overloaded proxies
Example fix
# before
resp = await adapter.embed(EmbeddingRequest(texts=[]))
# after
if not texts:
return empty_response
resp = await adapter.embed(EmbeddingRequest(texts=texts)) Defensive patterns
Strategy: validation
Validate before calling
if not request.texts and not request.contents:
return EmbeddingResponse(embeddings=[], model=request.model or "", dimensions=0)
# drop empty strings that some gateways choke on
request.texts = [t for t in request.texts if t and t.strip()] Type guard
null
Try / catch
try:
resp = await adapter.embed(req)
except ValueError as e:
if "no vectors were found" in str(e):
resp = await adapter.embed(req) # one retry; transient on overloaded proxies
if not resp.embeddings:
raise
raise Prevention
- Never call embed() with an empty texts list
- Filter blank strings out of batches before embedding
When it happens
Trigger: Provider returns {"data": []} for an empty input list, a model that produced no output, or a gateway bug; also when input texts were all filtered out server-side.
Common situations: Calling embed() with an empty texts list; gateway returning 200/empty-data on overload; provider silently dropping malformed inputs.
Related errors
- Model not configured for agent {self.agent_name}. Please act
- Render failed because local LaTeX is missing. Please avoid T
- Document not found
- Unsupported import source: {value!r}
- Invalid folder path
AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27).
Data as JSON: /api/errors/f46ac76b38383ef9.
Report an issue: GitHub.