// Package geminiCLI provides request translation functionality for Gemini to OpenAI API. // It handles parsing and transforming Gemini API requests into OpenAI Chat Completions API format, // extracting model information, generation config, message contents, and tool declarations. // The package performs JSON data transformation to ensure compatibility // between Gemini API format and OpenAI API's expected format. package geminiCLI import ( "bytes" . "github.com/router-for-me/CLIProxyAPI/v6/internal/translator/openai/gemini" log "github.com/sirupsen/logrus" "github.com/tidwall/gjson" "github.com/tidwall/sjson" ) // ConvertGeminiCLIRequestToOpenAI parses and transforms a Gemini API request into OpenAI Chat Completions API format. // It extracts the model name, generation config, message contents, and tool declarations // from the raw JSON request and returns them in the format expected by the OpenAI API. func ConvertGeminiCLIRequestToOpenAI(modelName string, inputRawJSON []byte, stream bool) []byte { log.Debug("ConvertGeminiCLIRequestToOpenAI") rawJSON := bytes.Clone(inputRawJSON) rawJSON = []byte(gjson.GetBytes(rawJSON, "request").Raw) rawJSON, _ = sjson.SetBytes(rawJSON, "model", modelName) if gjson.GetBytes(rawJSON, "systemInstruction").Exists() { rawJSON, _ = sjson.SetRawBytes(rawJSON, "system_instruction", []byte(gjson.GetBytes(rawJSON, "systemInstruction").Raw)) rawJSON, _ = sjson.DeleteBytes(rawJSON, "systemInstruction") } return ConvertGeminiRequestToOpenAI(modelName, rawJSON, stream) }