Skip to content

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

Closed
@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