package aws import ( "one-api/dto" ) type AwsClaudeRequest struct { // AnthropicVersion should be "bedrock-2023-05-31" AnthropicVersion string `json:"anthropic_version"` System any `json:"system,omitempty"` Messages []dto.ClaudeMessage `json:"messages"` MaxTokens uint `json:"max_tokens,omitempty"` Temperature *float64 `json:"temperature,omitempty"` TopP float64 `json:"top_p,omitempty"` TopK int `json:"top_k,omitempty"` StopSequences []string `json:"stop_sequences,omitempty"` Tools any `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` Thinking *dto.Thinking `json:"thinking,omitempty"` } func copyRequest(req *dto.ClaudeRequest) *AwsClaudeRequest { return &AwsClaudeRequest{ AnthropicVersion: "bedrock-2023-05-31", System: req.System, Messages: req.Messages, MaxTokens: req.MaxTokens, Temperature: req.Temperature, TopP: req.TopP, TopK: req.TopK, StopSequences: req.StopSequences, Tools: req.Tools, ToolChoice: req.ToolChoice, Thinking: req.Thinking, } } // Nova模型使用messages-v1格式 type NovaMessage struct { Role string `json:"role"` Content []NovaContent `json:"content"` } type NovaContent struct { Text string `json:"text"` } type NovaRequest struct { SchemaVersion string `json:"schemaVersion"` Messages []NovaMessage `json:"messages"` InferenceConfig NovaInferenceConfig `json:"inferenceConfig,omitempty"` } type NovaInferenceConfig struct { MaxTokens int `json:"maxTokens,omitempty"` Temperature float64 `json:"temperature,omitempty"` TopP float64 `json:"topP,omitempty"` } // 转换OpenAI请求为Nova格式 func convertToNovaRequest(req *dto.GeneralOpenAIRequest) *NovaRequest { novaMessages := make([]NovaMessage, len(req.Messages)) for i, msg := range req.Messages { novaMessages[i] = NovaMessage{ Role: msg.Role, Content: []NovaContent{{Text: msg.StringContent()}}, } } novaReq := &NovaRequest{ SchemaVersion: "messages-v1", Messages: novaMessages, } // 设置推理配置 if req.MaxTokens != 0 || (req.Temperature != nil && *req.Temperature != 0) || req.TopP != 0 { if req.MaxTokens != 0 { novaReq.InferenceConfig.MaxTokens = int(req.MaxTokens) } if req.Temperature != nil && *req.Temperature != 0 { novaReq.InferenceConfig.Temperature = *req.Temperature } if req.TopP != 0 { novaReq.InferenceConfig.TopP = req.TopP } } return novaReq }