Skip to content

Thinking and toolName content sent from Ollama is lost in merge of ChatResponse.message in Spring AI ver 1.0.2 #4414

@jorander

Description

@jorander

Bug description
Content in OllamaApi.Message.thinking and OllamaApi.Message.toolName is lost in OllamaApiHelper.merge since these new attributes were missing in the merge-method in the PR adding them in the code base and in the issue backporting them to ver 1.0.2.

Environment
Spring AI: 1.0.2
Java: 21

Steps to reproduce
Create two OllamaApi.Message objects with toolName and thinking having non-null values. Call OllamaApi.Message.merge(msg1, msg2). The method will return a new OllamaApi.Message with both attributes set to null.

Expected behavior
The content of the two fields should be retained and properly merged.

Minimal Complete Reproducible example

@Test void testMessageMerge(){ var cr1 = new ChatResponse(null, null, new Message(ASSISTANT, null, null, null, "not-null", "think 1"), null, false, 0L, 0L, 0, 0L, 0, 0L); var cr2 = new ChatResponse(null, null, new Message(ASSISTANT, null, null, null, "not-null", " and think 2"), null, false, 0L, 0L, 0, 0L, 0, 0L); var expected = new ChatResponse(null, null, new Message(ASSISTANT, null, null, null, "not-null", "think 1 and think 2"), null, false, 0L, 0L, 0, 0L, 0, 0L); var result = OllamaApiHelper.merge(cr1, cr2); assertEquals(expected, result); // org.opentest4j.AssertionFailedError: Merged chat response should combine message contents correctly ==> // Expected :ChatResponse[model=null, createdAt=null, message=Message[role=ASSISTANT, content=null, images=null, toolCalls=null, toolName=not-null, thinking=think 1 and think 2], doneReason=null, done=false, totalDuration=0, loadDuration=0, promptEvalCount=0, pro ... // // Actual :ChatResponse[model=null, createdAt=null, message=Message[role=ASSISTANT, content=null, images=null, toolCalls=null, toolName=null, thinking=null], doneReason=null, done=false, totalDuration=0, loadDuration=0, promptEvalCount=0, promptEvalDuration=0, ... } 

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions