mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
package claudeconv
|
|
|
|
import "strings"
|
|
|
|
type ClaudeMappingProvider interface {
|
|
ClaudeMapping() map[string]string
|
|
}
|
|
|
|
func ConvertClaudeToDeepSeek(claudeReq map[string]any, mappingProvider ClaudeMappingProvider, defaultClaudeModel string) map[string]any {
|
|
messages, _ := claudeReq["messages"].([]any)
|
|
model, _ := claudeReq["model"].(string)
|
|
if model == "" {
|
|
model = defaultClaudeModel
|
|
}
|
|
|
|
mapping := map[string]string{}
|
|
if mappingProvider != nil {
|
|
mapping = mappingProvider.ClaudeMapping()
|
|
}
|
|
dsModel := mapping["fast"]
|
|
if dsModel == "" {
|
|
dsModel = "deepseek-chat"
|
|
}
|
|
|
|
modelLower := strings.ToLower(model)
|
|
if strings.Contains(modelLower, "opus") || strings.Contains(modelLower, "reasoner") || strings.Contains(modelLower, "slow") {
|
|
if slow := mapping["slow"]; slow != "" {
|
|
dsModel = slow
|
|
}
|
|
}
|
|
|
|
convertedMessages := make([]any, 0, len(messages)+1)
|
|
if system, ok := claudeReq["system"].(string); ok && system != "" {
|
|
convertedMessages = append(convertedMessages, map[string]any{"role": "system", "content": system})
|
|
}
|
|
convertedMessages = append(convertedMessages, messages...)
|
|
|
|
out := map[string]any{"model": dsModel, "messages": convertedMessages}
|
|
for _, k := range []string{"temperature", "top_p", "stream"} {
|
|
if v, ok := claudeReq[k]; ok {
|
|
out[k] = v
|
|
}
|
|
}
|
|
if stopSeq, ok := claudeReq["stop_sequences"]; ok {
|
|
out["stop"] = stopSeq
|
|
}
|
|
return out
|
|
}
|