mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 00:45:29 +08:00
47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package gemini
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"ds2api/internal/adapter/openai"
|
|
"ds2api/internal/config"
|
|
"ds2api/internal/util"
|
|
)
|
|
|
|
func normalizeGeminiRequest(store ConfigReader, routeModel string, req map[string]any, stream bool) (util.StandardRequest, error) {
|
|
requestedModel := strings.TrimSpace(routeModel)
|
|
if requestedModel == "" {
|
|
return util.StandardRequest{}, fmt.Errorf("model is required in request path")
|
|
}
|
|
|
|
resolvedModel, ok := config.ResolveModel(store, requestedModel)
|
|
if !ok {
|
|
return util.StandardRequest{}, fmt.Errorf("Model '%s' is not available.", requestedModel)
|
|
}
|
|
thinkingEnabled, searchEnabled, _ := config.GetModelConfig(resolvedModel)
|
|
|
|
messagesRaw := geminiMessagesFromRequest(req)
|
|
if len(messagesRaw) == 0 {
|
|
return util.StandardRequest{}, fmt.Errorf("Request must include non-empty contents.")
|
|
}
|
|
|
|
toolsRaw := convertGeminiTools(req["tools"])
|
|
finalPrompt, toolNames := openai.BuildPromptForAdapter(messagesRaw, toolsRaw, "")
|
|
passThrough := collectGeminiPassThrough(req)
|
|
|
|
return util.StandardRequest{
|
|
Surface: "google_gemini",
|
|
RequestedModel: requestedModel,
|
|
ResolvedModel: resolvedModel,
|
|
ResponseModel: requestedModel,
|
|
Messages: messagesRaw,
|
|
FinalPrompt: finalPrompt,
|
|
ToolNames: toolNames,
|
|
Stream: stream,
|
|
Thinking: thinkingEnabled,
|
|
Search: searchEnabled,
|
|
PassThrough: passThrough,
|
|
}, nil
|
|
}
|