{"record":{"id":"17a8fbc7890dc9cb","repo":"spring-projects/spring-ai","slug":"no-embeddings-returned-for-request-request","errorCode":null,"errorMessage":"No embeddings returned for request: + request","messagePattern":"No embeddings returned for request: \\+ request","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiEmbeddingModel.java","lineNumber":131,"sourceCode":"\t\tvar apiRequest = createRequest(embeddingRequest);\n\n\t\tvar observationContext = EmbeddingModelObservationContext.builder()\n\t\t\t.embeddingRequest(embeddingRequest)\n\t\t\t.provider(MistralAiApi.PROVIDER_NAME)\n\t\t\t.build();\n\n\t\treturn EmbeddingModelObservationDocumentation.EMBEDDING_MODEL_OPERATION\n\t\t\t.observation(this.observationConvention, DEFAULT_OBSERVATION_CONVENTION, () -> observationContext,\n\t\t\t\t\tthis.observationRegistry)\n\t\t\t.observe(() -> {\n\t\t\t\tvar embeddingResponseEntity = RetryUtils.execute(this.retryTemplate,\n\t\t\t\t\t\t() -> this.mistralAiApi.embeddings(apiRequest));\n\t\t\t\tMistralAiApi.EmbeddingList<MistralAiApi.Embedding> apiEmbeddingResponse = embeddingResponseEntity\n\t\t\t\t\t.getBody();\n\n\t\t\t\tif (apiEmbeddingResponse == null) {\n\t\t\t\t\tif (logger.isWarnEnabled()) {\n\t\t\t\t\t\tlogger.warn(\"No embeddings returned for request: \" + request);\n\t\t\t\t\t}\n\t\t\t\t\treturn new EmbeddingResponse(List.of());\n\t\t\t\t}\n\n\t\t\t\tvar metadata = new EmbeddingResponseMetadata(apiEmbeddingResponse.model(),\n\t\t\t\t\t\tgetDefaultUsage(apiEmbeddingResponse.usage()));\n\n\t\t\t\tvar embeddings = apiEmbeddingResponse.data()\n\t\t\t\t\t.stream()\n\t\t\t\t\t.map(e -> new Embedding(e.embedding(), e.index()))\n\t\t\t\t\t.toList();\n\n\t\t\t\tvar embeddingResponse = new EmbeddingResponse(embeddings, metadata);\n\n\t\t\t\tobservationContext.setResponse(embeddingResponse);\n\n\t\t\t\treturn embeddingResponse;\n\t\t\t});","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/spring-projects/spring-ai/blob/98a7beda4f29d80a71c5837eb4053b03a93a46f7/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiEmbeddingModel.java#L113-L149","documentation":"Warning logged by MistralAiEmbeddingModel.call() when the embeddings HTTP response body is null — no EmbeddingList was returned by mistralAiApi.embeddings(). The model returns an empty EmbeddingResponse (no embeddings, no usage metadata) instead of throwing.","triggerScenarios":"mistralAiApi.embeddings(apiRequest) succeeds through the retry template but embeddingResponseEntity.getBody() == null — empty body from the Mistral embeddings endpoint or deserialization failure yielding null.","commonSituations":"Embedding model name (e.g. 'mistral-embed') misspelled or unavailable on the account; API key/quota problems; proxy or gateway returning empty bodies; Mistral API schema changes after version upgrades.","solutions":["Verify the configured embedding model name is valid for your Mistral account.","Check API key validity and rate-limit/quota status.","Inspect raw HTTP traffic with a client interceptor to confirm what the endpoint returned.","Handle empty EmbeddingResponse.getResults() defensively before building vectors."],"exampleFix":"// before\nEmbeddingResponse er = embeddingModel.call(new EmbeddingRequest(texts, opts));\nfloat[] v = er.getResults().get(0).getOutput();\n// after\nif (er.getResults().isEmpty()) throw new IllegalStateException(\"No embeddings returned for \" + texts.size() + \" inputs\");","handlingStrategy":"validation","validationCode":"Assert.hasText(embeddingModelName, \"Mistral embedding model must be configured\"); // e.g. 'mistral-embed'","typeGuard":"static boolean hasEmbeddings(EmbeddingResponse r) { return r != null && r.getResults() != null && !r.getResults().isEmpty(); }","tryCatchPattern":"EmbeddingResponse er = embeddingModel.call(req);\nif (!hasEmbeddings(er)) throw new IllegalStateException(\"Mistral returned no embeddings; check model name and API key\");","preventionTips":["Confirm the embedding model id against Mistral's current model list","Assert result count matches input count after each call","Add an HTTP interceptor to capture empty response bodies"],"tags":["mistral","embedding","null-response","http"],"backgroundTag":"empty-response-body","analyzedSha":"98a7beda4f29d80a71c5837eb4053b03a93a46f7","analyzedAt":"2026-09-11T14:15:49.441Z","contentChangedAt":"2026-09-11T14:15:49.441Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}