|
17 | 17 |
|
18 | 18 | import io.micrometer.common.KeyValue;
|
19 | 19 | import io.micrometer.common.KeyValues;
|
| 20 | +import org.springframework.util.CollectionUtils; |
20 | 21 |
|
21 | 22 | import java.util.StringJoiner;
|
22 | 23 |
|
@@ -52,8 +53,8 @@ public class DefaultChatModelObservationConvention implements ChatModelObservati
|
52 | 53 | private static final KeyValue REQUEST_TOP_P_NONE = KeyValue
|
53 | 54 | .of(ChatModelObservationDocumentation.HighCardinalityKeyNames.REQUEST_TOP_P, KeyValue.NONE_VALUE);
|
54 | 55 |
|
55 |
| - private static final KeyValue RESPONSE_FINISH_REASON_NONE = KeyValue |
56 |
| - .of(ChatModelObservationDocumentation.HighCardinalityKeyNames.RESPONSE_FINISH_REASON, KeyValue.NONE_VALUE); |
| 56 | + private static final KeyValue RESPONSE_FINISH_REASONS_NONE = KeyValue |
| 57 | + .of(ChatModelObservationDocumentation.HighCardinalityKeyNames.RESPONSE_FINISH_REASONS, KeyValue.NONE_VALUE); |
57 | 58 |
|
58 | 59 | private static final KeyValue RESPONSE_ID_NONE = KeyValue
|
59 | 60 | .of(ChatModelObservationDocumentation.HighCardinalityKeyNames.RESPONSE_ID, KeyValue.NONE_VALUE);
|
@@ -114,7 +115,7 @@ protected KeyValue responseModel(ChatModelObservationContext context) {
|
114 | 115 | public KeyValues getHighCardinalityKeyValues(ChatModelObservationContext context) {
|
115 | 116 | return KeyValues.of(requestFrequencyPenalty(context), requestMaxTokens(context),
|
116 | 117 | requestPresencePenalty(context), requestStopSequences(context), requestTemperature(context),
|
117 |
| - requestTopK(context), requestTopP(context), responseFinishReason(context), responseId(context), |
| 118 | + requestTopK(context), requestTopP(context), responseFinishReasons(context), responseId(context), |
118 | 119 | usageInputTokens(context), usageOutputTokens(context), usageTotalTokens(context));
|
119 | 120 | }
|
120 | 121 |
|
@@ -182,14 +183,17 @@ protected KeyValue requestTopP(ChatModelObservationContext context) {
|
182 | 183 |
|
183 | 184 | // Response
|
184 | 185 |
|
185 |
| - protected KeyValue responseFinishReason(ChatModelObservationContext context) { |
186 |
| - if (context.getResponse() != null && context.getResponse().getResult() != null |
187 |
| - && context.getResponse().getResult().getMetadata() != null |
188 |
| - && context.getResponse().getResult().getMetadata().getFinishReason() != null) { |
189 |
| - return KeyValue.of(ChatModelObservationDocumentation.HighCardinalityKeyNames.RESPONSE_FINISH_REASON, |
190 |
| - context.getResponse().getResult().getMetadata().getFinishReason()); |
| 186 | + protected KeyValue responseFinishReasons(ChatModelObservationContext context) { |
| 187 | + if (context.getResponse() != null && !CollectionUtils.isEmpty(context.getResponse().getResults())) { |
| 188 | + StringJoiner finishReasonsJoiner = new StringJoiner(", ", "[", "]"); |
| 189 | + context.getResponse() |
| 190 | + .getResults() |
| 191 | + .forEach(generation -> finishReasonsJoiner |
| 192 | + .add("\"" + generation.getMetadata().getFinishReason() + "\"")); |
| 193 | + return KeyValue.of(ChatModelObservationDocumentation.HighCardinalityKeyNames.RESPONSE_FINISH_REASONS, |
| 194 | + finishReasonsJoiner.toString()); |
191 | 195 | }
|
192 |
| - return RESPONSE_FINISH_REASON_NONE; |
| 196 | + return RESPONSE_FINISH_REASONS_NONE; |
193 | 197 | }
|
194 | 198 |
|
195 | 199 | protected KeyValue responseId(ChatModelObservationContext context) {
|
|
0 commit comments