3838import org .springframework .ai .chat .client .advisor .DefaultAroundAdvisorChain ;
3939import org .springframework .ai .chat .client .advisor .api .Advisor ;
4040import org .springframework .ai .chat .client .advisor .api .BaseAdvisorChain ;
41+ import org .springframework .ai .chat .client .advisor .observation .AdvisorObservationConvention ;
4142import org .springframework .ai .chat .client .observation .ChatClientObservationContext ;
4243import org .springframework .ai .chat .client .observation .ChatClientObservationConvention ;
4344import org .springframework .ai .chat .client .observation .ChatClientObservationDocumentation ;
@@ -513,7 +514,9 @@ private ChatClientResponse doGetObservableChatClientResponse(ChatClientRequest c
513514 // CHECKSTYLE:OFF
514515 var chatClientResponse = observation .observe (() -> {
515516 // Apply the advisor chain that terminates with the ChatModelCallAdvisor.
516- return this .advisorChain .nextCall (chatClientRequest );
517+ var response = this .advisorChain .nextCall (chatClientRequest );
518+ observationContext .setChatClientResponse (response );
519+ return response ;
517520 });
518521 // CHECKSTYLE:ON
519522 return chatClientResponse != null ? chatClientResponse : ChatClientResponse .builder ().build ();
@@ -608,7 +611,10 @@ public static class DefaultChatClientRequestSpec implements ChatClientRequestSpe
608611
609612 private final ObservationRegistry observationRegistry ;
610613
611- private final ChatClientObservationConvention observationConvention ;
614+ private final ChatClientObservationConvention chatClientObservationConvention ;
615+
616+ @ Nullable
617+ private final AdvisorObservationConvention advisorObservationConvention ;
612618
613619 private final ChatModel chatModel ;
614620
@@ -649,18 +655,34 @@ public static class DefaultChatClientRequestSpec implements ChatClientRequestSpe
649655 DefaultChatClientRequestSpec (DefaultChatClientRequestSpec ccr ) {
650656 this (ccr .chatModel , ccr .userText , ccr .userParams , ccr .userMetadata , ccr .systemText , ccr .systemParams ,
651657 ccr .systemMetadata , ccr .toolCallbacks , ccr .messages , ccr .toolNames , ccr .media , ccr .chatOptions ,
652- ccr .advisors , ccr .advisorParams , ccr .observationRegistry , ccr .observationConvention ,
653- ccr .toolContext , ccr .templateRenderer );
658+ ccr .advisors , ccr .advisorParams , ccr .observationRegistry , ccr .chatClientObservationConvention ,
659+ ccr .toolContext , ccr .templateRenderer , ccr . advisorObservationConvention );
654660 }
655661
662+ /**
663+ * @deprecated in favor of the other constructor.
664+ */
665+ @ Deprecated
656666 public DefaultChatClientRequestSpec (ChatModel chatModel , @ Nullable String userText ,
657667 Map <String , Object > userParams , Map <String , Object > userMetadata , @ Nullable String systemText ,
658668 Map <String , Object > systemParams , Map <String , Object > systemMetadata , List <ToolCallback > toolCallbacks ,
659669 List <Message > messages , List <String > toolNames , List <Media > media , @ Nullable ChatOptions chatOptions ,
660670 List <Advisor > advisors , Map <String , Object > advisorParams , ObservationRegistry observationRegistry ,
661- @ Nullable ChatClientObservationConvention observationConvention , Map <String , Object > toolContext ,
662- @ Nullable TemplateRenderer templateRenderer ) {
671+ @ Nullable ChatClientObservationConvention chatClientObservationConvention ,
672+ Map <String , Object > toolContext , @ Nullable TemplateRenderer templateRenderer ) {
673+ this (chatModel , userText , userParams , userMetadata , systemText , systemParams , systemMetadata , toolCallbacks ,
674+ messages , toolNames , media , chatOptions , advisors , advisorParams , observationRegistry ,
675+ chatClientObservationConvention , toolContext , templateRenderer , null );
676+ }
663677
678+ public DefaultChatClientRequestSpec (ChatModel chatModel , @ Nullable String userText ,
679+ Map <String , Object > userParams , Map <String , Object > userMetadata , @ Nullable String systemText ,
680+ Map <String , Object > systemParams , Map <String , Object > systemMetadata , List <ToolCallback > toolCallbacks ,
681+ List <Message > messages , List <String > toolNames , List <Media > media , @ Nullable ChatOptions chatOptions ,
682+ List <Advisor > advisors , Map <String , Object > advisorParams , ObservationRegistry observationRegistry ,
683+ @ Nullable ChatClientObservationConvention chatClientObservationConvention ,
684+ Map <String , Object > toolContext , @ Nullable TemplateRenderer templateRenderer ,
685+ @ Nullable AdvisorObservationConvention advisorObservationConvention ) {
664686 Assert .notNull (chatModel , "chatModel cannot be null" );
665687 Assert .notNull (userParams , "userParams cannot be null" );
666688 Assert .notNull (userMetadata , "userMetadata cannot be null" );
@@ -694,10 +716,11 @@ public DefaultChatClientRequestSpec(ChatModel chatModel, @Nullable String userTe
694716 this .advisors .addAll (advisors );
695717 this .advisorParams .putAll (advisorParams );
696718 this .observationRegistry = observationRegistry ;
697- this .observationConvention = observationConvention != null ? observationConvention
698- : DEFAULT_CHAT_CLIENT_OBSERVATION_CONVENTION ;
719+ this .chatClientObservationConvention = chatClientObservationConvention != null
720+ ? chatClientObservationConvention : DEFAULT_CHAT_CLIENT_OBSERVATION_CONVENTION ;
699721 this .toolContext .putAll (toolContext );
700722 this .templateRenderer = templateRenderer != null ? templateRenderer : DEFAULT_TEMPLATE_RENDERER ;
723+ this .advisorObservationConvention = advisorObservationConvention ;
701724 }
702725
703726 @ Nullable
@@ -770,7 +793,8 @@ public TemplateRenderer getTemplateRenderer() {
770793 @ Override
771794 public Builder mutate () {
772795 DefaultChatClientBuilder builder = (DefaultChatClientBuilder ) ChatClient
773- .builder (this .chatModel , this .observationRegistry , this .observationConvention )
796+ .builder (this .chatModel , this .observationRegistry , this .chatClientObservationConvention ,
797+ this .advisorObservationConvention )
774798 .defaultTemplateRenderer (this .templateRenderer )
775799 .defaultToolCallbacks (this .toolCallbacks )
776800 .defaultToolContext (this .toolContext )
@@ -990,14 +1014,14 @@ public ChatClientRequestSpec templateRenderer(TemplateRenderer templateRenderer)
9901014 public CallResponseSpec call () {
9911015 BaseAdvisorChain advisorChain = buildAdvisorChain ();
9921016 return new DefaultCallResponseSpec (DefaultChatClientUtils .toChatClientRequest (this ), advisorChain ,
993- this .observationRegistry , this .observationConvention );
1017+ this .observationRegistry , this .chatClientObservationConvention );
9941018 }
9951019
9961020 @ Override
9971021 public StreamResponseSpec stream () {
9981022 BaseAdvisorChain advisorChain = buildAdvisorChain ();
9991023 return new DefaultStreamResponseSpec (DefaultChatClientUtils .toChatClientRequest (this ), advisorChain ,
1000- this .observationRegistry , this .observationConvention );
1024+ this .observationRegistry , this .chatClientObservationConvention );
10011025 }
10021026
10031027 private BaseAdvisorChain buildAdvisorChain () {
@@ -1006,7 +1030,10 @@ private BaseAdvisorChain buildAdvisorChain() {
10061030 this .advisors .add (ChatModelCallAdvisor .builder ().chatModel (this .chatModel ).build ());
10071031 this .advisors .add (ChatModelStreamAdvisor .builder ().chatModel (this .chatModel ).build ());
10081032
1009- return DefaultAroundAdvisorChain .builder (this .observationRegistry ).pushAll (this .advisors ).build ();
1033+ return DefaultAroundAdvisorChain .builder (this .observationRegistry )
1034+ .observationConvention (this .advisorObservationConvention )
1035+ .pushAll (this .advisors )
1036+ .build ();
10101037 }
10111038
10121039 }
0 commit comments