computeTokenUsageDiff computes a detailed diff of token usage between two runs using the firewall proxy token-usage.jsonl data (TokenUsageSummary). Returns nil when both summaries are nil.
(tu1, tu2 *TokenUsageSummary)
| 839 | // the firewall proxy token-usage.jsonl data (TokenUsageSummary). Returns nil when both |
| 840 | // summaries are nil. |
| 841 | func computeTokenUsageDiff(tu1, tu2 *TokenUsageSummary) *TokenUsageDiff { |
| 842 | if tu1 == nil && tu2 == nil { |
| 843 | return nil |
| 844 | } |
| 845 | |
| 846 | var ( |
| 847 | run1Input, run2Input int |
| 848 | run1Output, run2Output int |
| 849 | run1CacheRead, run2CacheRead int |
| 850 | run1CacheWrite, run2CacheWrite int |
| 851 | run1AIC, run2AIC float64 |
| 852 | run1Requests, run2Requests int |
| 853 | run1CacheEff, run2CacheEff float64 |
| 854 | ) |
| 855 | |
| 856 | if tu1 != nil { |
| 857 | run1Input = tu1.TotalInputTokens |
| 858 | run1Output = tu1.TotalOutputTokens |
| 859 | run1CacheRead = tu1.TotalCacheReadTokens |
| 860 | run1CacheWrite = tu1.TotalCacheWriteTokens |
| 861 | run1AIC = tu1.TotalAIC |
| 862 | run1Requests = tu1.TotalRequests |
| 863 | run1CacheEff = tu1.CacheEfficiency |
| 864 | } |
| 865 | if tu2 != nil { |
| 866 | run2Input = tu2.TotalInputTokens |
| 867 | run2Output = tu2.TotalOutputTokens |
| 868 | run2CacheRead = tu2.TotalCacheReadTokens |
| 869 | run2CacheWrite = tu2.TotalCacheWriteTokens |
| 870 | run2AIC = tu2.TotalAIC |
| 871 | run2Requests = tu2.TotalRequests |
| 872 | run2CacheEff = tu2.CacheEfficiency |
| 873 | } |
| 874 | |
| 875 | diff := &TokenUsageDiff{ |
| 876 | Run1InputTokens: run1Input, |
| 877 | Run2InputTokens: run2Input, |
| 878 | Run1OutputTokens: run1Output, |
| 879 | Run2OutputTokens: run2Output, |
| 880 | Run1CacheReadTokens: run1CacheRead, |
| 881 | Run2CacheReadTokens: run2CacheRead, |
| 882 | Run1CacheWriteTokens: run1CacheWrite, |
| 883 | Run2CacheWriteTokens: run2CacheWrite, |
| 884 | Run1AIC: run1AIC, |
| 885 | Run2AIC: run2AIC, |
| 886 | Run1TotalRequests: run1Requests, |
| 887 | Run2TotalRequests: run2Requests, |
| 888 | Run1CacheEfficiency: run1CacheEff, |
| 889 | Run2CacheEfficiency: run2CacheEff, |
| 890 | } |
| 891 | |
| 892 | if run1Input > 0 || run2Input > 0 { |
| 893 | diff.InputTokensChange = formatVolumeChange(run1Input, run2Input) |
| 894 | } |
| 895 | if run1Output > 0 || run2Output > 0 { |
| 896 | diff.OutputTokensChange = formatVolumeChange(run1Output, run2Output) |
| 897 | } |
| 898 | if run1CacheRead > 0 || run2CacheRead > 0 { |