package provider import ( "context" "fmt" ) // Provider 厂商接口 type Provider interface { // Translate 调用厂商API进行翻译 Translate(ctx context.Context, req *TranslateRequest) (*TranslateResponse, error) // Name 返回厂商名称 Name() string // Validate 验证配置是否有效 Validate() error } // TranslateRequest 翻译请求 type TranslateRequest struct { Text string `json:"text"` FromLang string `json:"from_lang"` ToLang string `json:"to_lang"` Prompt string `json:"prompt"` Model string `json:"model"` Options map[string]interface{} `json:"options"` } // TranslateResponse 翻译响应 type TranslateResponse struct { Text string `json:"text"` FromLang string `json:"from_lang"` ToLang string `json:"to_lang"` Model string `json:"model"` Usage *Usage `json:"usage"` RawResponse []byte `json:"raw_response,omitempty"` } // Usage 用量统计 type Usage struct { PromptTokens int `json:"prompt_tokens"` CompletionTokens int `json:"completion_tokens"` TotalTokens int `json:"total_tokens"` } // ProviderConfig 厂商配置 type ProviderConfig struct { APIHost string `json:"api_host"` APIKey string `json:"api_key"` Model string `json:"model"` } // TranslateError 翻译错误 type TranslateError struct { Code string `json:"code"` Message string `json:"message"` Details string `json:"details,omitempty"` } // Error 实现error接口 func (e *TranslateError) Error() string { if e.Details != "" { return fmt.Sprintf("%s: %s (%s)", e.Code, e.Message, e.Details) } return fmt.Sprintf("%s: %s", e.Code, e.Message) } // NewTranslateError 创建翻译错误 func NewTranslateError(code, message string) *TranslateError { return &TranslateError{ Code: code, Message: message, } } // NewTranslateErrorWithDetails 创建带详情的翻译错误 func NewTranslateErrorWithDetails(code, message, details string) *TranslateError { return &TranslateError{ Code: code, Message: message, Details: details, } } // IsNetworkError 检查是否为网络错误 func IsNetworkError(err error) bool { if translateErr, ok := err.(*TranslateError); ok { return translateErr.Code == "NETWORK_ERROR" } return false } // IsRateLimitError 检查是否为限流错误 func IsRateLimitError(err error) bool { if translateErr, ok := err.(*TranslateError); ok { return translateErr.Code == "RATE_LIMIT" } return false } // IsAuthError 检查是否为认证错误 func IsAuthError(err error) bool { if translateErr, ok := err.(*TranslateError); ok { return translateErr.Code == "AUTH_ERROR" || translateErr.Code == "INVALID_API_KEY" } return false }