| callLlmResult(String, List, int) |  | 0% |  | 0% | 10 | 10 | 41 | 41 | 1 | 1 |
| callLlmPropagating(String, List, int) |  | 0% |  | 0% | 10 | 10 | 35 | 35 | 1 | 1 |
| callProductBatchDetailed(String, List) |   | 51% |   | 44% | 8 | 10 | 47 | 93 | 0 | 1 |
| analyzeSingleBatchDetailed(String, List, int) |   | 6% | | n/a | 0 | 1 | 24 | 25 | 0 | 1 |
| buildNodeListWithContext(List) |   | 57% |   | 45% | 8 | 11 | 9 | 22 | 0 | 1 |
| buildNodeList(List) |  | 0% |  | 0% | 4 | 4 | 8 | 8 | 1 | 1 |
| applyProductThreshold(Map, List, int) |  | 0% |  | 0% | 3 | 3 | 7 | 7 | 1 | 1 |
| analyzeStreamingNodes(String, List, Map, List, List, List, AnalysisEventCallback, int) |   | 68% |   | 60% | 7 | 11 | 7 | 23 | 0 | 1 |
| scoreSiblingBatch(String, List, int) |   | 75% |   | 75% | 3 | 7 | 7 | 28 | 0 | 1 |
| callLlm(String, List, int) |  | 0% | | n/a | 1 | 1 | 4 | 4 | 1 | 1 |
| lambda$analyzeStreamingNodes$2(LlmCallDetail, TaxonomyNode) |  | 0% |  | 0% | 2 | 2 | 1 | 1 | 1 | 1 |
| buildMockProductScores(List, int) |   | 90% |   | 68% | 5 | 9 | 1 | 17 | 0 | 1 |
| buildMockScores(List, int) |   | 96% |   | 66% | 8 | 13 | 1 | 39 | 0 | 1 |
| siblingScope(List) |   | 69% |   | 50% | 4 | 5 | 1 | 5 | 0 | 1 |
| getDiagnostics() |   | 95% |   | 70% | 6 | 11 | 0 | 22 | 0 | 1 |
| analyzeNodesPropagating(String, List, Map, Map, List, List, List, int) |   | 94% |   | 81% | 4 | 12 | 1 | 22 | 0 | 1 |
| analyzeWithBudget(String) |   | 98% |   | 88% | 2 | 10 | 1 | 61 | 0 | 1 |
| analyzeStreaming(String, AnalysisEventCallback) |   | 96% |   | 80% | 2 | 6 | 1 | 30 | 0 | 1 |
| validateProductScoringConfiguration() |   | 80% |   | 62% | 3 | 5 | 1 | 5 | 0 | 1 |
| mergeDetails(List) |   | 97% |   | 73% | 7 | 14 | 1 | 35 | 0 | 1 |
| buildPrompt(String, String) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| callLlmPropagatingDetailed(String, List, int) |  | 99% |   | 85% | 3 | 11 | 0 | 92 | 0 | 1 |
| generateLeafJustification(String, String, List, Map, Map) |  | 99% |   | 75% | 6 | 13 | 0 | 44 | 0 | 1 |
| addProductCoverageGap(List, List, int) |  | 95% |   | 50% | 2 | 3 | 1 | 13 | 0 | 1 |
| addAnalysisWarning(List, String, LlmCallDetail) |  | 93% |   | 62% | 3 | 5 | 0 | 9 | 0 | 1 |
| isReplayActive() |  | 81% |   | 75% | 1 | 3 | 0 | 1 | 0 | 1 |
| lambda$analyzeWithBudget$0(TaxonomyNode) |  | 81% |   | 50% | 1 | 2 | 0 | 2 | 0 | 1 |
| callLlmRaw(String) |  | 100% |   | 83% | 2 | 7 | 0 | 25 | 0 | 1 |
| LlmService(LlmProviderConfig, LlmGatewayRegistry, ObjectMapper, TaxonomyService, PromptTemplateService, LocalEmbeddingService, SavedAnalysisService) |  | 100% | | n/a | 0 | 1 | 0 | 19 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 13 | 0 | 1 |
| callProductBatchesDetailed(String, List) |  | 100% |  | 100% | 0 | 2 | 0 | 6 | 0 | 1 |
| lambda$generateLeafJustification$6(StringBuilder, Map, Map.Entry) |  | 100% |   | 50% | 2 | 3 | 0 | 6 | 0 | 1 |
| loadMockAnalysis() |  | 100% |  | 100% | 0 | 2 | 0 | 7 | 0 | 1 |
| recordSuccess() |  | 100% | | n/a | 0 | 1 | 0 | 6 | 0 | 1 |
| recordFailure(String) |  | 100% | | n/a | 0 | 1 | 0 | 6 | 0 | 1 |
| lambda$generateLeafJustification$5(Set, Map.Entry) |  | 100% |   | 75% | 1 | 3 | 0 | 1 | 0 | 1 |
| hasError(LlmCallDetail) |  | 100% |   | 66% | 2 | 4 | 0 | 1 | 0 | 1 |
| lambda$analyzeNodesPropagating$1(Map, TaxonomyNode) |  | 100% |  | 100% | 0 | 2 | 0 | 1 | 0 | 1 |
| isProductCode(String) |  | 100% |   | 75% | 1 | 3 | 0 | 1 | 0 | 1 |
| isProduct(TaxonomyNode) |  | 100% |   | 75% | 1 | 3 | 0 | 1 | 0 | 1 |
| lambda$scoreSiblingBatch$3(TaxonomyNode) |  | 100% |  | 100% | 0 | 2 | 0 | 1 | 0 | 1 |
| analyzeSingleBatch(String, List, int) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| scoreSiblingBatchDetailed(String, List, int) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| minimumProductScore() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| normalizeToParent(Map, int) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| setRequestProvider(LlmProvider) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| normalizeToHundred(Map) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getApiKey(LlmProvider) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| lambda$addProductCoverageGap$4(String, ProductCoverageGap) |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| clearRequestProvider() |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| getActiveProvider() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getAvailabilityLevel() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| isAvailable() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getActiveProviderName() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getAvailableProviders() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |