AI Gateway modelPool save rejects new ownedBy values such as "spacexai"
Describe the bug
Saving an AI Gateway model into the admin model pool returns HTTP 400 validation_error when ownedBy is a provider slug that exists in the current Vercel AI Gateway catalog but is not in Teable's closed GatewayModelProviderValues enum.
The catalog fetch UI can still list the model. The failure happens only on save.
Example: Vercel AI Gateway currently publishes spacexai/grok-4.5 with owned_by: "spacexai". Teable's schema still lists xai and does not list spacexai.
tags already accept any non-empty string "for forward compatibility". ownedBy does not.
To Reproduce
- Open Admin -> AI setting -> model pool (AI Gateway).
- Add a catalog model whose
owned_byis not inGatewayModelProviderValues, for examplespacexai/grok-4.5. - Save.
The browser sends a payload of this shape:
{
"section": "modelPool",
"patch": {
"gatewayModels": [
{
"id": "spacexai/grok-4.5",
"label": "Grok 4.5",
"enabled": true,
"ownedBy": "spacexai",
"modelType": "language"
}
]
}
}Expected behavior
Saving a model returned by the Gateway catalog should succeed. Unknown ownedBy values should be treated as metadata, same as tags, or the enum should stay in sync with the catalog.
Actual behavior
{
"message": "Validation error: Invalid option: expected one of \"alibaba\"|\"amazon\"|\"anthropic\"|\"arcee-ai\"|\"bfl\"|\"bytedance\"|\"cohere\"|\"deepseek\"|\"google\"|\"inception\"|\"interfaze\"|\"kwaipilot\"|\"meituan\"|\"meta\"|\"minimax\"|\"mistral\"|\"moonshotai\"|\"morph\"|\"nvidia\"|\"openai\"|\"perplexity\"|\"prime-intellect\"|\"prodia\"|\"recraft\"|\"sakana\"|\"stealth\"|\"stepfun\"|\"vercel\"|\"voyage\"|\"xai\"|\"xiaomi\"|\"zai\" at \"patch.gatewayModels[0].ownedBy\"",
"status": 400,
"code": "validation_error"
}Client
- OS: macOS
- Browser: Chrome
- Version: 153
Platform
teable-deployment (Helm), app release.2026-09-11T07-36-49Z.3059
Additional context
Code:
packages/openapi/src/admin/setting/gateway-model.ts(GatewayModelProviderValues,gatewayModelSchema.ownedBy)apps/nextjs-app/src/features/app/blocks/admin/setting/components/ai-config/GatewayModelsStep.tsxcopiesapiModel.ownedByinto the save payloadpackages/openapi/src/admin/setting/gateway-model.spec.tsalready tests adding newly-appeared registry providers
Public catalog: https://ai-gateway.vercel.sh/v1/models
Current catalog owned_by values missing from Teable's enum include at least: spacexai, tencent, inclusionai, fish-audio, klingai, poolside, quiverai, thinkingmachines.
Teable still lists xai, which is no longer present in the current catalog.
Source: teableio/teable