Versions in this module Expand all Collapse all v1 v1.0.3-preview.2 Jun 27, 2026 v1.0.3-preview Jun 24, 2026 v1.0.2 Jun 22, 2026 Changes in this version + func GetSSRFProtectedHttpClient() *http.Client v1.0.1 Jun 20, 2026 v1.0.0 Jun 19, 2026 Changes in this version + const Base64AuditPlaceholder + const BillingSourceSubscription + const BillingSourceWallet + const CSAMViolationMarker + const ContentViolatesUsageMarker + const ViolationFeeCodePrefix + var GetTaskAdaptorFunc func(platform constant.TaskPlatform) TaskPollingAdaptor + func AcSearch(findText string, dict []string, stopImmediately bool) (bool, []string) + func AppendChannelAffinityAdminInfo(c *gin.Context, adminInfo map[string]interface{}) + func AppendContentAuditAdminInfo(info *relaycommon.RelayInfo, adminInfo map[string]interface{}) + func ApplyChannelAffinityOverrideTemplate(c *gin.Context, paramOverride map[string]interface{}) (map[string]interface{}, bool) + func BuildGeminiNonTextResponseAuditContent(response *dto.GeminiChatResponse) string + func BuildGeminiResponseAuditContent(response *dto.GeminiChatResponse) string + func BuildImageResponseAuditContent(response *dto.ImageResponse) string + func BuildRawJSONAuditContent(raw []byte) string + func BuildSimpleImageAuditContent(count int) string + func BuildTextResponseAuditContent(response *dto.OpenAITextResponse) string + func BuildTieredTokenParams(usage *dto.Usage, isClaudeUsageSemantic bool, usedVars map[string]bool) billingexpr.TokenParams + func CacheGetRandomSatisfiedChannel(param *RetryParam) (*model.Channel, string, error) + func CalcOpenRouterCacheCreateTokens(usage dto.Usage, priceData types.PriceData) int + func ChargeViolationFeeIfNeeded(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, apiErr *types.MaxAPIError) bool + func ChatCompletionsRequestToResponsesRequest(req *dto.GeneralOpenAIRequest) (*dto.OpenAIResponsesRequest, error) + func CheckNotificationLimit(userId int, notifyType string) (bool, error) + func CheckSensitiveMessages(messages []dto.Message) ([]string, error) + func CheckSensitiveText(text string) (bool, []string) + func ClaudeErrorWrapper(err error, code string, statusCode int) *dto.ClaudeErrorWithStatusCode + func ClaudeErrorWrapperLocal(err error, code string, statusCode int) *dto.ClaudeErrorWithStatusCode + func ClaudeToOpenAIRequest(claudeRequest dto.ClaudeRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error) + func CleanupFileSources(c *gin.Context) + func ClearChannelAffinityCacheAll() int + func ClearChannelAffinityCacheByRuleName(ruleName string) (int, error) + func ClearCurrentChannelAffinityCache(c *gin.Context) bool + func CloseResponseBodyGracefully(httpResponse *http.Response) + func ConvertSimpleChangeParams(content string) *dto.MidjourneyRequest + func CountAudioTokenInput(audioBase64 string, audioFormat string) (int, error) + func CountAudioTokenOutput(audioBase64 string, audioFormat string) (int, error) + func CountTextToken(text string, model string) int + func CountTokenInput(input any, model string) int + func CountTokenRealtime(info *relaycommon.RelayInfo, request dto.RealtimeEvent, model string) (int, int, error) + func CoverPlusActionToNormalAction(midjRequest *dto.MidjourneyRequest) *dto.MidjourneyResponse + func CoverTaskActionToModelName(platform constant.TaskPlatform, action string) string + func CovertMjpActionToModelName(mjAction string) string + func CreateWaffoPancakePrimaryProduct(ctx context.Context, merchantID, privateKey, storeID, returnURL string) (string, error) + func CreateWaffoPancakePrimaryStore(ctx context.Context, merchantID, privateKey string) (string, error) + func CreateWaffoPancakeProductForPlan(ctx context.Context, ...) (string, error) + func DecodeBase64AudioData(audioBase64 string) (string, error) + func DecodeBase64FileData(base64String string) (string, string, error) + func DecodeBase64ImageData(base64String string) (image.Config, string, string, error) + func DecodeUrlImageData(imageUrl string) (image.Config, string, error) + func DetectFileType(mimeType string) types.FileType + func DisableChannel(channelError types.ChannelError, reason string) + func DispatchPlatformUpdate(platform constant.TaskPlatform, taskChannelM map[int][]string, ...) + func DoDownloadRequest(originUrl string, reason ...string) (resp *http.Response, err error) + func DoMidjourneyHttpRequest(c *gin.Context, timeout time.Duration, fullRequestURL string) (*dto.MidjourneyResponseWithStatusCode, []byte, error) + func DoWorkerRequest(req *WorkerRequest) (*http.Response, error) + func EnableChannel(channelId int, usingKey string, channelName string) + func EstimateRequestToken(c *gin.Context, meta *types.TokenCountMeta, info *relaycommon.RelayInfo) (int, error) + func EstimateToken(provider Provider, text string) int + func EstimateTokenByModel(model, text string) int + func ExtractCodexAccountIDFromJWT(token string) (string, bool) + func ExtractEmailFromJWT(token string) (string, bool) + func ExtractOutputTextFromResponses(resp *dto.OpenAIResponsesResponse) string + func FetchCodexWhamUsage(ctx context.Context, client *http.Client, baseURL string, accessToken string, ...) (statusCode int, body []byte, err error) + func GeminiToOpenAIRequest(geminiRequest *dto.GeminiChatRequest, info *relaycommon.RelayInfo) (*dto.GeneralOpenAIRequest, error) + func GenerateAudioOtherInfo(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.Usage, ...) map[string]interface + func GenerateClaudeOtherInfo(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, ...) map[string]interface + func GenerateMjOtherInfo(relayInfo *relaycommon.RelayInfo, priceData types.PriceData) map[string]interface + func GenerateTextOtherInfo(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, ...) map[string]interface + func GenerateWssOtherInfo(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.RealtimeUsage, ...) map[string]interface + func GetBase64Data(c *gin.Context, source types.FileSource, reason ...string) (string, string, error) + func GetCallbackAddress() string + func GetFileBase64FromUrl(c *gin.Context, url string, reason ...string) (*types.LocalFileData, error) + func GetFileTypeFromUrl(c *gin.Context, url string, reason ...string) (string, error) + func GetHttpClient() *http.Client + func GetHttpClientWithProxy(proxyURL string) (*http.Client, error) + func GetImageConfig(c *gin.Context, source types.FileSource) (image.Config, string, error) + func GetImageFromUrl(url string) (mimeType string, data string, err error) + func GetMimeType(c *gin.Context, source types.FileSource) (string, error) + func GetMimeTypeByExtension(ext string) string + func GetMjRequestModel(relayMode int, midjRequest *dto.MidjourneyRequest) (string, *dto.MidjourneyResponse, bool) + func GetPreferredChannelByAffinity(c *gin.Context, modelName string, usingGroup string) (int, bool) + func GetUserAutoGroup(userGroup string) []string + func GetUserGroupRatio(userGroup, group string) float64 + func GetUserUsableGroups(userGroup string) map[string]string + func GroupInUserUsableGroups(userGroup, groupName string) bool + func HasCSAMViolationMarker(err *types.MaxAPIError) bool + func IOCopyBytesGracefully(c *gin.Context, src *http.Response, data []byte) + func InitAc(dict []string) *goahocorasick.Machine + func InitHttpClient() + func InitTokenEncoders() + func InjectTieredBillingInfo(other map[string]interface{}, relayInfo *relaycommon.RelayInfo, ...) + func IsViolationFeeCode(code types.ErrorCode) bool + func LoadFileSource(c *gin.Context, source types.FileSource, reason ...string) (*types.CachedFileData, error) + func LogTaskConsumption(c *gin.Context, info *relaycommon.RelayInfo) + func MarkChannelAffinityUsed(c *gin.Context, selectedGroup string, channelID int) + func MidjourneyErrorWithStatusCodeWrapper(code int, desc string, statusCode int) *dto.MidjourneyResponseWithStatusCode + func MidjourneyErrorWrapper(code int, desc string) *dto.MidjourneyResponse + func NewProxyHttpClient(proxyURL string) (*http.Client, error) + func NormalizeCacheCreationSplit(totalTokens int, tokens5m int, tokens1h int) (int, int) + func NormalizeViolationFeeError(err *types.MaxAPIError) *types.MaxAPIError + func NotifyRootUser(t string, subject string, content string) + func NotifyUpstreamModelUpdateWatchers(subject string, content string) + func NotifyUser(userId int, userEmail string, userSetting dto.UserSetting, data dto.Notify) error + func ObserveChannelAffinityUsageCacheByRelayFormat(c *gin.Context, usage *dto.Usage, relayFormat types.RelayFormat) + func ObserveChannelAffinityUsageCacheFromContext(c *gin.Context, usage *dto.Usage, cachedTokenRateMode string) + func PaymentReturnURL(suffix string) string + func PostAudioConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.Usage, ...) + func PostConsumeQuota(relayInfo *relaycommon.RelayInfo, quota int, preConsumedQuota int, ...) (err error) + func PostTextConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.Usage, ...) + func PostWssConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, modelName string, ...) + func PreConsumeBilling(c *gin.Context, preConsumedQuota int, relayInfo *relaycommon.RelayInfo) *types.MaxAPIError + func PreConsumeQuota(c *gin.Context, preConsumedQuota int, relayInfo *relaycommon.RelayInfo) *types.MaxAPIError + func PreConsumeTokenQuota(relayInfo *relaycommon.RelayInfo, quota int) error + func PreWssConsumeQuota(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, usage *dto.RealtimeUsage) error + func RecalculateTaskQuota(ctx context.Context, task *model.Task, actualQuota int, reason string) + func RecalculateTaskQuotaByTokens(ctx context.Context, task *model.Task, totalTokens int) + func RecordChannelAffinity(c *gin.Context, channelID int) + func RefundTaskQuota(ctx context.Context, task *model.Task, reason string) + func RelayErrorHandler(ctx context.Context, resp *http.Response, showBodyWhenFail bool) (maxApiErr *types.MaxAPIError) + func RemoveDuplicate(s []string) []string + func ResetProxyClientCache() + func ResetStatusCode(maxApiErr *types.MaxAPIError, statusCodeMappingStr string) + func ResolveWaffoPancakeSubscriptionTradeNo(event *WaffoPancakeWebhookEvent) (string, error) + func ResolveWaffoPancakeTradeNo(event *WaffoPancakeWebhookEvent) (string, error) + func ResponseAuditEnabled() bool + func ResponseOpenAI2Claude(openAIResponse *dto.OpenAITextResponse, info *relaycommon.RelayInfo) *dto.ClaudeResponse + func ResponseOpenAI2Gemini(openAIResponse *dto.OpenAITextResponse, info *relaycommon.RelayInfo) *dto.GeminiChatResponse + func ResponseText2Usage(c *gin.Context, responseText string, modeName string, promptTokens int) *dto.Usage + func ResponsesResponseToChatCompletionsResponse(resp *dto.OpenAIResponsesResponse, id string) (*dto.OpenAITextResponse, *dto.Usage, error) + func ReturnPreConsumedQuota(c *gin.Context, relayInfo *relaycommon.RelayInfo) + func SaveWaffoPancakeConfig(ctx context.Context, ...) error + func SendWebhookNotify(webhookURL string, secret string, data dto.Notify) error + func SensitiveWordContains(text string) (bool, []string) + func SensitiveWordReplace(text string, returnImmediately bool) (bool, []string, string) + func SetRelayResponseAuditContent(info *relaycommon.RelayInfo, content string) + func SettleBilling(ctx *gin.Context, relayInfo *relaycommon.RelayInfo, actualQuota int) error + func ShouldChatCompletionsUseResponsesGlobal(channelID int, channelType int, model string) bool + func ShouldChatCompletionsUseResponsesPolicy(policy model_setting.ChatCompletionsToResponsesPolicy, channelID int, ...) bool + func ShouldCopyUpstreamHeader(c *gin.Context, k string, v []string) bool + func ShouldDisableChannel(err *types.MaxAPIError) bool + func ShouldEnableChannel(maxAPIError *types.MaxAPIError, status int) bool + func ShouldKeepChannelAffinityOnChannelDisabled() bool + func ShouldSkipRetryAfterChannelAffinityFailure(c *gin.Context) bool + func StartCodexCredentialAutoRefreshTask() + func StartSubscriptionQuotaResetTask() + func StreamResponseOpenAI2Claude(openAIResponse *dto.ChatCompletionsStreamResponse, info *relaycommon.RelayInfo) []*dto.ClaudeResponse + func StreamResponseOpenAI2Gemini(openAIResponse *dto.ChatCompletionsStreamResponse, info *relaycommon.RelayInfo) *dto.GeminiChatResponse + func SundaySearch(text string, pattern string) bool + func TaskErrorFromAPIError(apiErr *types.MaxAPIError) *dto.TaskError + func TaskErrorWrapper(err error, code string, statusCode int) *dto.TaskError + func TaskErrorWrapperLocal(err error, code string, statusCode int) *dto.TaskError + func TaskPollingLoop() + func TryTieredSettle(relayInfo *relaycommon.RelayInfo, params billingexpr.TokenParams) (ok bool, quota int, result *billingexpr.TieredResult) + func UpdateSunoTasks(ctx context.Context, taskChannelM map[int][]string, ...) error + func UpdateVideoTasks(ctx context.Context, platform constant.TaskPlatform, ...) error + func ValidUsage(usage *dto.Usage) bool + func WaffoPancakeBuyerIdentityFromUserID(userID int) string + func WrapAsViolationFeeGrokCSAM(err *types.MaxAPIError) *types.MaxAPIError + type BillingSession struct + func NewBillingSession(c *gin.Context, relayInfo *relaycommon.RelayInfo, preConsumedQuota int) (*BillingSession, *types.MaxAPIError) + func (s *BillingSession) GetPreConsumedQuota() int + func (s *BillingSession) NeedsRefund() bool + func (s *BillingSession) Refund(c *gin.Context) + func (s *BillingSession) Reserve(targetQuota int) error + func (s *BillingSession) Settle(actualQuota int) error + type ChannelAffinityCacheStats struct + ByRuleName map[string]int + CacheAlgo string + CacheCapacity int + Enabled bool + Total int + Unknown int + func GetChannelAffinityCacheStats() ChannelAffinityCacheStats + type ChannelAffinityStatsContext struct + KeyFingerprint string + RuleName string + TTLSeconds int64 + UsingGroup string + func GetChannelAffinityStatsContext(c *gin.Context) (ChannelAffinityStatsContext, bool) + type ChannelAffinityUsageCacheCounters struct + CachedTokenRateMode string + CachedTokens int64 + CompletionTokens int64 + Hit int64 + LastSeenAt int64 + PromptCacheHitTokens int64 + PromptTokens int64 + Total int64 + TotalTokens int64 + WindowSeconds int64 + type ChannelAffinityUsageCacheStats struct + CachedTokenRateMode string + CachedTokens int64 + CompletionTokens int64 + Hit int64 + KeyFingerprint string + LastSeenAt int64 + PromptCacheHitTokens int64 + PromptTokens int64 + RuleName string + Total int64 + TotalTokens int64 + UsingGroup string + WindowSeconds int64 + func GetChannelAffinityUsageCacheStats(ruleName, usingGroup, keyFp string) ChannelAffinityUsageCacheStats + type CodexCredentialRefreshOptions struct + ResetCaches bool + type CodexOAuthAuthorizationFlow struct + AuthorizeURL string + Challenge string + State string + Verifier string + func CreateCodexOAuthAuthorizationFlow() (*CodexOAuthAuthorizationFlow, error) + type CodexOAuthKey struct + AccessToken string + AccountID string + Email string + Expired string + IDToken string + LastRefresh string + RefreshToken string + Type string + func RefreshCodexChannelCredential(ctx context.Context, channelID int, opts CodexCredentialRefreshOptions) (*CodexOAuthKey, *model.Channel, error) + type CodexOAuthTokenResult struct + AccessToken string + ExpiresAt time.Time + RefreshToken string + func ExchangeCodexAuthorizationCode(ctx context.Context, code string, verifier string) (*CodexOAuthTokenResult, error) + func ExchangeCodexAuthorizationCodeWithProxy(ctx context.Context, code string, verifier string, proxyURL string) (*CodexOAuthTokenResult, error) + func RefreshCodexOAuthToken(ctx context.Context, refreshToken string) (*CodexOAuthTokenResult, error) + func RefreshCodexOAuthTokenWithProxy(ctx context.Context, refreshToken string, proxyURL string) (*CodexOAuthTokenResult, error) + type FundingSource interface + PreConsume func(amount int) error + Refund func() error + Settle func(delta int) error + Source func() string + type ModelHistoryModel struct + Name string + Total int64 + Vendor string + type ModelHistoryPoint struct + Label string + Model string + Tokens int64 + Ts string + Vendor string + type ModelHistorySeries struct + Buckets int + Models []ModelHistoryModel + Points []ModelHistoryPoint + type Provider string + const Claude + const Gemini + const OpenAI + const Unknown + type QuotaInfo struct + GroupRatio float64 + InputDetails TokenDetails + ModelName string + ModelPrice float64 + ModelRatio float64 + OutputDetails TokenDetails + UsePrice bool + type RankedModel struct + Category string + GrowthPct float64 + ModelName string + PreviousRank *int + Rank int + Share float64 + TotalTokens int64 + Vendor string + VendorIcon string + type RankedVendor struct + GrowthPct float64 + ModelsCount int + Rank int + Share float64 + TopModel string + TotalTokens int64 + Vendor string + VendorIcon string + type RankingMover struct + CurrentRank int + GrowthPct float64 + ModelName string + RankDelta int + Vendor string + VendorIcon string + type RankingsResponse struct + Models []RankedModel + ModelsHistory ModelHistorySeries + TopDroppers []RankingMover + TopMovers []RankingMover + VendorShareHistory VendorShareSeries + Vendors []RankedVendor + func GetRankingsSnapshot(period string) (*RankingsResponse, error) + type RetryParam struct + Ctx *gin.Context + ModelName string + RequestPath string + Retry *int + TokenGroup string + func (p *RetryParam) GetRetry() int + func (p *RetryParam) IncreaseRetry() + func (p *RetryParam) ResetRetryNextTry() + func (p *RetryParam) SetRetry(retry int) + type SubscriptionFunding struct + AmountTotal int64 + AmountUsedAfter int64 + PlanId int + PlanTitle string + func (s *SubscriptionFunding) PreConsume(_ int) error + func (s *SubscriptionFunding) Refund() error + func (s *SubscriptionFunding) Settle(delta int) error + func (s *SubscriptionFunding) Source() string + type TaskPollingAdaptor interface + AdjustBillingOnComplete func(task *model.Task, taskResult *relaycommon.TaskInfo) int + FetchTask func(baseURL string, key string, body map[string]any, proxy string) (*http.Response, error) + Init func(info *relaycommon.RelayInfo) + ParseTaskResult func(body []byte) (*relaycommon.TaskInfo, error) + type TieredResultWrapper = billingexpr.TieredResult + type TokenDetails struct + AudioTokens int + TextTokens int + type ToolCallItem struct + CallCount int + Name string + PricePer1K float64 + Quota int + TotalPrice float64 + type ToolCallResult struct + Items []ToolCallItem + TotalQuota int + func ComputeToolCallQuota(usage ToolCallUsage, groupRatio float64) ToolCallResult + type ToolCallUsage struct + FileSearchCalls int + ImageGenerationCall bool + ImageGenerationQuality string + ImageGenerationSize string + ModelName string + WebSearchCalls int + WebSearchToolName string + type VendorSharePoint struct + Label string + Share float64 + Tokens int64 + Ts string + Vendor string + type VendorShareSeries struct + Buckets int + Points []VendorSharePoint + Vendors []VendorShareVendor + type VendorShareVendor struct + Name string + Share float64 + Total int64 + type WaffoPancakeCatalog struct + Stores []WaffoPancakeCatalogStore + func ListWaffoPancakeCatalog(ctx context.Context, merchantID, privateKey string) (*WaffoPancakeCatalog, error) + type WaffoPancakeCatalogProduct struct + ID string + Name string + Status string + type WaffoPancakeCatalogStore struct + ID string + Name string + OnetimeProducts []WaffoPancakeCatalogProduct + ProdEnabled bool + Status string + type WaffoPancakeCheckoutSession struct + CheckoutURL string + ExpiresAt string + OrderID string + SessionID string + Token string + TokenExpiresAt string + func CreateWaffoPancakeCheckoutSession(ctx context.Context, params *WaffoPancakeCreateSessionParams) (*WaffoPancakeCheckoutSession, error) + type WaffoPancakeCreateSessionParams struct + BuyerEmail string + BuyerIdentity string + ExpiresInSeconds *int + OrderMerchantExternalID string + PriceSnapshot *WaffoPancakePriceSnapshot + ProductID string + type WaffoPancakePairResult struct + OrphanStore bool + ProductID string + ProductName string + StoreID string + StoreName string + func CreateWaffoPancakePrimaryPair(ctx context.Context, merchantID, privateKey, returnURL string) (*WaffoPancakePairResult, error) + type WaffoPancakePriceSnapshot struct + Amount string + TaxCategory string + type WaffoPancakeWebhookData struct + Amount string + BuyerEmail string + Currency string + MerchantProvidedBuyerIdentity string + OrderID string + OrderMerchantExternalID string + ProductName string + TaxAmount string + type WaffoPancakeWebhookEvent struct + Data WaffoPancakeWebhookData + EventID string + EventType string + ID string + Mode string + StoreID string + Timestamp string + func VerifyConfiguredWaffoPancakeWebhook(payload string, signatureHeader string) (*WaffoPancakeWebhookEvent, error) + func (e *WaffoPancakeWebhookEvent) NormalizedEventType() string + type WalletFunding struct + func (w *WalletFunding) PreConsume(amount int) error + func (w *WalletFunding) Refund() error + func (w *WalletFunding) Settle(delta int) error + func (w *WalletFunding) Source() string + type WebhookPayload struct + Content string + Timestamp int64 + Title string + Type string + Values []interface{} + type WorkerRequest struct + Body json.RawMessage + Headers map[string]string + Key string + Method string + URL string