|
@@ -1,7 +1,9 @@
|
|
|
package aws
|
|
package aws
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "encoding/json"
|
|
|
"io"
|
|
"io"
|
|
|
|
|
+ "net/http"
|
|
|
|
|
|
|
|
"github.com/QuantumNous/new-api/common"
|
|
"github.com/QuantumNous/new-api/common"
|
|
|
"github.com/QuantumNous/new-api/dto"
|
|
"github.com/QuantumNous/new-api/dto"
|
|
@@ -10,6 +12,7 @@ import (
|
|
|
type AwsClaudeRequest struct {
|
|
type AwsClaudeRequest struct {
|
|
|
// AnthropicVersion should be "bedrock-2023-05-31"
|
|
// AnthropicVersion should be "bedrock-2023-05-31"
|
|
|
AnthropicVersion string `json:"anthropic_version"`
|
|
AnthropicVersion string `json:"anthropic_version"`
|
|
|
|
|
+ AnthropicBeta json.RawMessage `json:"anthropic_beta"`
|
|
|
System any `json:"system,omitempty"`
|
|
System any `json:"system,omitempty"`
|
|
|
Messages []dto.ClaudeMessage `json:"messages"`
|
|
Messages []dto.ClaudeMessage `json:"messages"`
|
|
|
MaxTokens uint `json:"max_tokens,omitempty"`
|
|
MaxTokens uint `json:"max_tokens,omitempty"`
|
|
@@ -22,29 +25,23 @@ type AwsClaudeRequest struct {
|
|
|
Thinking *dto.Thinking `json:"thinking,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,
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func formatRequest(requestBody io.Reader) (*AwsClaudeRequest, error) {
|
|
|
|
|
|
|
+func formatRequest(requestBody io.Reader, requestHeader http.Header) (*AwsClaudeRequest, error) {
|
|
|
var awsClaudeRequest AwsClaudeRequest
|
|
var awsClaudeRequest AwsClaudeRequest
|
|
|
err := common.DecodeJson(requestBody, &awsClaudeRequest)
|
|
err := common.DecodeJson(requestBody, &awsClaudeRequest)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
|
awsClaudeRequest.AnthropicVersion = "bedrock-2023-05-31"
|
|
awsClaudeRequest.AnthropicVersion = "bedrock-2023-05-31"
|
|
|
|
|
+
|
|
|
|
|
+ // check header anthropic-beta
|
|
|
|
|
+ anthropicBetaValues := requestHeader.Values("anthropic-beta")
|
|
|
|
|
+ if len(anthropicBetaValues) > 0 {
|
|
|
|
|
+ betaJson, err := json.Marshal(anthropicBetaValues)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ awsClaudeRequest.AnthropicBeta = json.RawMessage(betaJson)
|
|
|
|
|
+ }
|
|
|
return &awsClaudeRequest, nil
|
|
return &awsClaudeRequest, nil
|
|
|
}
|
|
}
|
|
|
|
|
|