@celigo/api-specs 0.2.182 → 0.2.183

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-agent.yml CHANGED
@@ -27,6 +27,15 @@ tags:
27
27
  providers — Mistral, xAI, Hugging Face, DeepSeek, Cohere, and Groq — use one generic
28
28
  flat configuration format and always run on a BYOK connection.
29
29
 
30
+ Every model carries a lifecycle in the platform's model catalog (`active`,
31
+ `deprecated`, `retired`, plus an availability switch). The save and every run
32
+ refuse a model that is not in the catalog, switched off, not offered for the
33
+ agent's credential type, or retired; a deprecated model keeps working until its
34
+ retirement date. With a `_connectionId` (BYOK), a model the catalog does not
35
+ list is passed through to the vendor as-is, while a catalog-listed model remains
36
+ governed. `GET /v1/aiagents/aiModelHealth` lists the agents and guardrails that
37
+ need attention.
38
+
30
39
  ## AI agent schema
31
40
 
32
41
  {% openapi-schemas spec="ai-agent" schemas="AiAgent" grouped="true" %}
@@ -742,6 +751,194 @@ paths:
742
751
  description: '`Content-Type: application/json` header is missing.'
743
752
  '422':
744
753
  $ref: '#/components/responses/422-unprocessable-entity'
754
+ /v1/aiagents/aiModelHealth:
755
+ get:
756
+ x-internal: false
757
+ operationId: listAiModelHealth
758
+ tags:
759
+ - AI Agents
760
+ summary: List AI agents on affected models
761
+ description: |-
762
+ Returns the AI agent and guardrail imports the caller can read whose configured
763
+ model is refused (not in the catalog, switched off, not offered for the import's
764
+ credential type, or retired) or deprecated. Healthy imports and imports in the
765
+ recycle bin are omitted; production and sandbox copies both appear. Computed
766
+ fresh on every call; no query parameters.
767
+
768
+ A model the catalog does not list is reported only for imports on
769
+ platform-managed credentials — with a `_connectionId` (BYOK) such a model is
770
+ passed through to the vendor and never listed; a catalog-listed BYOK model is
771
+ governed and can appear. An `error` entry is blocked on save and on run; a
772
+ `warning` entry is deprecated and keeps working until `lifecycle.retiredAt`.
773
+ Fix an entry by changing the import's model, usually to one of
774
+ `lifecycle.suggestedNextModels`.
775
+ responses:
776
+ '200':
777
+ description: Affected imports. `agents` is empty when every model is healthy.
778
+ content:
779
+ application/json:
780
+ schema:
781
+ $ref: '#/components/schemas/AiModelHealth'
782
+ examples:
783
+ healthy:
784
+ summary: Every model healthy
785
+ value:
786
+ agents: []
787
+ deprecated:
788
+ summary: One agent on a model retiring soon
789
+ value:
790
+ agents:
791
+ - _importId: 6ad764e00d32aa4416a1e9d5
792
+ modelId: gpt-4.1-nano
793
+ provider: openai
794
+ severity: warning
795
+ displayName: gpt-4.1-nano
796
+ lifecycle:
797
+ status: deprecated
798
+ deprecatedAt: '2026-04-22'
799
+ retiredAt: '2026-10-23'
800
+ suggestedNextModels:
801
+ - gpt-5.6-luna
802
+ retired:
803
+ summary: The same agent once its retirement date has passed — `status` still reads `deprecated`, the entry is an error
804
+ value:
805
+ agents:
806
+ - _importId: 6ad764e00d32aa4416a1e9d5
807
+ modelId: gpt-4.1-nano
808
+ provider: openai
809
+ severity: error
810
+ displayName: gpt-4.1-nano
811
+ code: ai_model_retired
812
+ lifecycle:
813
+ status: deprecated
814
+ deprecatedAt: '2026-04-22'
815
+ retiredAt: '2026-10-23'
816
+ suggestedNextModels:
817
+ - gpt-5.6-luna
818
+ '401':
819
+ $ref: '#/components/responses/401-unauthorized'
820
+ '403':
821
+ $ref: '#/components/responses/403-forbidden'
822
+ '502':
823
+ description: |-
824
+ The model catalog or the health computation was unavailable. The platform never
825
+ answers a fake-healthy `200` — retry later.
826
+ content:
827
+ application/json:
828
+ schema:
829
+ $ref: '#/components/schemas/Error'
830
+ examples:
831
+ default:
832
+ value:
833
+ errors:
834
+ - code: ai_model_health_unavailable
835
+ message: Model health could not be computed.
836
+ source: resource
837
+ /v1/integrations/{_integrationId}/aiModelHealth:
838
+ get:
839
+ x-internal: false
840
+ operationId: listIntegrationAiModelHealth
841
+ tags:
842
+ - AI Agents
843
+ summary: List an integration's affected AI agents
844
+ description: |-
845
+ Same rules as `GET /v1/aiagents/aiModelHealth`, then keeps only the imports a
846
+ live flow of this integration references (as a page processor, inside a router
847
+ branch, or as the flow's top-level import), each with the flows and
848
+ integrations that use it. Flows in the recycle bin and imports no flow uses are
849
+ dropped — an agent that is on an affected model but in no flow appears on the
850
+ account route only.
851
+
852
+ A parent Integration App includes its child integrations' flows; a child does
853
+ not include its parent or siblings.
854
+ parameters:
855
+ - name: _integrationId
856
+ in: path
857
+ required: true
858
+ description: The integration to scope to. A parent Integration App includes its children.
859
+ schema:
860
+ type: string
861
+ format: objectId
862
+ x-celigo-refModel: integrations
863
+ responses:
864
+ '200':
865
+ description: Affected imports referenced by the integration's live flows. `agents` is empty when every model is healthy.
866
+ content:
867
+ application/json:
868
+ schema:
869
+ $ref: '#/components/schemas/IntegrationAiModelHealth'
870
+ examples:
871
+ healthy:
872
+ summary: Every model healthy
873
+ value:
874
+ agents: []
875
+ deprecated:
876
+ summary: One agent on a model retiring soon, used by two flows of the integration
877
+ description: |-
878
+ The first flow references the import as a page processor, the second as its
879
+ top-level `_importId`; both are listed. The same import on the account route
880
+ carries no `_flowIds` or `_integrationIds`.
881
+ value:
882
+ agents:
883
+ - _importId: 6ad764e00d32aa4416a1e9d5
884
+ modelId: gpt-4.1-nano
885
+ provider: openai
886
+ severity: warning
887
+ displayName: gpt-4.1-nano
888
+ lifecycle:
889
+ status: deprecated
890
+ deprecatedAt: '2026-04-22'
891
+ retiredAt: '2026-10-23'
892
+ suggestedNextModels:
893
+ - gpt-5.6-luna
894
+ _flowIds:
895
+ - 6ada3adacbe134dabe31a5b2
896
+ - 6ada3ad8f4f545d98e142507
897
+ _integrationIds:
898
+ - 6ada3ad4f4f545d98e142445
899
+ '400':
900
+ description: The id is not a valid ObjectId.
901
+ content:
902
+ application/json:
903
+ schema:
904
+ $ref: '#/components/schemas/Error'
905
+ examples:
906
+ default:
907
+ value:
908
+ errors:
909
+ - code: invalid_ref
910
+ message: Please provide a valid _integrationId.
911
+ '401':
912
+ $ref: '#/components/responses/401-unauthorized'
913
+ '403':
914
+ $ref: '#/components/responses/403-forbidden'
915
+ '404':
916
+ description: No integration with this id is visible to the caller, or it is in the recycle bin.
917
+ content:
918
+ application/json:
919
+ schema:
920
+ $ref: '#/components/schemas/Error'
921
+ examples:
922
+ default:
923
+ value:
924
+ errors:
925
+ - code: invalid_ref
926
+ message: Integration not found.
927
+ '502':
928
+ description: |-
929
+ The model catalog or the health computation was unavailable. The platform never
930
+ answers a fake-healthy `200` — retry later.
931
+ content:
932
+ application/json:
933
+ schema:
934
+ $ref: '#/components/schemas/Error'
935
+ examples:
936
+ default:
937
+ value:
938
+ errors:
939
+ - code: ai_model_health_unavailable
940
+ message: Model health could not be computed.
941
+ source: resource
745
942
  components:
746
943
  securitySchemes:
747
944
  bearerAuth:
@@ -858,8 +1055,30 @@ components:
858
1055
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
859
1056
  credentials. Without one, built-in providers run on platform-managed
860
1057
  credentials; catalog providers have no platform-managed credentials, so the
861
- save requires one — without it the agent fails to save with 422
862
- `connection_required` on `_connectionId`.
1058
+ save requires one — without it the agent fails to save with 422 on
1059
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
1060
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
1061
+ catalog check answers before any `connection_required`).
1062
+
1063
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
1064
+ providers alike — carries a lifecycle in the platform's model catalog:
1065
+ `active`, `deprecated` (still usable; a retirement date and suggested
1066
+ replacement models may be published), or `retired`, plus an availability
1067
+ switch. The save and every run check the configured model against it: a
1068
+ model that is not in the catalog, switched off, not offered for the agent's
1069
+ credential type, or retired (by status, or once its retirement date has
1070
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
1071
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
1072
+ model field, the run with a `Run blocked:` error carrying the same code before
1073
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
1074
+ 2026". Please choose a supported model and test your agent configuration.` —
1075
+ the run-time message names the date only; the chat route streams it as an
1076
+ `error` event). A deprecated model saves and runs until its retirement date. The
1077
+ platform never substitutes a model: once a model is retired, every save of
1078
+ the agent is refused until the model changes. Agents and guardrails on
1079
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
1080
+ `_connectionId`, a model the catalog does not list is passed through to the
1081
+ vendor as-is; a catalog-listed model remains governed.
863
1082
  required:
