#3643·teable

AI Gateway modelPool save rejects new ownedBy values such as "spacexai"

Author: StringKeCreated Sep 11, 2026Updated Sep 11, 2026

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

  1. Open Admin -> AI setting -> model pool (AI Gateway).
  2. Add a catalog model whose owned_by is not in GatewayModelProviderValues, for example spacexai/grok-4.5.
  3. Save.

The browser sends a payload of this shape:

json
{
  "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

json
{
  "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.tsx copies apiModel.ownedBy into the save payload
  • packages/openapi/src/admin/setting/gateway-model.spec.ts already 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.