| package claudeconv | |
| import ( | |
| "strings" | |
| "ds2api/internal/config" | |
| ) | |
| func ConvertClaudeToDeepSeek(claudeReq map[string]any, aliasProvider config.ModelAliasReader, defaultClaudeModel string) map[string]any { | |
| messages, _ := claudeReq["messages"].([]any) | |
| model, _ := claudeReq["model"].(string) | |
| if model == "" { | |
| model = defaultClaudeModel | |
| } | |
| dsModel, ok := config.ResolveModel(aliasProvider, model) | |
| if !ok || strings.TrimSpace(dsModel) == "" { | |
| dsModel = "deepseek-v4-flash" | |
| } | |
| 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 | |
| } | |