58 lines
3.2 KiB
Go
58 lines
3.2 KiB
Go
// Package geminiCLI provides response translation functionality for Claude Code to Gemini CLI API compatibility.
|
|
// This package handles the conversion of Claude Code API responses into Gemini CLI-compatible
|
|
// JSON format, transforming streaming events and non-streaming responses into the format
|
|
// expected by Gemini CLI API clients.
|
|
package geminiCLI
|
|
|
|
import (
|
|
"context"
|
|
|
|
. "github.com/router-for-me/CLIProxyAPI/v6/internal/translator/claude/gemini"
|
|
translatorcommon "github.com/router-for-me/CLIProxyAPI/v6/internal/translator/common"
|
|
)
|
|
|
|
// ConvertClaudeResponseToGeminiCLI converts Claude Code streaming response format to Gemini CLI format.
|
|
// This function processes various Claude Code event types and transforms them into Gemini-compatible JSON responses.
|
|
// It handles text content, tool calls, and usage metadata, outputting responses that match the Gemini CLI API format.
|
|
// The function wraps each converted response in a "response" object to match the Gemini CLI API structure.
|
|
//
|
|
// Parameters:
|
|
// - ctx: The context for the request, used for cancellation and timeout handling
|
|
// - modelName: The name of the model being used for the response
|
|
// - rawJSON: The raw JSON response from the Claude Code API
|
|
// - param: A pointer to a parameter object for maintaining state between calls
|
|
//
|
|
// Returns:
|
|
// - [][]byte: A slice of Gemini-compatible JSON responses wrapped in a response object
|
|
func ConvertClaudeResponseToGeminiCLI(ctx context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) [][]byte {
|
|
outputs := ConvertClaudeResponseToGemini(ctx, modelName, originalRequestRawJSON, requestRawJSON, rawJSON, param)
|
|
// Wrap each converted response in a "response" object to match Gemini CLI API structure
|
|
newOutputs := make([][]byte, 0, len(outputs))
|
|
for i := 0; i < len(outputs); i++ {
|
|
newOutputs = append(newOutputs, translatorcommon.WrapGeminiCLIResponse(outputs[i]))
|
|
}
|
|
return newOutputs
|
|
}
|
|
|
|
// ConvertClaudeResponseToGeminiCLINonStream converts a non-streaming Claude Code response to a non-streaming Gemini CLI response.
|
|
// This function processes the complete Claude Code response and transforms it into a single Gemini-compatible
|
|
// JSON response. It wraps the converted response in a "response" object to match the Gemini CLI API structure.
|
|
//
|
|
// Parameters:
|
|
// - ctx: The context for the request, used for cancellation and timeout handling
|
|
// - modelName: The name of the model being used for the response
|
|
// - rawJSON: The raw JSON response from the Claude Code API
|
|
// - param: A pointer to a parameter object for the conversion
|
|
//
|
|
// Returns:
|
|
// - []byte: A Gemini-compatible JSON response wrapped in a response object
|
|
func ConvertClaudeResponseToGeminiCLINonStream(ctx context.Context, modelName string, originalRequestRawJSON, requestRawJSON, rawJSON []byte, param *any) []byte {
|
|
out := ConvertClaudeResponseToGeminiNonStream(ctx, modelName, originalRequestRawJSON, requestRawJSON, rawJSON, param)
|
|
// Wrap the converted response in a "response" object to match Gemini CLI API structure
|
|
return translatorcommon.WrapGeminiCLIResponse(out)
|
|
}
|
|
|
|
func GeminiCLITokenCount(ctx context.Context, count int64) []byte {
|
|
return GeminiTokenCount(ctx, count)
|
|
}
|