mirror of
https://github.com/linux-do/new-api.git
synced 2025-11-08 23:23:42 +08:00
feat: claude computer use
Signed-off-by: wozulong <>
This commit is contained in:
@@ -50,11 +50,18 @@ func (a *Adaptor) GetRequestURL(info *relaycommon.RelayInfo) (string, error) {
|
|||||||
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, info *relaycommon.RelayInfo) error {
|
func (a *Adaptor) SetupRequestHeader(c *gin.Context, req *http.Request, info *relaycommon.RelayInfo) error {
|
||||||
channel.SetupApiRequestHeader(info, c, req)
|
channel.SetupApiRequestHeader(info, c, req)
|
||||||
req.Header.Set("x-api-key", info.ApiKey)
|
req.Header.Set("x-api-key", info.ApiKey)
|
||||||
|
|
||||||
anthropicVersion := c.Request.Header.Get("anthropic-version")
|
anthropicVersion := c.Request.Header.Get("anthropic-version")
|
||||||
if anthropicVersion == "" {
|
if anthropicVersion == "" {
|
||||||
anthropicVersion = "2023-06-01"
|
anthropicVersion = "2023-06-01"
|
||||||
}
|
}
|
||||||
req.Header.Set("anthropic-version", anthropicVersion)
|
req.Header.Set("anthropic-version", anthropicVersion)
|
||||||
|
|
||||||
|
anthropicBeta := c.Request.Header.Get("anthropic-beta")
|
||||||
|
if "" != anthropicBeta {
|
||||||
|
req.Header.Set("anthropic-beta", anthropicBeta)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,13 @@ type ClaudeMessage struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Tool struct {
|
type Tool struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Description string `json:"description,omitempty"`
|
Description any `json:"description,omitempty"`
|
||||||
InputSchema map[string]interface{} `json:"input_schema"`
|
InputSchema map[string]interface{} `json:"input_schema,omitempty"`
|
||||||
|
Type any `json:"type,omitempty"`
|
||||||
|
DisplayHeightPx int `json:"display_height_px,omitempty"`
|
||||||
|
DisplayWidthPx int `json:"display_width_px,omitempty"`
|
||||||
|
DisplayNumber int `json:"display_number,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type InputSchema struct {
|
type InputSchema struct {
|
||||||
|
|||||||
@@ -63,23 +63,44 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR
|
|||||||
claudeTools := make([]Tool, 0, len(textRequest.Tools))
|
claudeTools := make([]Tool, 0, len(textRequest.Tools))
|
||||||
|
|
||||||
for _, tool := range textRequest.Tools {
|
for _, tool := range textRequest.Tools {
|
||||||
if params, ok := tool.Function.Parameters.(map[string]any); ok {
|
claudeTool := Tool{
|
||||||
claudeTool := Tool{
|
Name: tool.Function.Name,
|
||||||
Name: tool.Function.Name,
|
Description: tool.Function.Description,
|
||||||
Description: tool.Function.Description,
|
Type: tool.Type,
|
||||||
}
|
|
||||||
claudeTool.InputSchema = make(map[string]interface{})
|
|
||||||
claudeTool.InputSchema["type"] = params["type"].(string)
|
|
||||||
claudeTool.InputSchema["properties"] = params["properties"]
|
|
||||||
claudeTool.InputSchema["required"] = params["required"]
|
|
||||||
for s, a := range params {
|
|
||||||
if s == "type" || s == "properties" || s == "required" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
claudeTool.InputSchema[s] = a
|
|
||||||
}
|
|
||||||
claudeTools = append(claudeTools, claudeTool)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if "function" != tool.Type {
|
||||||
|
claudeTool.Description = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if params, ok := tool.Function.Parameters.(map[string]any); ok {
|
||||||
|
if "function" == tool.Type {
|
||||||
|
claudeTool.Type = nil
|
||||||
|
|
||||||
|
claudeTool.InputSchema = make(map[string]interface{})
|
||||||
|
claudeTool.InputSchema["type"] = params["type"].(string)
|
||||||
|
claudeTool.InputSchema["properties"] = params["properties"]
|
||||||
|
claudeTool.InputSchema["required"] = params["required"]
|
||||||
|
for s, a := range params {
|
||||||
|
if s == "type" || s == "properties" || s == "required" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
claudeTool.InputSchema[s] = a
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if val, ok := params["display_height_px"]; ok {
|
||||||
|
claudeTool.DisplayHeightPx = int(val.(float64))
|
||||||
|
}
|
||||||
|
if val, ok := params["display_width_px"]; ok {
|
||||||
|
claudeTool.DisplayWidthPx = int(val.(float64))
|
||||||
|
}
|
||||||
|
if val, ok := params["display_number"]; ok {
|
||||||
|
claudeTool.DisplayNumber = int(val.(float64))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
claudeTools = append(claudeTools, claudeTool)
|
||||||
}
|
}
|
||||||
|
|
||||||
claudeRequest := ClaudeRequest{
|
claudeRequest := ClaudeRequest{
|
||||||
@@ -91,6 +112,7 @@ func RequestOpenAI2ClaudeMessage(textRequest dto.GeneralOpenAIRequest) (*ClaudeR
|
|||||||
TopK: textRequest.TopK,
|
TopK: textRequest.TopK,
|
||||||
Stream: textRequest.Stream,
|
Stream: textRequest.Stream,
|
||||||
Tools: claudeTools,
|
Tools: claudeTools,
|
||||||
|
ToolChoice: textRequest.ToolChoice,
|
||||||
}
|
}
|
||||||
if claudeRequest.MaxTokens == 0 {
|
if claudeRequest.MaxTokens == 0 {
|
||||||
claudeRequest.MaxTokens = 4096
|
claudeRequest.MaxTokens = 4096
|
||||||
|
|||||||
Reference in New Issue
Block a user