agentscope-ai/agentscope · error · RuntimeError

"AgentScope embedding model returned no embeddings."

Error message

"AgentScope embedding model returned no embeddings."

What it means

embed() calls the AgentScope embedding model and expects a non-empty embeddings list in the response. If the model returns an EmbeddingResponse with empty embeddings, there is no vector to return and a RuntimeError is raised.

Solutions

  1. Test the embedding model directly to verify it returns vectors
  2. Fix mocks to include at least one vector
  3. Check provider API key/quota and input text validity

Example fix

// before
mock_model.return_value = EmbeddingResponse(embeddings=[])
// after
mock_model.return_value = EmbeddingResponse(embeddings=[[0.1, 0.2, 0.3]])
Defensive patterns

Strategy: validation

Validate before calling

resp = await embedding_model(['ping'])
if not resp.embeddings:
    raise RuntimeError('embedding model returned no vectors — check provider/key')

Try / catch

try:
    vec = emb.embed('text')
except RuntimeError as e:
    if 'no embeddings' in str(e):
        vec = retry_with_backoff(lambda: emb.embed('text'))
    else:
        raise

Prevention

When it happens

Trigger: A misbehaving or mocked embedding model returning EmbeddingResponse(embeddings=[]) or embedding=False; provider returning an empty body.

Common situations: Mocked models in tests that forget to populate embeddings; provider errors that still parse into a response object.

Related errors


AI-assisted analysis of agentscope-ai/agentscope@e90f1c7592 (2026-08-28). Data as JSON: /api/errors/9abe6861e769994d. Report an issue: GitHub.

Appendix: source

Thrown at src/agentscope/middleware/_longterm_memory/_mem0/_agentscope_adapter.py:271

                f"EmbeddingModelBase, got "
                f"{type(self.config.model).__name__}.",
            )
        self._agentscope_model: EmbeddingModelBase = self.config.model
        self._bridge = _AsyncBridge()

    # ----- EmbeddingBase interface -----
    # pylint: disable=unused-argument
    def embed(
        self,
        text: str | list[str],
        memory_action: str | None = None,  # mem0 contract — unused
    ) -> list[float]:
        """mem0 ``EmbeddingBase`` entry — runs the AgentScope embedding
        model synchronously and returns the first vector."""
        text_list = [text] if isinstance(text, str) else list(text)
        response = self._bridge.run(self._agentscope_model(text_list))
        if not response.embeddings:
            raise RuntimeError(
                "AgentScope embedding model returned no embeddings.",
            )
        # AgentScope EmbeddingResponse.embeddings is List[List[float]];
        # mem0 expects a single vector for a single-text call.
        return response.embeddings[0]


# ----------------------------------------------------------------------
# Build a mem0 MemoryConfig wired to AgentScope models
# ----------------------------------------------------------------------

# The provider name we register under in mem0's factory + config layer.
_AGENTSCOPE_PROVIDER = "agentscope"


def build_mem0_config(
    *,
    chat_model: ChatModelBase | None = None,

View on GitHub (pinned to e90f1c7592)