mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 14:46:38 +08:00
64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package category
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"one-api/common"
|
|
"one-api/common/requester"
|
|
"one-api/providers/base"
|
|
"one-api/providers/claude"
|
|
"one-api/types"
|
|
)
|
|
|
|
const anthropicVersion = "bedrock-2023-05-31"
|
|
|
|
type ClaudeRequest struct {
|
|
*claude.ClaudeRequest
|
|
AnthropicVersion string `json:"anthropic_version"`
|
|
}
|
|
|
|
func init() {
|
|
CategoryMap["anthropic"] = Category{
|
|
ChatComplete: ConvertClaudeFromChatOpenai,
|
|
ResponseChatComplete: ConvertClaudeToChatOpenai,
|
|
ResponseChatCompleteStrem: ClaudeChatCompleteStrem,
|
|
}
|
|
}
|
|
|
|
func ConvertClaudeFromChatOpenai(request *types.ChatCompletionRequest) (any, *types.OpenAIErrorWithStatusCode) {
|
|
rawRequest, err := claude.ConvertFromChatOpenai(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
claudeRequest := &ClaudeRequest{}
|
|
claudeRequest.ClaudeRequest = rawRequest
|
|
claudeRequest.AnthropicVersion = anthropicVersion
|
|
|
|
// 删除model字段
|
|
claudeRequest.Model = ""
|
|
claudeRequest.Stream = false
|
|
|
|
return claudeRequest, nil
|
|
}
|
|
|
|
func ConvertClaudeToChatOpenai(provider base.ProviderInterface, response *http.Response, request *types.ChatCompletionRequest) (*types.ChatCompletionResponse, *types.OpenAIErrorWithStatusCode) {
|
|
claudeResponse := &claude.ClaudeResponse{}
|
|
err := json.NewDecoder(response.Body).Decode(claudeResponse)
|
|
if err != nil {
|
|
return nil, common.ErrorWrapper(err, "decode_response_failed", http.StatusInternalServerError)
|
|
}
|
|
|
|
return claude.ConvertToChatOpenai(provider, claudeResponse, request)
|
|
}
|
|
|
|
func ClaudeChatCompleteStrem(provider base.ProviderInterface, request *types.ChatCompletionRequest) requester.HandlerPrefix[string] {
|
|
chatHandler := &claude.ClaudeStreamHandler{
|
|
Usage: provider.GetUsage(),
|
|
Request: request,
|
|
Prefix: `{"type"`,
|
|
}
|
|
|
|
return chatHandler.HandlerStream
|
|
}
|