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