spring-projects / spring-projects/spring-ai
Embedding generation fails in 1.1.0, worked in 1.0.3
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 9.5k
- Forks
- 2.9k
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 6
Description
@sunyuhan1998 Thank you for the PR! Rebased, squashed and merged as 9e43b7e10
Originally posted by @ilayaperumalg in https://github.com/spring-projects/spring-ai/issues/3804#issuecomment-3259018148
Embedding generation (using Ollama / bge-m3) works in Spring AI 1.0.3 but fails in 1.1.0 with the error below:
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Trailing token (of type FIELD_NAME) found after value (bound as float[]): not allowed as per DeserializationFeature.FAIL_ON_TRAILING_TOKENS
at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 1, column: 12870] (through reference chain: org.springframework.ai.openai.api.OpenAiApi$EmbeddingList["data"]->java.util.ArrayList[0]->org.springframework.ai.openai.api.OpenAiApi$Embedding["embedding"])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportTrailingTokens(DeserializationContext.java:1840)
at com.fasterxml.jackson.databind.ObjectMapper._verifyNoTrailingTokens(ObjectMapper.java:5013)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4886)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3035)
at com.fasterxml.jackson.core.JsonParser.readValueAs(JsonParser.java:2458)
at org.springframework.ai.openai.api.OpenAiEmbeddingDeserializer.deserialize(OpenAiEmbeddingDeserializer.java:50)
at org.springframework.ai.openai.api.OpenAiEmbeddingDeserializer.deserialize(OpenAiEmbeddingDeserializer.java:43)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:576)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:446)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1493)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:348)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:361)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:246)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:576)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:446)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1493)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:348)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:342)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2125)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1501)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:395)
... 27 common frames omitted
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with org.springframework.ai.openai.api.OpenAiEmbeddingDeserializer, especially line 50 in OpenAiEmbeddingDeserializer.java, and reproduce embedding generation with Ollama bge-m3 across Spring AI 1.0.3 and 1.1.0. Trace the response parsing that produces the trailing-token error; done means the 1.1.0 response deserializes successfully without regressing the earlier behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, ollama, spring-boot
- Domain
- ai, api, backend
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100