| 61 | } |
| 62 | |
| 63 | function renderObservedUsage(observedUsage) { |
| 64 | if (!observedUsage) { |
| 65 | return "- No observed usage supplied."; |
| 66 | } |
| 67 | |
| 68 | const comparison = observedUsage.estimateComparison; |
| 69 | return [ |
| 70 | `- samples: ${observedUsage.sampleCount}`, |
| 71 | `- observed_input_tokens_avg: ${observedUsage.inputTokens.average}`, |
| 72 | `- observed_output_tokens_avg: ${observedUsage.outputTokens.average}`, |
| 73 | `- observed_total_tokens_avg: ${observedUsage.totalTokens.average}`, |
| 74 | ...(observedUsage.cachedTokens.total > 0 |
| 75 | ? [`- observed_cached_tokens_avg: ${observedUsage.cachedTokens.average}`] |
| 76 | : []), |
| 77 | ...(comparison |
| 78 | ? [ |
| 79 | `- estimated_active_tokens: ${comparison.estimatedActiveTokens}`, |
| 80 | `- estimate_vs_observed_input_delta: ${comparison.deltaTokens}`, |
| 81 | `- estimate_vs_observed_input_ratio: ${comparison.deltaRatio} (${comparison.band})`, |
| 82 | ] |
| 83 | : []), |
| 84 | ].join("\n"); |
| 85 | } |
| 86 | |
| 87 | function renderFindingList(findings, emptyLabel) { |
| 88 | if (!findings || findings.length === 0) { |