@@ -12,12 +12,62 @@ const (
12
12
OpenAIModelO3Mini openai.ChatModel = openai .ChatModelO3Mini
13
13
)
14
14
15
+ func IsSupportedModel (model openai.ChatModel ) bool {
16
+ return slices .Contains (OpenAISupportedModels , model )
17
+ }
18
+
19
+ type Cost float64
20
+
21
+ // https://openai.com/api/pricing/
22
+ const (
23
+ // GPT-4o Mini
24
+ OpenAIModelGPT4oMiniInputCostPerToken Cost = 2.50 * 1e-6
25
+ OpenAIModelGPT4oMiniCachedInputCostPerToken Cost = 1.25 * 1e-6
26
+ OpenAIModelGPT4oMiniOutputCostPerToken Cost = 10.00 * 1e-6
27
+ // GPT-4o
28
+ OpenAIModelGPT4oInputCostPerToken Cost = 0.150 * 1e-6
29
+ OpenAIModelGPT4oCachedInputCostPerToken Cost = 0.075 * 1e-6
30
+ OpenAIModelGPT4oOutputCostPerToken Cost = 0.670 * 1e-6
31
+ // O3 Mini
32
+ OpenAIModelO3MiniInputCostPerToken Cost = 1.10 * 1e-6
33
+ OpenAIModelO3MiniCachedInputCostPerToken Cost = 0.55 * 1e-6
34
+ OpenAIModelO3MiniOutputCostPerToken Cost = 4.40 * 1e-6
35
+ )
36
+
37
+ type CostPerToken struct {
38
+ Input Cost
39
+ CachedInput Cost
40
+ Output Cost
41
+ }
42
+
43
+ var OpenAIModelCosts = map [openai.ChatModel ]CostPerToken {
44
+ OpenAIModelGPT4oMini : {
45
+ Input : OpenAIModelGPT4oMiniInputCostPerToken ,
46
+ CachedInput : OpenAIModelGPT4oMiniCachedInputCostPerToken ,
47
+ Output : OpenAIModelGPT4oMiniOutputCostPerToken ,
48
+ },
49
+ OpenAIModelGPT4o : {
50
+ Input : OpenAIModelGPT4oInputCostPerToken ,
51
+ CachedInput : OpenAIModelGPT4oCachedInputCostPerToken ,
52
+ Output : OpenAIModelGPT4oOutputCostPerToken ,
53
+ },
54
+ OpenAIModelO3Mini : {
55
+ Input : OpenAIModelO3MiniInputCostPerToken ,
56
+ CachedInput : OpenAIModelO3MiniCachedInputCostPerToken ,
57
+ Output : OpenAIModelO3MiniOutputCostPerToken ,
58
+ },
59
+ }
60
+
15
61
var OpenAISupportedModels = []openai.ChatModel {
16
62
OpenAIModelGPT4oMini ,
17
63
OpenAIModelGPT4o ,
18
64
OpenAIModelO3Mini ,
19
65
}
20
66
21
- func IsSupportedModel (model openai.ChatModel ) bool {
22
- return slices .Contains (OpenAISupportedModels , model )
67
+ func EstimateCost (model openai.ChatModel , usage openai.CompletionUsage ) Cost {
68
+ cost := OpenAIModelCosts [model ]
69
+ estimatedCost := float64 (cost .Input )* float64 (usage .PromptTokens ) +
70
+ float64 (cost .CachedInput )* float64 (usage .PromptTokensDetails .CachedTokens ) +
71
+ float64 (cost .Output )* float64 (usage .CompletionTokens )
72
+ return Cost (estimatedCost )
23
73
}
0 commit comments