fix: add root Codex models alias

This commit is contained in:
wucm667
2026-07-14 17:16:24 +08:00
parent da85cc7e47
commit 806bb23053
4 changed files with 18 additions and 11 deletions
+9 -7
View File
@@ -42,6 +42,13 @@ func RegisterGatewayRoutes(
isOpenAIGatewayPlatform := func(c *gin.Context) bool {
return getGroupPlatform(c) == service.PlatformOpenAI
}
modelsHandler := func(c *gin.Context) {
if isOpenAIGatewayPlatform(c) && c.Query("client_version") != "" {
h.OpenAIGateway.CodexModels(c)
return
}
h.Gateway.Models(c)
}
imagesHandler := func(c *gin.Context) {
switch getGroupPlatform(c) {
case service.PlatformOpenAI:
@@ -140,13 +147,7 @@ func RegisterGatewayRoutes(
// Codex CLI / Codex app refresh their model picker from the provider's
// /models endpoint with a client_version query and expect the ChatGPT
// Codex manifest format; other clients keep the OpenAI-style list.
gateway.GET("/models", func(c *gin.Context) {
if isOpenAIGatewayPlatform(c) && c.Query("client_version") != "" {
h.OpenAIGateway.CodexModels(c)
return
}
h.Gateway.Models(c)
})
gateway.GET("/models", modelsHandler)
gateway.GET("/usage", h.Gateway.Usage)
// OpenAI Responses API: auto-route based on group platform
gateway.POST("/responses", func(c *gin.Context) {
@@ -235,6 +236,7 @@ func RegisterGatewayRoutes(
r.GET("/responses", bodyLimit, clientRequestID, opsErrorLogger, endpointNorm, gin.HandlerFunc(apiKeyAuth), requireGroupAnthropic, func(c *gin.Context) {
h.OpenAIGateway.ResponsesWebSocket(c)
})
r.GET("/models", bodyLimit, clientRequestID, opsErrorLogger, endpointNorm, gin.HandlerFunc(apiKeyAuth), requireGroupAnthropic, modelsHandler)
codexDirect := r.Group("/backend-api/codex")
codexDirect.Use(bodyLimit, clientRequestID, opsErrorLogger, endpointNorm, gin.HandlerFunc(apiKeyAuth), requireGroupAnthropic)
{
@@ -10,13 +10,15 @@ import (
func TestGatewayRoutesCodexModelsManifestPathIsRegistered(t *testing.T) {
router := newGatewayRoutesTestRouter()
registered := make(map[string]bool)
registered := make(map[string]string)
for _, route := range router.Routes() {
if route.Method == http.MethodGet {
registered[route.Path] = true
registered[route.Path] = route.Handler
}
}
require.True(t, registered["/backend-api/codex/models"], "GET /backend-api/codex/models should be registered")
require.True(t, registered["/v1/models"], "GET /v1/models should be registered")
require.NotEmpty(t, registered["/backend-api/codex/models"], "GET /backend-api/codex/models should be registered")
require.NotEmpty(t, registered["/v1/models"], "GET /v1/models should be registered")
require.NotEmpty(t, registered["/models"], "GET /models should be registered")
require.Equal(t, registered["/v1/models"], registered["/models"], "root alias should use the same platform-aware handler")
}
+1
View File
@@ -310,6 +310,7 @@ func shouldBypassEmbeddedFrontend(path string) bool {
strings.HasPrefix(trimmed, "/antigravity/") ||
strings.HasPrefix(trimmed, "/setup/") ||
trimmed == "/health" ||
trimmed == "/models" ||
trimmed == "/responses" ||
strings.HasPrefix(trimmed, "/responses/") ||
trimmed == "/alpha/search" ||
+2
View File
@@ -451,6 +451,7 @@ func TestFrontendServer_Middleware(t *testing.T) {
apiPaths := []string{
"/api/v1/users",
"/models",
"/v1/models",
"/v1beta/chat",
"/backend-api/codex/responses",
@@ -692,6 +693,7 @@ func TestServeEmbeddedFrontend(t *testing.T) {
apiPaths := []string{
"/api/users",
"/models",
"/v1/models",
"/v1beta/chat",
"/backend-api/codex/responses",