864
1083
  - provider
865
1084
  properties:
@@ -896,11 +1115,13 @@ components:
896
1115
  generic flat format — `model` and `modelOptions` directly on this object,
897
1116
  never an `openai` or `litellm` block.
898
1117
  - |-
899
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
900
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
901
- key is available for provider 'xai'. Add a connection for this provider with your
902
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
903
- API (token auth) before saving a catalog-provider agent.
1118
+ Catalog providers are BYOK-only, and the save enforces it through the model
1119
+ catalog: without a `_connectionId` the agent fails to save with 422
1120
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
1121
+ supported. Please choose a supported model and test your agent
1122
+ configuration.") — the model is a catalog row that is not offered on
1123
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
1124
+ (token auth) before saving a catalog-provider agent.
904
1125
  model:
905
1126
  type: string
906
1127
  description: |-
@@ -912,11 +1133,15 @@ components:
912
1133
  Required for every catalog provider — omitting it or sending an empty string
913
1134
  fails the save with 422 `missing_required_field`.
914
1135
  - |-
915
- The connection is checked before the model: without a `_connectionId` on the
916
- parent import a catalog-provider agent fails to save with 422
917
- `connection_required` whatever the model string (an unknown id included).
918
- With a `_connectionId` (BYOK) any model string saves — the server does not
919
- check it against the catalog or the vendor.
1136
+ Without a `_connectionId` on the parent import the model check answers first:
1137
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
1138
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
1139
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
1140
+ the catalog does not list.
1141
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
1142
+ the server does not check it against the catalog or the vendor; a
1143
+ catalog-listed model is still governed by its lifecycle row (see the
1144
+ schema description — a retired or switched-off model is refused on save).
920
1145
  modelOptions:
921
1146
  type: object
922
1147
  description: |-
@@ -1117,11 +1342,23 @@ components:
1117
1342
  x-celigo-ai-guidance:
1118
1343
  - |-
1119
1344
  With platform-managed credentials (no `_connectionId` on the parent
1120
- import), the model must be one the platform hosts. The save does not
1121
- check this — an unlisted model saves, and the agent's first run fails
1122
- with 422 `invalid_model`, whose message lists the hosted models. A
1123
- BYOK connection bypasses the hosted list and the model string is
1124
- passed through to the provider as-is.
1345
+ import), the model must be a catalog row the platform offers on its own
1346
+ credentials. The save checks this — a model that is not in the catalog
1347
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
1348
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
1349
+ test your agent configuration."), and a dry-run answers the same
1350
+ `errors` with `valid: false`. A retired model is refused the same way with
1351
+ `ai_model_retired` — the message names the retirement date and, when any
1352
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
1353
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
1354
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
1355
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
1356
+ Never swap the model on the user's behalf — relay the message and let
1357
+ them choose.
1358
+ - |-
1359
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1360
+ through to the provider as-is; a catalog-listed model is still governed by
1361
+ its lifecycle row.
1125
1362
  reasoning:
1126
1363
  type: object
1127
1364
  description: Controls depth of reasoning for complex tasks.
@@ -1550,10 +1787,18 @@ components:
1550
1787
  x-celigo-ai-guidance:
1551
1788
  - |-
1552
1789
  With platform-managed credentials (no `_connectionId` on the parent
1553
- import), the model must be one the platform hosts for the provider —
1554
- Gemini and Anthropic Claude both have a hosted list. The save does not
1555
- check this — an unlisted model saves, and the agent's first run fails
1556
- with 422 `invalid_model`, whose message lists the hosted models.
1790
+ import), the model must be a catalog row the platform offers for the
1791
+ provider on its own credentials — Gemini and Anthropic Claude each have
1792
+ their own rows. The save checks this: a model that is not in the catalog
1793
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
1794
+ retired one with `ai_model_retired` (the message names the retirement
1795
+ date and, when any remain eligible, the suggested next models), a
1796
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
1797
+ swap the model on the user's behalf — relay the message and let them choose.
1798
+ - |-
1799
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1800
+ through to the provider as-is; a catalog-listed model is still governed by
1801
+ its lifecycle row.
1557
1802
  temperature:
1558
1803
  type: number
1559
1804
  minimum: 0
@@ -6613,6 +6858,147 @@ components:
6613
6858
  selects the BYOK connection the turn runs through.
6614
6859
  allOf:
6615
6860
  - $ref: '#/components/schemas/Request'
6861
+ AiModelLifecycle:
6862
+ type: object
6863
+ description: |-
6864
+ Lifecycle row of a catalog model, as the platform stores it. `status` is returned as
6865
+ stored — a `deprecated` model whose `retiredAt` has passed is treated as retired by the
6866
+ save and the run even though `status` still reads `deprecated`.
6867
+ required:
6868
+ - status
6869
+ properties:
6870
+ status:
6871
+ type: string
6872
+ enum:
6873
+ - active
6874
+ - deprecated
6875
+ - retired
6876
+ x-enumDescriptions:
6877
+ active: Offered with no warning
6878
+ deprecated: Still saves and runs; migrate before `retiredAt` when one is published
6879
+ retired: Refused on save and on run
6880
+ description: Stored lifecycle status of the model.
6881
+ deprecatedAt:
6882
+ type: string
6883
+ format: date
6884
+ description: Date the model was marked deprecated.
6885
+ retiredAt:
6886
+ type: string
6887
+ format: date
6888
+ description: |-
6889
+ Date from which the model is refused on save and on run, whatever `status` says.
6890
+ Absent when no retirement date has been published.
6891
+ suggestedNextModels:
6892
+ type: array
6893
+ description: |-
6894
+ Replacement model ids the platform recommends, already narrowed to models the
6895
+ agent could switch to with its current credential type (never the model itself,
6896
+ never a model that is itself refused). Absent when no eligible replacement remains.
6897
+ items:
6898
+ type: string
6899
+ AffectedAiAgent:
6900
+ type: object
6901
+ description: |-
6902
+ One AI agent or guardrail import whose configured model needs attention. One entry
6903
+ per import — two imports on the same model can differ in severity.
6904
+ required:
6905
+ - _importId
6906
+ - modelId
6907
+ - provider
6908
+ - severity
6909
+ properties:
6910
+ _importId:
6911
+ type: string
6912
+ format: objectId
6913
+ x-celigo-refModel: imports
6914
+ description: The AI agent (`AiAgentImport`) or guardrail (`GuardrailImport`) import.
6915
+ modelId:
6916
+ type: string
6917
+ description: Model id configured on the import.
6918
+ examples:
6919
+ - gpt-4.1-nano
6920
+ provider:
6921
+ type: string
6922
+ description: Provider the import is configured for.
6923
+ examples:
6924
+ - openai
6925
+ displayName:
6926
+ type: string
6927
+ description: Catalog display name of the model. Present for catalog-listed models only.
6928
+ severity:
6929
+ type: string
6930
+ enum:
6931
+ - error
6932
+ - warning
6933
+ x-enumDescriptions:
6934
+ error: The model is refused on save and on run; `code` says why
6935
+ warning: The model is deprecated — it still saves and runs; migrate before `lifecycle.retiredAt`
6936
+ description: Whether the import is blocked or only warned about.
6937
+ code:
6938
+ type: string
6939
+ enum:
6940
+ - ai_model_disabled
6941
+ - ai_model_not_available
6942
+ - ai_model_not_in_catalog
6943
+ - ai_model_retired
6944
+ x-enumDescriptions:
6945
+ ai_model_disabled: The model or its provider is switched off in the catalog
6946
+ ai_model_not_available: The model is not offered for the import's credential type (platform-managed or BYOK)
6947
+ ai_model_not_in_catalog: The model is not a catalog row and the import runs on platform-managed credentials
6948
+ ai_model_retired: The model is retired by status or by a passed `retiredAt`
6949
+ description: Reason the model is refused. Present on `error` entries only.
6950
+ lifecycle:
6951
+ $ref: '#/components/schemas/AiModelLifecycle'
6952
+ sandbox:
6953
+ type: boolean
6954
+ description: Present and true when the import is a sandbox document.
6955
+ AiModelHealth:
6956
+ type: object
6957
+ description: Imports on affected models across the account. Empty when every model is healthy.
6958
+ required:
6959
+ - agents
6960
+ properties:
6961
+ agents:
6962
+ type: array
6963
+ items:
6964
+ $ref: '#/components/schemas/AffectedAiAgent'
6965
+ AffectedAiAgentWithFlows:
6966
+ allOf:
6967
+ - $ref: '#/components/schemas/AffectedAiAgent'
6968
+ - type: object
6969
+ required:
6970
+ - _flowIds
6971
+ - _integrationIds
6972
+ properties:
6973
+ _flowIds:
6974
+ type: array
6975
+ description: |-
6976
+ Live flows of the integration that reference the import — as a page processor,
6977
+ inside a router branch, or as the flow's top-level `_importId`. Always present
6978
+ on this route, with at least one id: an import no live flow uses is not listed.
6979
+ items:
6980
+ type: string
6981
+ format: objectId
6982
+ x-celigo-refModel: flows
6983
+ _integrationIds:
6984
+ type: array
6985
+ description: |-
6986
+ Integrations of those flows. For a parent Integration App this can include
6987
+ child integration ids.
6988
+ items:
6989
+ type: string
6990
+ format: objectId
6991
+ x-celigo-refModel: integrations
6992
+ IntegrationAiModelHealth:
6993
+ type: object
6994
+ description: Imports on affected models referenced by the integration's live flows. Empty when every model is healthy.
6995
+ required:
6996
+ - agents
6997
+ properties:
6998
+ agents:
6999
+ type: array
7000
+ items:
7001
+ $ref: '#/components/schemas/AffectedAiAgentWithFlows'
6616
7002
  responses:
6617
7003
  400-bad-request:
6618
7004
  description: |
@@ -610,8 +610,30 @@ components:
610
610
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
611
611
  credentials. Without one, built-in providers run on platform-managed
612
612
  credentials; catalog providers have no platform-managed credentials, so the
613
- save requires one — without it the guardrail fails to save with 422
614
- `connection_required` on `_connectionId`.
613
+ save requires one — without it the guardrail fails to save with 422 on
614
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
615
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
616
+ catalog check answers before any `connection_required`).
617
+
618
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
619
+ the platform's model catalog: `active`, `deprecated` (still usable; a
620
+ retirement date and suggested replacement models may be published), or
621
+ `retired`, plus an availability switch. The save and every run of an
622
+ `ai_agent` guardrail check the configured model against it exactly as for an
623
+ AI agent import: a model that is not in the catalog, switched off, not offered
624
+ for the guardrail's credential type, or retired (by status, or once its
625
+ retirement date has passed) is refused — the save with 422
626
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
627
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
628
+ carrying the same code before any model call (`Run blocked: model
629
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
630
+ and test your agent configuration.` — the run-time message names the date
631
+ only). A deprecated model saves and runs until
632
+ its retirement date. The platform never substitutes a model: once a model is
633
+ retired, every save of the guardrail is refused until the model changes.
634
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
635
+ With a `_connectionId`, a model the catalog does not list is passed through to
636
+ the vendor as-is; a catalog-listed model remains governed.
615
637
  x-celigo-ai-guidance:
616
638
  - |-
617
639
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -654,11 +676,13 @@ components:
654
676
  generic flat format — `model` and `modelOptions` directly on this object,
655
677
  never an `openai` or `litellm` block.
656
678
  - |-
657
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
658
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
659
- API key is available for provider 'xai'. Add a connection for this provider with
660
- your API key and select it on this agent."). Attach an HTTP connection to the
661
- vendor's API (token auth) before saving a catalog-provider guardrail.
679
+ Catalog providers are BYOK-only, and the save enforces it through the model
680
+ catalog: without a `_connectionId` the guardrail fails to save with 422
681
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
682
+ not supported. Please choose a supported model and test your agent
683
+ configuration.") — the model is a catalog row that is not offered on
684
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
685
+ (token auth) before saving a catalog-provider guardrail.
662
686
  model:
663
687
  type: string
664
688
  description: |-
@@ -670,11 +694,15 @@ components:
670
694
  Required for every catalog provider — omitting it or sending an empty string
671
695
  fails the save with 422 `missing_required_field`.
672
696
  - |-
673
- The connection is checked before the model: without a `_connectionId` on the
674
- parent import a catalog-provider guardrail fails to save with 422
675
- `connection_required` whatever the model string (an unknown id included).
676
- With a `_connectionId` (BYOK) any model string saves — the server does not
677
- check it against the catalog or the vendor.
697
+ Without a `_connectionId` on the parent import the model check answers first:
698
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
699
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
700
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
701
+ the catalog does not list.
702
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
703
+ the server does not check it against the catalog or the vendor; a
704
+ catalog-listed model is still governed by its lifecycle row (see the
705
+ schema description — a retired or switched-off model is refused on save).
678
706
  modelOptions:
679
707
  type: object
680
708
  description: |-
@@ -820,11 +848,22 @@ components:
820
848
  x-celigo-ai-guidance:
821
849
  - |-
822
850
  With platform-managed credentials (no `_connectionId` on the parent
823
- import), the model must be one the platform hosts. The save does not
824
- check this — an unlisted model saves, and the guardrail's first run fails
825
- with 422 `invalid_model`, whose message lists the hosted models. A
826
- BYOK connection bypasses the hosted list and the model string is
827
- passed through to the provider as-is.
851
+ import), the model must be a catalog row the platform offers on its own
852
+ credentials. The save checks this — a model that is not in the catalog
853
+ fails with 422 `ai_model_not_in_catalog` on
854
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
855
+ Please choose a supported model and test your agent configuration."). A
856
+ retired model is refused the same way with `ai_model_retired` — the
857
+ message names the retirement date and, when any remain eligible, the
858
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
859
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
860
+ test and update your agent configuration.") — and so is a switched-off
861
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
862
+ model on the user's behalf — relay the message and let them choose.
863
+ - |-
864
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
865
+ through to the provider as-is; a catalog-listed model is still governed by
866
+ its lifecycle row.
828
867
  reasoning:
829
868
  type: object
830
869
  description: Controls depth of reasoning for complex tasks.
@@ -1092,10 +1131,19 @@ components:
1092
1131
  x-celigo-ai-guidance:
1093
1132
  - |-
1094
1133
  With platform-managed credentials (no `_connectionId` on the parent
1095
- import), the model must be one the platform hosts for the provider —
1096
- Gemini and Anthropic Claude both have a hosted list. The save does not
1097
- check this — an unlisted model saves, and the guardrail's first run fails
1098
- with 422 `invalid_model`, whose message lists the hosted models.
1134
+ import), the model must be a catalog row the platform offers for the
1135
+ provider on its own credentials — Gemini and Anthropic Claude each have
1136
+ their own rows. The save checks this: a model that is not in the catalog
1137
+ fails with 422 `ai_model_not_in_catalog` on
1138
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
1139
+ (the message names the retirement date and, when any remain eligible, the
1140
+ suggested next models), a switched-off one with `ai_model_disabled`; a
1141
+ deprecated model saves. Never
1142
+ swap the model on the user's behalf — relay the message and let them choose.
1143
+ - |-
1144
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
1145
+ through to the provider as-is; a catalog-listed model is still governed by
1146
+ its lifecycle row.
1099
1147
  temperature:
1100
1148
  type: number
1101
1149
  minimum: 0
package/dist/import.yml CHANGED
@@ -9348,8 +9348,30 @@ components:
9348
9348
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
9349
9349
  credentials. Without one, built-in providers run on platform-managed
9350
9350
  credentials; catalog providers have no platform-managed credentials, so the
9351
- save requires one — without it the agent fails to save with 422
9352
- `connection_required` on `_connectionId`.
9351
+ save requires one — without it the agent fails to save with 422 on
9352
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
9353
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
9354
+ catalog check answers before any `connection_required`).
9355
+
9356
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
9357
+ providers alike — carries a lifecycle in the platform's model catalog:
9358
+ `active`, `deprecated` (still usable; a retirement date and suggested
9359
+ replacement models may be published), or `retired`, plus an availability
9360
+ switch. The save and every run check the configured model against it: a
9361
+ model that is not in the catalog, switched off, not offered for the agent's
9362
+ credential type, or retired (by status, or once its retirement date has
9363
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
9364
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
9365
+ model field, the run with a `Run blocked:` error carrying the same code before
9366
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
9367
+ 2026". Please choose a supported model and test your agent configuration.` —
9368
+ the run-time message names the date only; the chat route streams it as an
9369
+ `error` event). A deprecated model saves and runs until its retirement date. The
9370
+ platform never substitutes a model: once a model is retired, every save of
9371
+ the agent is refused until the model changes. Agents and guardrails on
9372
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
9373
+ `_connectionId`, a model the catalog does not list is passed through to the
9374
+ vendor as-is; a catalog-listed model remains governed.
9353
9375
  required:
9354
9376
  - provider
9355
9377
  properties:
@@ -9386,11 +9408,13 @@ components:
9386
9408
  generic flat format — `model` and `modelOptions` directly on this object,
9387
9409
  never an `openai` or `litellm` block.
9388
9410
  - |-
9389
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
9390
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
9391
- key is available for provider 'xai'. Add a connection for this provider with your
9392
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
9393
- API (token auth) before saving a catalog-provider agent.
9411
+ Catalog providers are BYOK-only, and the save enforces it through the model
9412
+ catalog: without a `_connectionId` the agent fails to save with 422
9413
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
9414
+ supported. Please choose a supported model and test your agent
9415
+ configuration.") — the model is a catalog row that is not offered on
9416
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
9417
+ (token auth) before saving a catalog-provider agent.
9394
9418
  model:
9395
9419
  type: string
9396
9420
  description: |-
@@ -9402,11 +9426,15 @@ components:
9402
9426
  Required for every catalog provider — omitting it or sending an empty string
9403
9427
  fails the save with 422 `missing_required_field`.
9404
9428
  - |-
9405
- The connection is checked before the model: without a `_connectionId` on the
9406
- parent import a catalog-provider agent fails to save with 422
9407
- `connection_required` whatever the model string (an unknown id included).
9408
- With a `_connectionId` (BYOK) any model string saves — the server does not
9409
- check it against the catalog or the vendor.
9429
+ Without a `_connectionId` on the parent import the model check answers first:
9430
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
9431
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
9432
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
9433
+ the catalog does not list.
9434
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
9435
+ the server does not check it against the catalog or the vendor; a
9436
+ catalog-listed model is still governed by its lifecycle row (see the
9437
+ schema description — a retired or switched-off model is refused on save).
9410
9438
  modelOptions:
9411
9439
  type: object
9412
9440
  description: |-
@@ -9607,11 +9635,23 @@ components:
9607
9635
  x-celigo-ai-guidance:
9608
9636
  - |-
9609
9637
  With platform-managed credentials (no `_connectionId` on the parent
9610
- import), the model must be one the platform hosts. The save does not
9611
- check this — an unlisted model saves, and the agent's first run fails
9612
- with 422 `invalid_model`, whose message lists the hosted models. A
9613
- BYOK connection bypasses the hosted list and the model string is
9614
- passed through to the provider as-is.
9638
+ import), the model must be a catalog row the platform offers on its own
9639
+ credentials. The save checks this — a model that is not in the catalog
9640
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
9641
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
9642
+ test your agent configuration."), and a dry-run answers the same
9643
+ `errors` with `valid: false`. A retired model is refused the same way with
9644
+ `ai_model_retired` — the message names the retirement date and, when any
9645
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
9646
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
9647
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
9648
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
9649
+ Never swap the model on the user's behalf — relay the message and let
9650
+ them choose.
9651
+ - |-
9652
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
9653
+ through to the provider as-is; a catalog-listed model is still governed by
9654
+ its lifecycle row.
9615
9655
  reasoning:
9616
9656
  type: object
9617
9657
  description: Controls depth of reasoning for complex tasks.
@@ -10040,10 +10080,18 @@ components:
10040
10080
  x-celigo-ai-guidance:
10041
10081
  - |-
10042
10082
  With platform-managed credentials (no `_connectionId` on the parent
10043
- import), the model must be one the platform hosts for the provider —
10044
- Gemini and Anthropic Claude both have a hosted list. The save does not
10045
- check this — an unlisted model saves, and the agent's first run fails
10046
- with 422 `invalid_model`, whose message lists the hosted models.
10083
+ import), the model must be a catalog row the platform offers for the
10084
+ provider on its own credentials — Gemini and Anthropic Claude each have
10085
+ their own rows. The save checks this: a model that is not in the catalog
10086
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
10087
+ retired one with `ai_model_retired` (the message names the retirement
10088
+ date and, when any remain eligible, the suggested next models), a
10089
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
10090
+ swap the model on the user's behalf — relay the message and let them choose.
10091
+ - |-
10092
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
10093
+ through to the provider as-is; a catalog-listed model is still governed by
10094
+ its lifecycle row.
10047
10095
  temperature:
10048
10096
  type: number
10049
10097
  minimum: 0
@@ -10783,8 +10831,30 @@ components:
10783
10831
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
10784
10832
  credentials. Without one, built-in providers run on platform-managed
10785
10833
  credentials; catalog providers have no platform-managed credentials, so the
10786
- save requires one — without it the guardrail fails to save with 422
10787
- `connection_required` on `_connectionId`.
10834
+ save requires one — without it the guardrail fails to save with 422 on
10835
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
10836
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
10837
+ catalog check answers before any `connection_required`).
10838
+
10839
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
10840
+ the platform's model catalog: `active`, `deprecated` (still usable; a
10841
+ retirement date and suggested replacement models may be published), or
10842
+ `retired`, plus an availability switch. The save and every run of an
10843
+ `ai_agent` guardrail check the configured model against it exactly as for an
10844
+ AI agent import: a model that is not in the catalog, switched off, not offered
10845
+ for the guardrail's credential type, or retired (by status, or once its
10846
+ retirement date has passed) is refused — the save with 422
10847
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
10848
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
10849
+ carrying the same code before any model call (`Run blocked: model
10850
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
10851
+ and test your agent configuration.` — the run-time message names the date
10852
+ only). A deprecated model saves and runs until
10853
+ its retirement date. The platform never substitutes a model: once a model is
10854
+ retired, every save of the guardrail is refused until the model changes.
10855
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
10856
+ With a `_connectionId`, a model the catalog does not list is passed through to
10857
+ the vendor as-is; a catalog-listed model remains governed.
10788
10858
  x-celigo-ai-guidance:
10789
10859
  - |-
10790
10860
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -10827,11 +10897,13 @@ components:
10827
10897
  generic flat format — `model` and `modelOptions` directly on this object,
