package operation_setting import "strings" const ( // Web search WebSearchPriceHigh = 25.00 WebSearchPrice = 10.00 // File search FileSearchPrice = 2.5 ) const ( GPTImage1Low1024x1024 = 0.011 GPTImage1Low1024x1536 = 0.016 GPTImage1Low1536x1024 = 0.016 GPTImage1Medium1024x1024 = 0.042 GPTImage1Medium1024x1536 = 0.063 GPTImage1Medium1536x1024 = 0.063 GPTImage1High1024x1024 = 0.167 GPTImage1High1024x1536 = 0.25 GPTImage1High1536x1024 = 0.25 ) const ( // Gemini Audio Input Price Gemini25FlashPreviewInputAudioPrice = 1.00 Gemini25FlashProductionInputAudioPrice = 1.00 // for `gemini-2.5-flash` Gemini25FlashLitePreviewInputAudioPrice = 0.50 Gemini25FlashNativeAudioInputAudioPrice = 3.00 Gemini20FlashInputAudioPrice = 0.70 GeminiRoboticsER15InputAudioPrice = 1.00 ) const ( // Claude Web search ClaudeWebSearchPrice = 10.00 ) func GetClaudeWebSearchPricePerThousand() float64 { return ClaudeWebSearchPrice } func GetWebSearchPricePerThousand(modelName string, contextSize string) float64 { // 确定模型类型 // https://platform.openai.com/docs/pricing Web search 价格按模型类型收费 // 新版计费规则不再关联 search context size,故在const区域将各size的价格设为一致。 // gpt-5, gpt-5-mini, gpt-5-nano 和 o 系列模型价格为 10.00 美元/千次调用,产生额外 token 计入 input_tokens // gpt-4o, gpt-4.1, gpt-4o-mini 和 gpt-4.1-mini 价格为 25.00 美元/千次调用,不产生额外 token isNormalPriceModel := strings.HasPrefix(modelName, "o3") || strings.HasPrefix(modelName, "o4") || strings.HasPrefix(modelName, "gpt-5") var priceWebSearchPerThousandCalls float64 if isNormalPriceModel { priceWebSearchPerThousandCalls = WebSearchPrice } else { priceWebSearchPerThousandCalls = WebSearchPriceHigh } return priceWebSearchPerThousandCalls } func GetFileSearchPricePerThousand() float64 { return FileSearchPrice } func GetGeminiInputAudioPricePerMillionTokens(modelName string) float64 { if strings.HasPrefix(modelName, "gemini-2.5-flash-preview-native-audio") { return Gemini25FlashNativeAudioInputAudioPrice } else if strings.HasPrefix(modelName, "gemini-2.5-flash-preview-lite") { return Gemini25FlashLitePreviewInputAudioPrice } else if strings.HasPrefix(modelName, "gemini-2.5-flash-preview") { return Gemini25FlashPreviewInputAudioPrice } else if strings.HasPrefix(modelName, "gemini-2.5-flash") { return Gemini25FlashProductionInputAudioPrice } else if strings.HasPrefix(modelName, "gemini-2.0-flash") { return Gemini20FlashInputAudioPrice } else if strings.HasPrefix(modelName, "gemini-robotics-er-1.5") { return GeminiRoboticsER15InputAudioPrice } return 0 } func GetGPTImage1PriceOnceCall(quality string, size string) float64 { prices := map[string]map[string]float64{ "low": { "1024x1024": GPTImage1Low1024x1024, "1024x1536": GPTImage1Low1024x1536, "1536x1024": GPTImage1Low1536x1024, }, "medium": { "1024x1024": GPTImage1Medium1024x1024, "1024x1536": GPTImage1Medium1024x1536, "1536x1024": GPTImage1Medium1536x1024, }, "high": { "1024x1024": GPTImage1High1024x1024, "1024x1536": GPTImage1High1024x1536, "1536x1024": GPTImage1High1536x1024, }, } if qualityMap, exists := prices[quality]; exists { if price, exists := qualityMap[size]; exists { return price } } return GPTImage1High1024x1024 }