Skip to content

Metadata Loss in AdvisedRequest.toPrompt() (Spring AI v1.0.0-M6)ย #2355

@miimnoon

Description

@miimnoon

Dear Spring AI Team,
I am reaching out to report an issue in Spring AI v1.0.0-M6 related to metadata loss when calling AdvisedRequest.toPrompt() inside an advisor method.

๐Ÿ”น Problem Description:
When retrieving the Prompt from AdvisedRequest using request.toPrompt(), a new message object is created, causing all previously set metadata (conversationId, userId, etc.) to be lost.

๐Ÿ”น Steps to Reproduce:
Setting Metadata in UserMessage

java
Copy
Edit
Map<String, Object> metadata = new HashMap<>();
metadata.put("conversationId", conversationId);
metadata.put("userId", userId);

UserMessage userMessage = new UserMessage(userQuery, Collections.emptyList(), metadata);

String answer = chatClient.prompt()
.messages(List.of(userMessage))
.options(options)
.call()
.content();
Retrieving Metadata in Advisor (aroundCall method)

java
Copy
Edit
@OverRide
public AdvisedResponse aroundCall(AdvisedRequest request, CallAroundAdvisorChain chain) {
Prompt prompt = request.toPrompt(); // This creates a new message object

// Attempt to retrieve metadata
Message lastMessage = prompt.getMessages().get(prompt.getMessages().size() - 1);

if (lastMessage instanceof UserMessage userMessage) {
    logger.debug("Message metadata: {}", userMessage.getMetadata()); // โŒ Always null
}

return chain.nextAroundCall(request);

}
๐Ÿ”น Expected Behavior:
UserMessage metadata should persist when calling request.toPrompt().
The metadata set in UserMessage should be retrievable in the advisor.
๐Ÿ”น Actual Behavior:
request.toPrompt() creates a new message object, losing all metadata.
When retrieving UserMessage from prompt.getMessages(), getMetadata() always returns null.
๐Ÿ”น Environment:
Spring AI Version: 1.0.0-M6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions