renderRunMetricsDiffMarkdownSection renders the run metrics diff sub-section as markdown
(run1ID, run2ID int64, diff *RunMetricsDiff)
| 232 | |
| 233 | // renderRunMetricsDiffMarkdownSection renders the run metrics diff sub-section as markdown |
| 234 | func renderRunMetricsDiffMarkdownSection(run1ID, run2ID int64, diff *RunMetricsDiff) { |
| 235 | if diff == nil { |
| 236 | return |
| 237 | } |
| 238 | |
| 239 | fmt.Fprintln(os.Stdout, "#### Run Metrics") |
| 240 | fmt.Fprintln(os.Stdout) |
| 241 | fmt.Fprintf(os.Stdout, "| Metric | Run #%d | Run #%d | Change |\n", run1ID, run2ID) |
| 242 | fmt.Fprintln(os.Stdout, "|--------|---------|---------|--------|") |
| 243 | |
| 244 | if diff.Run1TokenUsage > 0 || diff.Run2TokenUsage > 0 { |
| 245 | fmt.Fprintf(os.Stdout, "| Token usage | %d | %d | %s |\n", diff.Run1TokenUsage, diff.Run2TokenUsage, diff.TokenUsageChange) |
| 246 | } |
| 247 | if diff.Run1Duration != "" || diff.Run2Duration != "" { |
| 248 | fmt.Fprintf(os.Stdout, "| Duration | %s | %s | %s |\n", diff.Run1Duration, diff.Run2Duration, diff.DurationChange) |
| 249 | } |
| 250 | if diff.Run1Turns > 0 || diff.Run2Turns > 0 { |
| 251 | turnsChange := fmt.Sprintf("%+d", diff.TurnsChange) |
| 252 | fmt.Fprintf(os.Stdout, "| Turns | %d | %d | %s |\n", diff.Run1Turns, diff.Run2Turns, turnsChange) |
| 253 | } |
| 254 | if diff.Run1TokensPerTurn > 0 || diff.Run2TokensPerTurn > 0 { |
| 255 | fmt.Fprintf(os.Stdout, "| Tokens / turn | %d | %d | %s |\n", diff.Run1TokensPerTurn, diff.Run2TokensPerTurn, diff.TokensPerTurnChange) |
| 256 | } |
| 257 | fmt.Fprintln(os.Stdout) |
| 258 | |
| 259 | if diff.TokenUsageDetails != nil { |
| 260 | renderTokenUsageDiffMarkdownSection(run1ID, run2ID, diff.TokenUsageDetails) |
| 261 | } |
| 262 | if diff.GitHubRateLimitDetails != nil { |
| 263 | renderGitHubRateLimitDiffMarkdownSection(run1ID, run2ID, diff.GitHubRateLimitDetails) |
| 264 | } |
| 265 | if diff.ToolCallsDiff != nil { |
| 266 | renderToolCallsDiffMarkdownSection(run1ID, run2ID, diff.ToolCallsDiff) |
| 267 | } |
| 268 | } |
| 269 | |
| 270 | // renderTokenUsageDiffMarkdownSection renders detailed token usage as a markdown sub-section |
| 271 | func renderTokenUsageDiffMarkdownSection(run1ID, run2ID int64, diff *TokenUsageDiff) { |
no test coverage detected