mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-09-01 15:02:58 +08:00
fix(openai-ws): allow http_bridge accounts in ws ingress selection
(cherry picked from commit f0d215ec522e05043f5012a5f1e7aba2bfb57fcc) (cherry picked from commit 7b14846a65e16570cb7b472b0ed06c6dcb190e0d)
This commit is contained in:
@@ -1348,7 +1348,7 @@ func (h *OpenAIGatewayHandler) ResponsesWebSocket(c *gin.Context) {
|
||||
|
||||
subscription, _ := middleware2.GetSubscriptionFromContext(c)
|
||||
requestPlatform := openAICompatibleRequestPlatform(apiKey)
|
||||
requiredTransport := service.OpenAIUpstreamTransportResponsesWebsocketV2
|
||||
requiredTransport := service.OpenAIUpstreamTransportResponsesWebsocketV2Ingress
|
||||
if requestPlatform == service.PlatformGrok {
|
||||
requiredTransport = service.OpenAIUpstreamTransportHTTPSSE
|
||||
}
|
||||
|
||||
@@ -1396,6 +1396,18 @@ func (s *OpenAIGatewayService) isOpenAIAccountTransportCompatible(account *Accou
|
||||
if s == nil || account == nil {
|
||||
return false
|
||||
}
|
||||
if requiredTransport == OpenAIUpstreamTransportResponsesWebsocketV2Ingress {
|
||||
if s.cfg == nil || !s.cfg.Gateway.OpenAIWS.ModeRouterV2Enabled {
|
||||
return s.getOpenAIWSProtocolResolver().Resolve(account).Transport == OpenAIUpstreamTransportResponsesWebsocketV2
|
||||
}
|
||||
mode := account.ResolveOpenAIResponsesWebSocketV2Mode(s.cfg.Gateway.OpenAIWS.IngressModeDefault)
|
||||
switch mode {
|
||||
case OpenAIWSIngressModeCtxPool, OpenAIWSIngressModePassthrough, OpenAIWSIngressModeHTTPBridge, OpenAIWSIngressModeShared, OpenAIWSIngressModeDedicated:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
return s.getOpenAIWSProtocolResolver().Resolve(account).Transport == requiredTransport
|
||||
}
|
||||
|
||||
|
||||
@@ -2391,6 +2391,7 @@ func TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches(t *
|
||||
require.True(t, scheduler.isAccountTransportCompatible(nil, OpenAIUpstreamTransportAny))
|
||||
require.True(t, scheduler.isAccountTransportCompatible(nil, OpenAIUpstreamTransportHTTPSSE))
|
||||
require.False(t, scheduler.isAccountTransportCompatible(nil, OpenAIUpstreamTransportResponsesWebsocketV2))
|
||||
require.False(t, scheduler.isAccountTransportCompatible(nil, OpenAIUpstreamTransportResponsesWebsocketV2Ingress))
|
||||
|
||||
cfg := newSchedulerTestOpenAIWSV2Config()
|
||||
scheduler.service = &OpenAIGatewayService{cfg: cfg}
|
||||
@@ -2406,10 +2407,15 @@ func TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches(t *
|
||||
},
|
||||
}
|
||||
require.True(t, scheduler.isAccountTransportCompatible(account, OpenAIUpstreamTransportResponsesWebsocketV2))
|
||||
require.True(t, scheduler.isAccountTransportCompatible(account, OpenAIUpstreamTransportResponsesWebsocketV2Ingress))
|
||||
|
||||
cfg.Gateway.OpenAIWS.ModeRouterV2Enabled = true
|
||||
account.Extra["openai_apikey_responses_websockets_v2_mode"] = OpenAIWSIngressModeHTTPBridge
|
||||
require.False(t, scheduler.isAccountTransportCompatible(account, OpenAIUpstreamTransportResponsesWebsocketV2))
|
||||
require.True(t, scheduler.isAccountTransportCompatible(account, OpenAIUpstreamTransportResponsesWebsocketV2Ingress))
|
||||
|
||||
account.Extra["openai_apikey_responses_websockets_v2_mode"] = OpenAIWSIngressModeOff
|
||||
require.False(t, scheduler.isAccountTransportCompatible(account, OpenAIUpstreamTransportResponsesWebsocketV2Ingress))
|
||||
}
|
||||
|
||||
func int64PtrForTest(v int64) *int64 {
|
||||
|
||||
@@ -10,6 +10,9 @@ const (
|
||||
OpenAIUpstreamTransportHTTPSSE OpenAIUpstreamTransport = "http_sse"
|
||||
OpenAIUpstreamTransportResponsesWebsocket OpenAIUpstreamTransport = "responses_websockets"
|
||||
OpenAIUpstreamTransportResponsesWebsocketV2 OpenAIUpstreamTransport = "responses_websockets_v2"
|
||||
// OpenAIUpstreamTransportResponsesWebsocketV2Ingress 用于 WS ingress 入口选账号:
|
||||
// mode_router_v2 开启时允许 ctx_pool/passthrough/http_bridge,拒绝 off。
|
||||
OpenAIUpstreamTransportResponsesWebsocketV2Ingress OpenAIUpstreamTransport = "responses_websockets_v2_ingress"
|
||||
)
|
||||
|
||||
// OpenAIWSProtocolDecision 表示协议决策结果。
|
||||
|
||||
Reference in New Issue
Block a user