10828
10898
  never an `openai` or `litellm` block.
10829
10899
  - |-
10830
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
10831
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
10832
- API key is available for provider 'xai'. Add a connection for this provider with
10833
- your API key and select it on this agent."). Attach an HTTP connection to the
10834
- vendor's API (token auth) before saving a catalog-provider guardrail.
10900
+ Catalog providers are BYOK-only, and the save enforces it through the model
10901
+ catalog: without a `_connectionId` the guardrail fails to save with 422
10902
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
10903
+ not supported. Please choose a supported model and test your agent
10904
+ configuration.") — the model is a catalog row that is not offered on
10905
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
10906
+ (token auth) before saving a catalog-provider guardrail.
10835
10907
  model:
10836
10908
  type: string
10837
10909
  description: |-
@@ -10843,11 +10915,15 @@ components:
10843
10915
  Required for every catalog provider — omitting it or sending an empty string
10844
10916
  fails the save with 422 `missing_required_field`.
10845
10917
  - |-
10846
- The connection is checked before the model: without a `_connectionId` on the
10847
- parent import a catalog-provider guardrail fails to save with 422
10848
- `connection_required` whatever the model string (an unknown id included).
10849
- With a `_connectionId` (BYOK) any model string saves — the server does not
10850
- check it against the catalog or the vendor.
10918
+ Without a `_connectionId` on the parent import the model check answers first:
10919
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
10920
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
10921
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
10922
+ the catalog does not list.
10923
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
10924
+ the server does not check it against the catalog or the vendor; a
10925
+ catalog-listed model is still governed by its lifecycle row (see the
10926
+ schema description — a retired or switched-off model is refused on save).
10851
10927
  modelOptions:
10852
10928
  type: object
10853
10929
  description: |-
@@ -10993,11 +11069,22 @@ components:
10993
11069
  x-celigo-ai-guidance:
10994
11070
  - |-
10995
11071
  With platform-managed credentials (no `_connectionId` on the parent
10996
- import), the model must be one the platform hosts. The save does not
10997
- check this — an unlisted model saves, and the guardrail's first run fails
10998
- with 422 `invalid_model`, whose message lists the hosted models. A
10999
- BYOK connection bypasses the hosted list and the model string is
11000
- passed through to the provider as-is.
11072
+ import), the model must be a catalog row the platform offers on its own
11073
+ credentials. The save checks this — a model that is not in the catalog
11074
+ fails with 422 `ai_model_not_in_catalog` on
11075
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
11076
+ Please choose a supported model and test your agent configuration."). A
11077
+ retired model is refused the same way with `ai_model_retired` — the
11078
+ message names the retirement date and, when any remain eligible, the
11079
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
11080
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
11081
+ test and update your agent configuration.") — and so is a switched-off
11082
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
11083
+ model on the user's behalf — relay the message and let them choose.
11084
+ - |-
11085
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
11086
+ through to the provider as-is; a catalog-listed model is still governed by
11087
+ its lifecycle row.
11001
11088
  reasoning:
11002
11089
  type: object
11003
11090
  description: Controls depth of reasoning for complex tasks.
@@ -11265,10 +11352,19 @@ components:
11265
11352
  x-celigo-ai-guidance:
11266
11353
  - |-
11267
11354
  With platform-managed credentials (no `_connectionId` on the parent
11268
- import), the model must be one the platform hosts for the provider —
11269
- Gemini and Anthropic Claude both have a hosted list. The save does not
11270
- check this — an unlisted model saves, and the guardrail's first run fails
11271
- with 422 `invalid_model`, whose message lists the hosted models.
11355
+ import), the model must be a catalog row the platform offers for the
11356
+ provider on its own credentials — Gemini and Anthropic Claude each have
11357
+ their own rows. The save checks this: a model that is not in the catalog
11358
+ fails with 422 `ai_model_not_in_catalog` on
11359
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
11360
+ (the message names the retirement date and, when any remain eligible, the
11361
+ suggested next models), a switched-off one with `ai_model_disabled`; a
11362
+ deprecated model saves. Never
11363
+ swap the model on the user's behalf — relay the message and let them choose.
11364
+ - |-
11365
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
11366
+ through to the provider as-is; a catalog-listed model is still governed by
11367
+ its lifecycle row.
11272
11368
  temperature:
11273
11369
  type: number
11274
11370
  minimum: 0
package/dist/tool.yml CHANGED
@@ -20950,8 +20950,30 @@ components:
20950
20950
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
20951
20951
  credentials. Without one, built-in providers run on platform-managed
20952
20952
  credentials; catalog providers have no platform-managed credentials, so the
20953
- save requires one — without it the agent fails to save with 422
20954
- `connection_required` on `_connectionId`.
20953
+ save requires one — without it the agent fails to save with 422 on
20954
+ `aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
20955
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
20956
+ catalog check answers before any `connection_required`).
20957
+
20958
+ **Model lifecycle.** Every model the platform offers — built-in and catalog
20959
+ providers alike — carries a lifecycle in the platform's model catalog:
20960
+ `active`, `deprecated` (still usable; a retirement date and suggested
20961
+ replacement models may be published), or `retired`, plus an availability
20962
+ switch. The save and every run check the configured model against it: a
20963
+ model that is not in the catalog, switched off, not offered for the agent's
20964
+ credential type, or retired (by status, or once its retirement date has
20965
+ passed) is refused — the save with 422 `ai_model_not_in_catalog`,
20966
+ `ai_model_disabled`, `ai_model_not_available`, or `ai_model_retired` on the
20967
+ model field, the run with a `Run blocked:` error carrying the same code before
20968
+ any model call (`Run blocked: model "gpt-4.1-nano" is retired on "Oct 23,
20969
+ 2026". Please choose a supported model and test your agent configuration.` —
20970
+ the run-time message names the date only; the chat route streams it as an
20971
+ `error` event). A deprecated model saves and runs until its retirement date. The
20972
+ platform never substitutes a model: once a model is retired, every save of
20973
+ the agent is refused until the model changes. Agents and guardrails on
20974
+ affected models are listed by `GET /v1/aiagents/aiModelHealth`. With a
20975
+ `_connectionId`, a model the catalog does not list is passed through to the
20976
+ vendor as-is; a catalog-listed model remains governed.
20955
20977
  required:
20956
20978
  - provider
20957
20979
  properties:
@@ -20988,11 +21010,13 @@ components:
20988
21010
  generic flat format — `model` and `modelOptions` directly on this object,
20989
21011
  never an `openai` or `litellm` block.
20990
21012
  - |-
