diff --git a/backend/internal/server/routes/gateway.go b/backend/internal/server/routes/gateway.go index 6d99d2c7e..0d35a7a48 100644 --- a/backend/internal/server/routes/gateway.go +++ b/backend/internal/server/routes/gateway.go @@ -93,7 +93,10 @@ func RegisterGatewayRoutes( } } videoGenerationHandler := func(c *gin.Context) { - if getGroupPlatform(c) == service.PlatformGrok { + // Video status/content lookups below already allow Composite groups; keep + // task creation aligned so composite keys that route to Grok accounts can + // submit video generation jobs. + if platform := getGroupPlatform(c); platform == service.PlatformGrok || platform == service.PlatformComposite { h.OpenAIGateway.GrokVideoGeneration(c) return } diff --git a/backend/internal/server/routes/gateway_test.go b/backend/internal/server/routes/gateway_test.go index ded7bd298..7fb127ccc 100644 --- a/backend/internal/server/routes/gateway_test.go +++ b/backend/internal/server/routes/gateway_test.go @@ -345,6 +345,18 @@ func TestGatewayRoutesNonGrokVideosAreRejectedAtPlatformGate(t *testing.T) { } } +func TestGatewayRoutesCompositeVideoGenerationAllowed(t *testing.T) { + router := newGatewayRoutesTestRouter(service.PlatformComposite) + + req := httptest.NewRequest(http.MethodPost, "/v1/videos/generations", strings.NewReader(`{"model":"grok-imagine-video-1.5","prompt":"waves"}`)) + req.Header.Set("Content-Type", "application/json") + w := httptest.NewRecorder() + + router.ServeHTTP(w, req) + require.NotEqual(t, http.StatusNotFound, w.Code) + require.NotContains(t, w.Body.String(), "not supported") +} + func TestGatewayRoutesCompositeOpenAIOnlyEndpointsRequireOpenAITarget(t *testing.T) { router := newGatewayRoutesTestRouter(service.PlatformComposite)