Files
tbphp 311c388c3a fix(groups): add missing gateway protocol probes (#673)
* fix(groups): add missing gateway protocol probes

* fix(groups): avoid typed gateway probe cancellation races

* fix(probes): validate gateway response array elements

* fix(probes): validate required native response payloads

* fix(probes): enforce exclusive Gemini part payloads
2026-09-17 16:24:24 +08:00

55 lines
2.5 KiB
Go

package modules
import (
"gpt-load/internal/channel/spec"
"gpt-load/internal/execution"
"gpt-load/internal/protocol"
)
func CLIProxyAPI() spec.Module {
return spec.Module{
Definition: spec.Definition{
ResponsesWebsocket: execution.WebsocketCapabilities{Native: true, Continuation: true, Prewarm: true, StoredResponses: false, Multiplex: false},
ID: spec.CLIProxyAPI,
Name: "CLIProxyAPI",
Mark: "CPA",
Icon: "cpa",
SearchTerms: []string{"cpa", "cli proxy api"},
Description: "CLIProxyAPI multi-protocol gateway",
Connection: spec.Connection{
Type: spec.ConnectionAPIKey,
CredentialInput: "batch_text",
},
Params: []spec.Field{{
Key: "base_url", Label: "Base URL", InputKind: spec.InputURL,
Required: true, Normalizer: spec.NormalizeBaseURL,
}},
Credentials: []spec.Field{{
Key: "api_key", Label: "API Key", InputKind: spec.InputSecret,
Required: true, Sensitive: true, Normalizer: spec.NormalizeNonEmpty,
}},
Provider: spec.ProviderBinding{
ProviderKind: spec.ProviderMultiProtocolGateway,
EndpointPolicy: spec.EndpointRequiredBaseURL,
},
Routes: []spec.Route{
spec.NewRoute(protocol.OpenAICompletions, execution.OperationChatCompletion, execution.RouteNative),
spec.NewRoute(protocol.OpenAICompletions, execution.OperationListModels, execution.RouteNative),
spec.NewRoute(protocol.OpenAICompletions, execution.OperationProbe, execution.RouteNative),
spec.NewResponsesCreateRoute(execution.RouteNative, spec.ResponsesStoreHandlingUpstreamManaged),
spec.NewRoute(protocol.OpenAIResponses, execution.OperationProbe, execution.RouteNative),
spec.NewRoute(protocol.OpenAIResponses, execution.OperationResponsesCompact, execution.RouteNative),
spec.NewRoute(protocol.OpenAIImages, execution.OperationImagesGenerate, execution.RouteNative),
spec.NewRoute(protocol.OpenAIImages, execution.OperationImagesEdit, execution.RouteNative),
spec.NewRoute(protocol.Anthropic, execution.OperationChatCompletion, execution.RouteNative),
spec.NewRoute(protocol.Anthropic, execution.OperationProbe, execution.RouteNative),
spec.NewRoute(protocol.Anthropic, execution.OperationCountTokens, execution.RouteNative),
spec.NewRoute(protocol.Gemini, execution.OperationChatCompletion, execution.RouteNative),
spec.NewRoute(protocol.Gemini, execution.OperationProbe, execution.RouteNative),
spec.NewRoute(protocol.Gemini, execution.OperationCountTokens, execution.RouteNative),
},
},
}
}