@@ -172,6 +172,8 @@ func writeStoredTrace(output io.Writer, trace *logging.JevTrace) {
172172 trace .Status , orNone (trace .FailureReason ), trace .InputMode , formatStoredOptionalInt (trace .LatencyMS ))
173173 fmt .Fprintf (output , " jev model_count=%d candidate_count=%d selected=%s\n " ,
174174 trace .ModelCount , trace .CandidateCount , orNone (trace .Selected ))
175+ fmt .Fprintf (output , " jev group_count=%d recommended_group=%s selected_group=%s candidate_groups=%s\n " ,
176+ trace .GroupCount , orNone (trace .RecommendedGroup ), orNone (trace .SelectedGroup ), formatStringsOrNone (trace .CandidateGroups ))
175177 fmt .Fprintf (output , " jev confidence=%s band=%s fallback=%s evidence_hash=%s\n " ,
176178 formatStoredOptionalFloat (trace .Confidence ), orNone (trace .ConfidenceBand ),
177179 orNone (trace .FallbackReason ), orNone (trace .EvidenceHash ))
@@ -181,6 +183,11 @@ func writeStoredTrace(output io.Writer, trace *logging.JevTrace) {
181183 distribution = append (distribution , fmt .Sprintf ("%s=%.6f" , probability .Model , probability .Probability ))
182184 }
183185 fmt .Fprintf (output , " jev distribution=%s\n " , formatStringsOrNone (distribution ))
186+ groupDistribution := make ([]string , 0 , len (trace .GroupProbabilities ))
187+ for _ , probability := range trace .GroupProbabilities {
188+ groupDistribution = append (groupDistribution , fmt .Sprintf ("%s=%.6f" , probability .Group , probability .Probability ))
189+ }
190+ fmt .Fprintf (output , " jev group_distribution=%s\n " , formatStringsOrNone (groupDistribution ))
184191}
185192
186193// logsCheckJSONEntry is the JSON shape of one report line. The keys match the text
@@ -232,19 +239,24 @@ type logsCheckJSONEvent struct {
232239}
233240
234241type logsCheckJSONJev struct {
235- Status string `json:"status"`
236- FailureReason string `json:"failure_reason,omitempty"`
237- InputMode string `json:"input_mode"`
238- Selected string `json:"selected,omitempty"`
239- ConfidenceBand string `json:"confidence_band,omitempty"`
240- FallbackReason string `json:"fallback_reason,omitempty"`
241- EvidenceHash string `json:"evidence_hash,omitempty"`
242- LatencyMS * int64 `json:"latency_ms,omitempty"`
243- CandidateModels []string `json:"candidate_models"`
244- ModelCount int `json:"model_count"`
245- CandidateCount int `json:"candidate_count"`
246- Confidence * float64 `json:"confidence,omitempty"`
247- Probabilities []float64 `json:"probabilities,omitempty"`
242+ Status string `json:"status"`
243+ FailureReason string `json:"failure_reason,omitempty"`
244+ InputMode string `json:"input_mode"`
245+ Selected string `json:"selected,omitempty"`
246+ ConfidenceBand string `json:"confidence_band,omitempty"`
247+ FallbackReason string `json:"fallback_reason,omitempty"`
248+ EvidenceHash string `json:"evidence_hash,omitempty"`
249+ LatencyMS * int64 `json:"latency_ms,omitempty"`
250+ CandidateModels []string `json:"candidate_models"`
251+ ModelCount int `json:"model_count"`
252+ CandidateCount int `json:"candidate_count"`
253+ CandidateGroups []string `json:"candidate_groups"`
254+ GroupCount int `json:"group_count"`
255+ RecommendedGroup string `json:"recommended_group,omitempty"`
256+ SelectedGroup string `json:"selected_group,omitempty"`
257+ Confidence * float64 `json:"confidence,omitempty"`
258+ Probabilities []float64 `json:"probabilities,omitempty"`
259+ GroupProbabilities []logging.GroupProbability `json:"group_probabilities,omitempty"`
248260}
249261
250262// writeLogsJSON prints one JSON object per entry. The values are the stored ones:
@@ -296,18 +308,23 @@ func writeLogsJSON(output io.Writer, events []storage.StoredEvent) error {
296308 if entry .JevTrace != nil {
297309 trace := entry .JevTrace
298310 rendered := & logsCheckJSONJev {
299- Status : trace .Status ,
300- FailureReason : trace .FailureReason ,
301- InputMode : trace .InputMode ,
302- Selected : trace .Selected ,
303- ConfidenceBand : trace .ConfidenceBand ,
304- FallbackReason : trace .FallbackReason ,
305- EvidenceHash : trace .EvidenceHash ,
306- LatencyMS : trace .LatencyMS ,
307- CandidateModels : trace .CandidateModels ,
308- ModelCount : trace .ModelCount ,
309- CandidateCount : trace .CandidateCount ,
310- Confidence : trace .Confidence ,
311+ Status : trace .Status ,
312+ FailureReason : trace .FailureReason ,
313+ InputMode : trace .InputMode ,
314+ Selected : trace .Selected ,
315+ ConfidenceBand : trace .ConfidenceBand ,
316+ FallbackReason : trace .FallbackReason ,
317+ EvidenceHash : trace .EvidenceHash ,
318+ LatencyMS : trace .LatencyMS ,
319+ CandidateModels : trace .CandidateModels ,
320+ ModelCount : trace .ModelCount ,
321+ CandidateCount : trace .CandidateCount ,
322+ CandidateGroups : trace .CandidateGroups ,
323+ GroupCount : trace .GroupCount ,
324+ RecommendedGroup : trace .RecommendedGroup ,
325+ SelectedGroup : trace .SelectedGroup ,
326+ Confidence : trace .Confidence ,
327+ GroupProbabilities : trace .GroupProbabilities ,
311328 }
312329 if rendered .CandidateModels == nil {
313330 rendered .CandidateModels = []string {}
0 commit comments