20991
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
20992
- the agent fails to save with 422 `connection_required` on `_connectionId` ("No API
20993
- key is available for provider 'xai'. Add a connection for this provider with your
20994
- API key and select it on this agent."). Attach an HTTP connection to the vendor's
20995
- API (token auth) before saving a catalog-provider agent.
21013
+ Catalog providers are BYOK-only, and the save enforces it through the model
21014
+ catalog: without a `_connectionId` the agent fails to save with 422
21015
+ `ai_model_not_available` on `aiAgent.model` ("Model \"grok-4.6\" is not
21016
+ supported. Please choose a supported model and test your agent
21017
+ configuration.") — the model is a catalog row that is not offered on
21018
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
21019
+ (token auth) before saving a catalog-provider agent.
20996
21020
  model:
20997
21021
  type: string
20998
21022
  description: |-
@@ -21004,11 +21028,15 @@ components:
21004
21028
  Required for every catalog provider — omitting it or sending an empty string
21005
21029
  fails the save with 422 `missing_required_field`.
21006
21030
  - |-
21007
- The connection is checked before the model: without a `_connectionId` on the
21008
- parent import a catalog-provider agent fails to save with 422
21009
- `connection_required` whatever the model string (an unknown id included).
21010
- With a `_connectionId` (BYOK) any model string saves — the server does not
21011
- check it against the catalog or the vendor.
21031
+ Without a `_connectionId` on the parent import the model check answers first:
21032
+ a catalog-provider agent fails to save with 422 on `aiAgent.model` —
21033
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
21034
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
21035
+ the catalog does not list.
21036
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
21037
+ the server does not check it against the catalog or the vendor; a
21038
+ catalog-listed model is still governed by its lifecycle row (see the
21039
+ schema description — a retired or switched-off model is refused on save).
21012
21040
  modelOptions:
21013
21041
  type: object
21014
21042
  description: |-
@@ -21209,11 +21237,23 @@ components:
21209
21237
  x-celigo-ai-guidance:
21210
21238
  - |-
21211
21239
  With platform-managed credentials (no `_connectionId` on the parent
21212
- import), the model must be one the platform hosts. The save does not
21213
- check this — an unlisted model saves, and the agent's first run fails
21214
- with 422 `invalid_model`, whose message lists the hosted models. A
21215
- BYOK connection bypasses the hosted list and the model string is
21216
- passed through to the provider as-is.
21240
+ import), the model must be a catalog row the platform offers on its own
21241
+ credentials. The save checks this — a model that is not in the catalog
21242
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.openai.model`
21243
+ ("Model \"gpt-4\" is not supported. Please choose a supported model and
21244
+ test your agent configuration."), and a dry-run answers the same
21245
+ `errors` with `valid: false`. A retired model is refused the same way with
21246
+ `ai_model_retired` — the message names the retirement date and, when any
21247
+ remain eligible, the suggested next models ("Model \"gpt-4.1-nano\" is
21248
+ retired on \"Oct 23, 2026\" and cannot be used. Suggested next models:
21249
+ gpt-5.6-luna. Please test and update your agent configuration.") — and so
21250
+ is a switched-off one with `ai_model_disabled`; a deprecated model saves.
21251
+ Never swap the model on the user's behalf — relay the message and let
21252
+ them choose.
21253
+ - |-
21254
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
21255
+ through to the provider as-is; a catalog-listed model is still governed by
21256
+ its lifecycle row.
21217
21257
  reasoning:
21218
21258
  type: object
21219
21259
  description: Controls depth of reasoning for complex tasks.
@@ -21642,10 +21682,18 @@ components:
21642
21682
  x-celigo-ai-guidance:
21643
21683
  - |-
21644
21684
  With platform-managed credentials (no `_connectionId` on the parent
21645
- import), the model must be one the platform hosts for the provider —
21646
- Gemini and Anthropic Claude both have a hosted list. The save does not
21647
- check this — an unlisted model saves, and the agent's first run fails
21648
- with 422 `invalid_model`, whose message lists the hosted models.
21685
+ import), the model must be a catalog row the platform offers for the
21686
+ provider on its own credentials — Gemini and Anthropic Claude each have
21687
+ their own rows. The save checks this: a model that is not in the catalog
21688
+ fails with 422 `ai_model_not_in_catalog` on `aiAgent.litellm.model`, a
21689
+ retired one with `ai_model_retired` (the message names the retirement
21690
+ date and, when any remain eligible, the suggested next models), a
21691
+ switched-off one with `ai_model_disabled`; a deprecated model saves. Never
21692
+ swap the model on the user's behalf — relay the message and let them choose.
21693
+ - |-
21694
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
21695
+ through to the provider as-is; a catalog-listed model is still governed by
21696
+ its lifecycle row.
21649
21697
  temperature:
21650
21698
  type: number
21651
21699
  minimum: 0
@@ -22385,8 +22433,30 @@ components:
22385
22433
  A `_connectionId` on the parent import selects bring-your-own-key (BYOK)
22386
22434
  credentials. Without one, built-in providers run on platform-managed
22387
22435
  credentials; catalog providers have no platform-managed credentials, so the
22388
- save requires one — without it the guardrail fails to save with 422
22389
- `connection_required` on `_connectionId`.
22436
+ save requires one — without it the guardrail fails to save with 422 on
22437
+ `guardrail.aiAgent.model`: `ai_model_not_available` for a catalog-listed model,
22438
+ `ai_model_not_in_catalog` for one the catalog does not list (the model
22439
+ catalog check answers before any `connection_required`).
22440
+
22441
+ **Model lifecycle.** Every model the platform offers carries a lifecycle in
22442
+ the platform's model catalog: `active`, `deprecated` (still usable; a
22443
+ retirement date and suggested replacement models may be published), or
22444
+ `retired`, plus an availability switch. The save and every run of an
22445
+ `ai_agent` guardrail check the configured model against it exactly as for an
22446
+ AI agent import: a model that is not in the catalog, switched off, not offered
22447
+ for the guardrail's credential type, or retired (by status, or once its
22448
+ retirement date has passed) is refused — the save with 422
22449
+ `ai_model_not_in_catalog`, `ai_model_disabled`, `ai_model_not_available`, or
22450
+ `ai_model_retired` on the model field, the run with a `Run blocked:` error
22451
+ carrying the same code before any model call (`Run blocked: model
22452
+ "gpt-4.1-nano" is retired on "Oct 23, 2026". Please choose a supported model
22453
+ and test your agent configuration.` — the run-time message names the date
22454
+ only). A deprecated model saves and runs until
22455
+ its retirement date. The platform never substitutes a model: once a model is
22456
+ retired, every save of the guardrail is refused until the model changes.
22457
+ Guardrails on affected models are listed by `GET /v1/aiagents/aiModelHealth`.
22458
+ With a `_connectionId`, a model the catalog does not list is passed through to
22459
+ the vendor as-is; a catalog-listed model remains governed.
22390
22460
  x-celigo-ai-guidance:
22391
22461
  - |-
22392
22462
  Do not send `tools` on any block. A non-empty array at `tools`, `openai.tools`,
@@ -22429,11 +22499,13 @@ components:
22429
22499
  generic flat format — `model` and `modelOptions` directly on this object,
22430
22500
  never an `openai` or `litellm` block.
22431
22501
  - |-
22432
- Catalog providers are BYOK-only, and the save enforces it: without a `_connectionId`
22433
- the guardrail fails to save with 422 `connection_required` on `_connectionId` ("No
22434
- API key is available for provider 'xai'. Add a connection for this provider with
22435
- your API key and select it on this agent."). Attach an HTTP connection to the
22436
- vendor's API (token auth) before saving a catalog-provider guardrail.
22502
+ Catalog providers are BYOK-only, and the save enforces it through the model
22503
+ catalog: without a `_connectionId` the guardrail fails to save with 422
22504
+ `ai_model_not_available` on `guardrail.aiAgent.model` ("Model \"grok-4.6\" is
22505
+ not supported. Please choose a supported model and test your agent
22506
+ configuration.") — the model is a catalog row that is not offered on
22507
+ platform-managed credentials. Attach an HTTP connection to the vendor's API
22508
+ (token auth) before saving a catalog-provider guardrail.
22437
22509
  model:
22438
22510
  type: string
22439
22511
  description: |-
@@ -22445,11 +22517,15 @@ components:
22445
22517
  Required for every catalog provider — omitting it or sending an empty string
22446
22518
  fails the save with 422 `missing_required_field`.
22447
22519
  - |-
22448
- The connection is checked before the model: without a `_connectionId` on the
22449
- parent import a catalog-provider guardrail fails to save with 422
22450
- `connection_required` whatever the model string (an unknown id included).
22451
- With a `_connectionId` (BYOK) any model string saves — the server does not
22452
- check it against the catalog or the vendor.
22520
+ Without a `_connectionId` on the parent import the model check answers first:
22521
+ a catalog-provider guardrail fails to save with 422 on `guardrail.aiAgent.model` —
22522
+ `ai_model_not_available` for a catalog-listed model (catalog providers are not
22523
+ offered on platform-managed credentials), `ai_model_not_in_catalog` for an id
22524
+ the catalog does not list.
22525
+ With a `_connectionId` (BYOK) a model the catalog does not list saves as-is —
22526
+ the server does not check it against the catalog or the vendor; a
22527
+ catalog-listed model is still governed by its lifecycle row (see the
22528
+ schema description — a retired or switched-off model is refused on save).
22453
22529
  modelOptions:
22454
22530
  type: object
22455
22531
  description: |-
@@ -22595,11 +22671,22 @@ components:
22595
22671
  x-celigo-ai-guidance:
22596
22672
  - |-
22597
22673
  With platform-managed credentials (no `_connectionId` on the parent
22598
- import), the model must be one the platform hosts. The save does not
22599
- check this — an unlisted model saves, and the guardrail's first run fails
22600
- with 422 `invalid_model`, whose message lists the hosted models. A
22601
- BYOK connection bypasses the hosted list and the model string is
22602
- passed through to the provider as-is.
22674
+ import), the model must be a catalog row the platform offers on its own
22675
+ credentials. The save checks this — a model that is not in the catalog
22676
+ fails with 422 `ai_model_not_in_catalog` on
22677
+ `guardrail.aiAgent.openai.model` ("Model \"gpt-4\" is not supported.
22678
+ Please choose a supported model and test your agent configuration."). A
22679
+ retired model is refused the same way with `ai_model_retired` — the
22680
+ message names the retirement date and, when any remain eligible, the
22681
+ suggested next models ("Model \"gpt-4.1-nano\" is retired on \"Oct 23,
22682
+ 2026\" and cannot be used. Suggested next models: gpt-5.6-luna. Please
22683
+ test and update your agent configuration.") — and so is a switched-off
22684
+ one with `ai_model_disabled`; a deprecated model saves. Never swap the
22685
+ model on the user's behalf — relay the message and let them choose.
22686
+ - |-
22687
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
22688
+ through to the provider as-is; a catalog-listed model is still governed by
22689
+ its lifecycle row.
22603
22690
  reasoning:
22604
22691
  type: object
22605
22692
  description: Controls depth of reasoning for complex tasks.
@@ -22867,10 +22954,19 @@ components:
22867
22954
  x-celigo-ai-guidance:
22868
22955
  - |-
22869
22956
  With platform-managed credentials (no `_connectionId` on the parent
22870
- import), the model must be one the platform hosts for the provider —
22871
- Gemini and Anthropic Claude both have a hosted list. The save does not
22872
- check this — an unlisted model saves, and the guardrail's first run fails
22873
- with 422 `invalid_model`, whose message lists the hosted models.
22957
+ import), the model must be a catalog row the platform offers for the
22958
+ provider on its own credentials — Gemini and Anthropic Claude each have
22959
+ their own rows. The save checks this: a model that is not in the catalog
22960
+ fails with 422 `ai_model_not_in_catalog` on
22961
+ `guardrail.aiAgent.litellm.model`, a retired one with `ai_model_retired`
22962
+ (the message names the retirement date and, when any remain eligible, the
22963
+ suggested next models), a switched-off one with `ai_model_disabled`; a
22964
+ deprecated model saves. Never
22965
+ swap the model on the user's behalf — relay the message and let them choose.
22966
+ - |-
22967
+ With a `_connectionId` (BYOK) a model the catalog does not list is passed
22968
+ through to the provider as-is; a catalog-listed model is still governed by
22969
+ its lifecycle row.
22874
22970
  temperature:
22875
22971
  type: number
22876
22972
  minimum: 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celigo/api-specs",
3
- "version": "0.2.182",
3
+ "version": "0.2.183",
4
4
  "private": false,
5
5
  "description": "Public OpenAPI bundles (dist/) and the celigo-cli lint schema pack (schemas.json).",
6
6
  "keywords": [
package/schemas.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "provenance": {
3
3
  "repo": "celigo/integrator-api-specs",
4
- "iasCommit": "1fdd11e5",
4
+ "iasCommit": "01a411e3",
5
5
  "generatedAt": "2026-10-23"
6
6
  },
7
7
  "roots": {