tools.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package operation_setting
  2. import "strings"
  3. const (
  4. // Web search
  5. WebSearchPriceHigh = 25.00
  6. WebSearchPrice = 10.00
  7. // File search
  8. FileSearchPrice = 2.5
  9. )
  10. const (
  11. // Gemini Audio Input Price
  12. Gemini25FlashPreviewInputAudioPrice = 1.00
  13. Gemini25FlashProductionInputAudioPrice = 1.00 // for `gemini-2.5-flash`
  14. Gemini25FlashLitePreviewInputAudioPrice = 0.50
  15. Gemini25FlashNativeAudioInputAudioPrice = 3.00
  16. Gemini20FlashInputAudioPrice = 0.70
  17. )
  18. const (
  19. // Claude Web search
  20. ClaudeWebSearchPrice = 10.00
  21. )
  22. const (
  23. Gemini25FlashImagePreviewImageOutputPrice = 30.00
  24. )
  25. func GetClaudeWebSearchPricePerThousand() float64 {
  26. return ClaudeWebSearchPrice
  27. }
  28. func GetWebSearchPricePerThousand(modelName string, contextSize string) float64 {
  29. // 确定模型类型
  30. // https://platform.openai.com/docs/pricing Web search 价格按模型类型收费
  31. // 新版计费规则不再关联 search context size,故在const区域将各size的价格设为一致。
  32. // gpt-5, gpt-5-mini, gpt-5-nano 和 o 系列模型价格为 10.00 美元/千次调用,产生额外 token 计入 input_tokens
  33. // gpt-4o, gpt-4.1, gpt-4o-mini 和 gpt-4.1-mini 价格为 25.00 美元/千次调用,不产生额外 token
  34. isNormalPriceModel :=
  35. strings.HasPrefix(modelName, "o3") ||
  36. strings.HasPrefix(modelName, "o4") ||
  37. strings.HasPrefix(modelName, "gpt-5")
  38. var priceWebSearchPerThousandCalls float64
  39. if isNormalPriceModel {
  40. priceWebSearchPerThousandCalls = WebSearchPrice
  41. } else {
  42. priceWebSearchPerThousandCalls = WebSearchPriceHigh
  43. }
  44. return priceWebSearchPerThousandCalls
  45. }
  46. func GetFileSearchPricePerThousand() float64 {
  47. return FileSearchPrice
  48. }
  49. func GetGeminiInputAudioPricePerMillionTokens(modelName string) float64 {
  50. if strings.HasPrefix(modelName, "gemini-2.5-flash-preview-native-audio") {
  51. return Gemini25FlashNativeAudioInputAudioPrice
  52. } else if strings.HasPrefix(modelName, "gemini-2.5-flash-preview-lite") {
  53. return Gemini25FlashLitePreviewInputAudioPrice
  54. } else if strings.HasPrefix(modelName, "gemini-2.5-flash-preview") {
  55. return Gemini25FlashPreviewInputAudioPrice
  56. } else if strings.HasPrefix(modelName, "gemini-2.5-flash") {
  57. return Gemini25FlashProductionInputAudioPrice
  58. } else if strings.HasPrefix(modelName, "gemini-2.0-flash") {
  59. return Gemini20FlashInputAudioPrice
  60. }
  61. return 0
  62. }
  63. func GetGeminiImageOutputPricePerMillionTokens(modelName string) float64 {
  64. if strings.HasPrefix(modelName, "gemini-2.5-flash-image-preview") {
  65. return Gemini25FlashImagePreviewImageOutputPrice
  66. }
  67. return 0
  68. }