Skip to content

Commit 889e127

Browse files
committed
feat(models): add cost estimation for OpenAI models
- Introduce `Cost` type and constants for token pricing. - Implement `EstimateCost` function to calculate usage cost. - Add `CostPerToken` struct and `OpenAIModelCosts` map for model pricing. [Generated by Kommit]
1 parent 13b7fa8 commit 889e127

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

internal/models/openai.go

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,62 @@ const (
1212
OpenAIModelO3Mini openai.ChatModel = openai.ChatModelO3Mini
1313
)
1414

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+
1561
var OpenAISupportedModels = []openai.ChatModel{
1662
OpenAIModelGPT4oMini,
1763
OpenAIModelGPT4o,
1864
OpenAIModelO3Mini,
1965
}
2066

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)
2373
}

0 commit comments

Comments
 (0)