mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-08-17 19:47:10 +08:00
v0.3.8
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
package modeladapter
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func cloneRequestBodyOverride(input map[string]any) map[string]any {
|
||||
if len(input) == 0 {
|
||||
return nil
|
||||
}
|
||||
payload, err := json.Marshal(input)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
var cloned map[string]any
|
||||
if err := json.Unmarshal(payload, &cloned); err != nil {
|
||||
return nil
|
||||
}
|
||||
return cloned
|
||||
}
|
||||
|
||||
func requestBodyToMap(input any) (map[string]any, error) {
|
||||
if body, ok := input.(map[string]any); ok {
|
||||
return body, nil
|
||||
}
|
||||
payload, err := json.Marshal(input)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var body map[string]any
|
||||
if err := json.Unmarshal(payload, &body); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if body == nil {
|
||||
body = map[string]any{}
|
||||
}
|
||||
return body, nil
|
||||
}
|
||||
|
||||
func ApplyOpenAIExtraParams(body map[string]any, enabled bool, paramsJSON string) error {
|
||||
return applyExtraParams(body, enabled, paramsJSON, "openai extra params json")
|
||||
}
|
||||
|
||||
func ApplyAnthropicExtraParams(body map[string]any, enabled bool, paramsJSON string) error {
|
||||
return applyExtraParams(body, enabled, paramsJSON, "anthropic extra params json")
|
||||
}
|
||||
|
||||
func applyExtraParams(body map[string]any, enabled bool, paramsJSON string, label string) error {
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
if body == nil {
|
||||
return fmt.Errorf("%s target body is nil", label)
|
||||
}
|
||||
extraParams, err := parseJSONMap(paramsJSON, label)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for key, value := range extraParams {
|
||||
name := strings.TrimSpace(key)
|
||||
if name == "" {
|
||||
continue
|
||||
}
|
||||
body[name] = value
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ApplyCustomHeaders(httpReq *http.Request, enabled bool, headersJSON string) error {
|
||||
if !enabled {
|
||||
return nil
|
||||
}
|
||||
if httpReq == nil {
|
||||
return fmt.Errorf("custom headers target request is nil")
|
||||
}
|
||||
headers, err := parseStringJSONMap(headersJSON, "custom headers json")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for key, value := range headers {
|
||||
name := strings.TrimSpace(key)
|
||||
if name == "" {
|
||||
continue
|
||||
}
|
||||
httpReq.Header.Set(name, value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseJSONMap(value string, label string) (map[string]any, error) {
|
||||
text := strings.TrimSpace(value)
|
||||
if text == "" {
|
||||
return nil, fmt.Errorf("%s is empty", label)
|
||||
}
|
||||
var parsed map[string]any
|
||||
if err := json.Unmarshal([]byte(text), &parsed); err != nil {
|
||||
return nil, fmt.Errorf("%s must be an object: %w", label, err)
|
||||
}
|
||||
if parsed == nil {
|
||||
return nil, fmt.Errorf("%s must be an object", label)
|
||||
}
|
||||
return parsed, nil
|
||||
}
|
||||
|
||||
func parseStringJSONMap(value string, label string) (map[string]string, error) {
|
||||
text := strings.TrimSpace(value)
|
||||
if text == "" {
|
||||
return nil, fmt.Errorf("%s is empty", label)
|
||||
}
|
||||
var parsed map[string]string
|
||||
if err := json.Unmarshal([]byte(text), &parsed); err != nil {
|
||||
return nil, fmt.Errorf("%s must be an object with string values: %w", label, err)
|
||||
}
|
||||
if parsed == nil {
|
||||
return nil, fmt.Errorf("%s must be an object", label)
|
||||
}
|
||||
return parsed, nil
|
||||
}
|
||||
Reference in New Issue
Block a user