feat: publish sanitized custom.97 source

This commit is contained in:
cneicy committed 2026-10-27 20:43:39 +08:00
1 parent 8e6ed0317b
commit 86c0276156
1022 files changed
+69903 -19207

No files matched your search

+22 -35
View File
@@ -68,9 +68,9 @@ var (
const (
requestConverterClaudeToGemini = "claude_messages_to_gemini_generate_content"
requestConverterClaudeToResponses = "claude_messages_to_openai_responses"
requestConverterClaudeToResponses = ConverterClaudeMessagesToOpenAIResponses
requestConverterGeminiToClaude = "gemini_generate_content_to_claude_messages"
requestConverterGeminiToResponses = "gemini_generate_content_to_openai_responses"
requestConverterGeminiToResponses = ConverterGeminiContentToOpenAIResponses
requestConverterResponsesToClaude = ConverterOpenAIResponsesToClaudeMessages
)
@@ -84,6 +84,8 @@ const (
ConverterOpenAIResponsesToGemini = "openai_responses_to_gemini_generate_content"
ConverterGeminiContentToOpenAIChat = "gemini_generate_content_to_openai_chat_completions"
ConverterOpenAIChatToGeminiContent = "openai_chat_completions_to_gemini_generate_content"
ConverterClaudeMessagesToOpenAIResponses = "claude_messages_to_openai_responses"
ConverterGeminiContentToOpenAIResponses = "gemini_generate_content_to_openai_responses"
)
func registerBuiltinRequestConverter(spec RequestConverterSpec) {
@@ -247,11 +249,6 @@ func executeRequestSteps(c context.Context, info convmeta.Meta, from types.Relay
}
steps := make([]RequestStep, 0, len(specs))
for _, spec := range specs {
current, err = prepareRequestForStep(current, spec, target)
if err != nil {
return nil, err
}
var step RequestStep
current, step, err = executeRequestStep(c, info, spec, current)
if err != nil {
@@ -260,6 +257,7 @@ func executeRequestSteps(c context.Context, info convmeta.Meta, from types.Relay
steps = append(steps, step)
}
tools.Model = convmeta.UpstreamModelName(info)
current, toolDiagnostics, err := toolconv.AttachRequest(target, current, tools, convmeta.OptionsOf(info))
diagnostics := append(diagnosticCollector.Diagnostics(), toolDiagnostics...)
for i := range diagnostics {
@@ -284,6 +282,9 @@ func executeRequestSteps(c context.Context, info convmeta.Meta, from types.Relay
for _, step := range steps {
info.AppendRequestConversion(step.To)
}
if from == types.RelayFormatOpenAIResponses {
info.SetResponsesToolState(responsesToolState(tools))
}
}
converters := make([]string, 0, len(steps))
@@ -304,6 +305,19 @@ func executeRequestSteps(c context.Context, info convmeta.Meta, from types.Relay
}, nil
}
// responsesToolState records which Responses custom tools were sent upstream
// as functions and which tool names were flattened from namespaces, so the
// response side can restore their calls. It returns nil when there is nothing
// to restore so a retry never reuses another attempt's record.
func responsesToolState(tools toolconv.Set) *convmeta.ResponsesToolState {
names := toolconv.ResponsesCustomToolNames(tools)
namespaces := toolconv.ResponsesToolNamespaces(tools)
if len(names) == 0 && len(namespaces) == 0 {
return nil
}
return &convmeta.ResponsesToolState{CustomToolNames: names, Namespaces: namespaces}
}
func expandRequestConverterSteps(spec RequestConverterSpec) ([]RequestConverterSpec, error) {
if len(spec.StepConverters) == 0 {
if spec.Convert == nil {
@@ -353,28 +367,6 @@ func executeRequestStep(c context.Context, info convmeta.Meta, spec RequestConve
}, nil
}
func prepareRequestForStep(request any, spec RequestConverterSpec, finalTarget types.RelayFormat) (any, error) {
if spec.From != types.RelayFormatOpenAIResponses || finalTarget != types.RelayFormatGemini {
return request, nil
}
responsesRequest, ok := request.(*dto.OpenAIResponsesRequest)
if !ok {
if value, ok := request.(dto.OpenAIResponsesRequest); ok {
responsesRequest = &value
}
}
if responsesRequest == nil {
return nil, fmt.Errorf("expected OpenAI responses request, got %T", request)
}
prepared, err := oairesponses.PrepareOpenAIResponsesRequest(*responsesRequest)
if err != nil {
return nil, err
}
return &prepared, nil
}
func lookupRequestRoute(from types.RelayFormat, to types.RelayFormat) (RequestConverterSpec, bool) {
requestConverterMu.RLock()
defer requestConverterMu.RUnlock()
@@ -521,12 +513,7 @@ func convertOpenAIResponsesRequestToGeminiChat(c context.Context, info convmeta.
if err != nil {
return nil, err
}
prepared, err := oairesponses.PrepareOpenAIResponsesRequest(*responsesRequest)
if err != nil {
return nil, err
}
return oairesponses.OpenAIResponsesRequestToGeminiChat(c, &prepared, info)
return oairesponses.OpenAIResponsesRequestToGeminiChat(c, responsesRequest, info)
}
func convertResponsesRequestToChat(c context.Context, _ convmeta.Meta, request any) (any, error) {