diff --git a/internal/workbenchruntime/service.go b/internal/workbenchruntime/service.go index 00c58981..a5f1a6c1 100644 --- a/internal/workbenchruntime/service.go +++ b/internal/workbenchruntime/service.go @@ -1166,19 +1166,39 @@ func (s *Server) querySummaryFacts(ctx context.Context, sessions []map[string]an sessionIDs := uniqueStrings(mapSessions(sessions, sessionID)) traceIDs := uniqueStrings(mapSessions(sessions, lastTraceID)) facts := emptyFacts() + type summaryFactsResult struct { + kind string + messageSummaries []any + facts map[string][]any + err error + } + resultCount := 0 + results := make(chan summaryFactsResult, 2) if len(sessionIDs) > 0 { - messageSummaries, err := s.queryMessageSummaries(ctx, sessionIDs) - if err != nil { - return nil, err - } - facts["messageSummaries"] = messageSummaries + resultCount++ + go func() { + messageSummaries, err := s.queryMessageSummaries(ctx, sessionIDs) + results <- summaryFactsResult{kind: "messageSummaries", messageSummaries: messageSummaries, err: err} + }() } if len(traceIDs) > 0 { - byTrace, err := s.queryFacts(ctx, factQuery{TraceIDs: traceIDs, Families: []string{"turns", "checkpoints"}, Limit: len(traceIDs), TurnsOrder: "updated_desc", CheckpointsOrder: "updated_desc"}) - if err != nil { - return nil, err + resultCount++ + go func() { + byTrace, err := s.queryFacts(ctx, factQuery{TraceIDs: traceIDs, Families: []string{"turns", "checkpoints"}, Limit: len(traceIDs), TurnsOrder: "updated_desc", CheckpointsOrder: "updated_desc"}) + results <- summaryFactsResult{kind: "traceFacts", facts: byTrace, err: err} + }() + } + for i := 0; i < resultCount; i++ { + result := <-results + if result.err != nil { + return nil, result.err + } + switch result.kind { + case "messageSummaries": + facts["messageSummaries"] = result.messageSummaries + case "traceFacts": + facts = mergeFacts(facts, result.facts) } - facts = mergeFacts(facts, byTrace) } return facts, nil }