@@ -2,57 +2,23 @@ namespace Azure.Sdk.Tools.Cli.Helpers;
22
33public class TokenUsageHelper ( IOutputHelper outputHelper )
44{
5- private static Dictionary < string , ( double inputPrice , double outputPrice ) > modelPrices = new ( )
6- {
7- // Global pricing via https://platform.openai.com/docs/pricing
8- { "gpt-5" , ( 1.25 , 10 ) } ,
9- { "gpt-5-mini" , ( 0.25 , 2 ) } ,
10- { "gpt-4.1" , ( 2 , 8 ) } ,
11- { "gpt-4.1-mini" , ( 0.40 , 1.60 ) } ,
12- { "gpt-4.1-nano" , ( 0.10 , 0.40 ) } ,
13- { "gpt-4o" , ( 2.50 , 10 ) } ,
14- { "gpt-4o-mini" , ( 0.15 , 0.60 ) } ,
15- { "o3-mini" , ( 1.10 , 4.40 ) } ,
16- } ;
17-
185 protected double PromptTokens { get ; set ; } = 0 ;
196 protected double CompletionTokens { get ; set ; } = 0 ;
20- protected double InputCost { get ; set ; } = 0 ;
21- protected double OutputCost { get ; set ; } = 0 ;
22- protected double TotalCost { get ; set ; } = 0 ;
237 protected IEnumerable < string > ModelsUsed { get ; set ; } = [ ] ;
248
259 public void Add ( string model , long inputTokens , long outputTokens )
2610 {
2711 ModelsUsed = ModelsUsed . Union ( [ model ] ) ;
2812 PromptTokens += inputTokens ;
2913 CompletionTokens += outputTokens ;
30- SetCost ( model ) ;
3114 }
3215
33- private void SetCost ( string model )
16+ public void LogUsage ( )
3417 {
35- var oneMillion = 1_000_000 ;
36- if ( ! modelPrices . TryGetValue ( model , out ( double inputPrice , double outputPrice ) value ) )
37- {
38- throw new ArgumentException ( $ "No pricing information found for model '{ model } '.") ;
39- }
40-
41- InputCost = PromptTokens / oneMillion * value . inputPrice ;
42- OutputCost = CompletionTokens / oneMillion * value . outputPrice ;
43- }
44-
45- public void LogCost ( )
46- {
47- var _inputCost = InputCost == 0 ? "?" : InputCost . ToString ( "F3" ) ;
48- var _outputCost = OutputCost == 0 ? "?" : OutputCost . ToString ( "F3" ) ;
49- var _totalCost = ( InputCost + OutputCost ) == 0 ? "?" : ( InputCost + OutputCost ) . ToString ( "F3" ) ;
5018 var models = string . Join ( ", " , ModelsUsed ) ;
5119
52- outputHelper . OutputConsole ( $ "[{ models } ] Usage (cost / tokens):") ;
53- outputHelper . OutputConsole ( $ " Input: ${ _inputCost } / { PromptTokens } ") ;
54- outputHelper . OutputConsole ( $ " Output: ${ _outputCost } / { CompletionTokens } ") ;
55- outputHelper . OutputConsole ( $ " Total: ${ _totalCost } / { PromptTokens + CompletionTokens } ") ;
20+ outputHelper . OutputConsole ( "--------------------------------------------------------------------------------" ) ;
21+ outputHelper . OutputConsole ( $ "[token usage][{ models } ] input: { PromptTokens } , output: { CompletionTokens } , total: { PromptTokens + CompletionTokens } ") ;
5622 outputHelper . OutputConsole ( "--------------------------------------------------------------------------------" ) ;
5723 }
5824}
0 commit comments