@celigo/api-specs 0.2.214 → 0.2.216

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/export.yml CHANGED
@@ -15412,12 +15412,16 @@ components:
15412
15412
  - |-
15413
15413
  On a grouped record (the export groups rows, so the record is an
15414
15414
  array) only `create` can author output — build it from the rows with
15415
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
15415
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
15416
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
15416
15417
  `modify` has no object to overlay onto an array: the record passes
15417
- through untouched and the processor reports success. Either mode
15418
- reshapes the inside of one record; neither changes how many records
15419
- the page carries (that is the export's `preSavePage` hook) or whether
15420
- the export groups at all (that is its grouping setting).
15418
+ through untouched and the processor reports success. Paths written
15419
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
15420
+ nothing there, so `create` returns `{}` for each record, also with
15421
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
15422
+ record; neither changes how many records the page carries (that is
15423
+ the export's `preSavePage` hook) or whether the export groups at all
15424
+ (that is its grouping setting).
15421
15425
  examples:
15422
15426
  - create
15423
15427
  - modify
@@ -15482,8 +15486,8 @@ components:
15482
15486
  - record
15483
15487
  - envelope
15484
15488
  x-enumDescriptions:
15485
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
15486
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15489
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
15490
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15487
15491
  description: |
15488
15492
  Controls the JSON shape the transformTwoDotZero processor
15489
15493
  evaluates `mappings[].extract` JSONPath values against at
@@ -15499,24 +15503,38 @@ components:
15499
15503
  processor sees the FLAT record as its evaluation root.
15500
15504
  `mappings[].extract` JSONPath MUST anchor directly at
15501
15505
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
15502
- `"$.customer.email"`; PLACEHOLDER extracts use
15506
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
15507
+ on a grouped one; PLACEHOLDER extracts use
15503
15508
  `"$.PLACEHOLDER_<field>"`.
15504
15509
  This is the dominant Celigo idiom and the right choice for new transforms.
15505
15510
  - `envelope`: the processor sees a wrapped object
15506
15511
  `{record: {...}, job, testMode, settings, headers,
15507
15512
  queryParams}` (plus `fileMeta` on file-provider steps).
15508
15513
  `mappings[].extract` JSONPath MUST include the
15509
- `record.` segment for record fields — e.g.
15510
- `"$.record.orderId"` — and reads `headers` and
15514
+ `record.` segment for an object record's fields — e.g.
15515
+ `"$.record.orderId"`; a grouped record sits under `rows`
15516
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
15511
15517
  `queryParams` beside it (`$.headers['X-Id']`);
15512
15518
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
15513
15519
  Pick this only when the transform was authored against
15514
15520
  the envelope shape on purpose.
15515
15521
  - |-
15516
- Handlebars expressions inside `extract`
15517
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
15518
- ALWAYS reference the `record` root regardless of
15522
+ Handlebars expressions inside `extract` reference the
15523
+ `record` root on an object record (`{{record.field}}`,
15524
+ `{{dateFormat ... record.field}}`) and `rows` on a
15525
+ grouped one (`{{rows.0.field}}`), regardless of
15519
15526
  `inputContext` — only JSONPath anchoring flips.
15527
+ - |-
15528
+ ## Grouped records
15529
+
15530
+ When the export groups rows, each record is an array of
15531
+ rows. In `record` mode JSONPath roots at that array
15532
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
15533
+ not `record` — `$.rows[0].field`, and an entry
15534
+ `$.rows[*]` whose children read `$.rows.field` — while
15535
+ `$.record[0].field` and `$.record[*]` resolve nothing,
15536
+ with no error (live, 2026-10-30). Handlebars extracts
15537
+ read it as `rows` in both modes (`{{rows.0.field}}`).
15520
15538
  - |-
15521
15539
  In `envelope` mode the output is still a bare record: a
15522
15540
  `modify` transform returns the record with its mapped
@@ -15537,7 +15555,8 @@ components:
15537
15555
  ``mappings[].extract`` JSONPath values MUST anchor
15538
15556
  directly at ``$`` with NO ``record.`` segment — for
15539
15557
  example ``"$.orderId"`` or
15540
- ``"$.customer.email"``. PLACEHOLDER extracts use
15558
+ ``"$.customer.email"`` on an object record, and
15559
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
15541
15560
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
15542
15561
  Celigo idiom and the right choice for new transforms.
15543
15562
 
@@ -15549,9 +15568,10 @@ components:
15549
15568
  ``record``) — the
15550
15569
  same runtime-context envelope Handlebars / SQL /
15551
15570
  GraphQL templates render against. ``mappings[].extract``
15552
- JSONPath values for record fields MUST include the
15571
+ JSONPath values for an object record's fields MUST include the
15553
15572
  ``record.`` segment — for example ``"$.record.orderId"``
15554
- or ``"$.record.customer.email"`` — while ``headers`` and
15573
+ or ``"$.record.customer.email"``; a grouped record's rows
15574
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
15555
15575
  ``queryParams`` are read beside it
15556
15576
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
15557
15577
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -15564,8 +15584,9 @@ components:
15564
15584
 
15565
15585
  Handlebars expressions inside ``extract``
15566
15586
  (``{{record.field}}``,
15567
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
15568
- reference the runtime context's ``record`` root
15587
+ ``{{dateFormat ... record.field}}``, etc.) reference the
15588
+ runtime context's ``record`` root on an object record,
15589
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
15569
15590
  regardless of ``inputContext`` — the Handlebars runtime
15570
15591
  always sees the wrapped envelope. Only JSONPath
15571
15592
  behavior flips with this field.
@@ -16426,8 +16447,8 @@ components:
16426
16447
  **Structure**
16427
16448
 
16428
16449
  The mock output must follow the integrator.io canonical format, which consists of a
16429
- `page_of_records` array containing record objects. Each record object has a `record`
16430
- property that contains the actual data fields.
16450
+ `page_of_records` array of items. On an export that does not group rows, each item has a
16451
+ `record` property that contains the actual data fields:
16431
16452
 
16432
16453
  ```json
16433
16454
  {
@@ -16444,6 +16465,19 @@ components:
16444
16465
  }
16445
16466
  ```
16446
16467
 
16468
+ An export that groups rows (`groupByFields`) produces records that are arrays of rows, and
16469
+ each item then carries `rows` instead of `record`, holding the rows of one grouped record. A
16470
+ flow test run saves a grouped export's records in this form:
16471
+
16472
+ ```json
16473
+ {
16474
+ "page_of_records": [
16475
+ { "rows": [ { "field1": "value1" }, { "field1": "value2" } ] },
16476
+ ...
16477
+ ]
16478
+ }
16479
+ ```
16480
+
16447
16481
  **Usage**
16448
16482
 
16449
16483
  In a flow test run, and for an upstream lookup during a page-processor preview
@@ -16476,7 +16510,8 @@ components:
16476
16510
 
16477
16511
  - Maximum of 10 records
16478
16512
  - Maximum size of 1 MB
16479
- - Must follow the canonical format shown above
16513
+ - Must follow one of the canonical formats shown above: every item `{"record": {...}}`, or
16514
+ on a grouped export every item `{"rows": [...]}`
16480
16515
 
16481
16516
  Mock output can be populated automatically from preview data (which is the parsed response,
16482
16517
  before `transform` / `filter`) or entered manually.
@@ -16518,6 +16553,22 @@ components:
16518
16553
  categories:
16519
16554
  - Electronics
16520
16555
  - Accessories
16556
+ rows:
16557
+ type: array
16558
+ description: |
16559
+ The rows of one grouped record, present instead of `record` when the export
16560
+ groups rows (`groupByFields`). Every item of a grouped export's mock carries
16561
+ `rows`.
16562
+ items:
16563
+ type: object
16564
+ additionalProperties: true
16565
+ example:
16566
+ - orderId: SO-1001
16567
+ sku: SKU-100
16568
+ quantity: 2
16569
+ - orderId: SO-1001
16570
+ sku: SKU-200
16571
+ quantity: 1
16521
16572
  example:
16522
16573
  page_of_records:
16523
16574
  - record:
package/dist/flow.yml CHANGED
@@ -2153,12 +2153,14 @@ paths:
2153
2153
 
2154
2154
  The `data` field is the record as the failing stage held it: for an import-stage error
2155
2155
  (`page_processor_import`) on an HTTP import, the record before the import's mappings, not the
2156
- request the import sent; for a postResponseMap hook's error (`post_response_mapping`), the record
2156
+ request the import sent; for a lookup's error (`page_processor_export`), the record as it reached
2157
+ the lookup; for a postResponseMap hook's error (`post_response_mapping`), the record
2157
2158
  after the step's response mapping. Use `PUT .../{retryDataKey}/data` to mutate
2158
2159
  the snapshot before retrying. Only errors with a `retryDataKey` expose this endpoint;
2159
2160
  connection-class errors are rejected with `no_retrydata_found`. The `stage` field indicates
2160
2161
  where the retry will resume: `page_processor_import` re-runs the import (most common, and where a
2161
- postSubmit hook's errors are stored, so their retry writes the records again),
2162
+ postSubmit hook's errors are stored — a retry writes again a record the destination accepted,
2163
+ and resends one whose refusal the hook reworded), `page_processor_export` re-runs the lookup,
2162
2164
  `post_response_mapping` (a postResponseMap hook's error) resumes after the import from the stored
2163
2165
  reply in `adaptorResponse`, sending nothing to the destination again and carrying the record on
2164
2166
  to the flow's next steps, and `page_generator` means the error was upstream of the processor.
@@ -4342,6 +4344,10 @@ paths:
4342
4344
 
4343
4345
  An empty object `{}` means no other resources depend on the target — this is also returned for a
4344
4346
  well-formatted but nonexistent id.
4347
+
4348
+ A `flows` entry whose `paths` holds `_runNextFlowIds` is an upstream flow: its own
4349
+ `_runNextFlowIds` lists this flow, so this flow starts when a run of that one completes. The
4350
+ flows this flow starts are in its own `_runNextFlowIds`, not in this response.
4345
4351
  parameters:
4346
4352
  - name: _id
4347
4353
  in: path
@@ -4364,7 +4370,7 @@ paths:
4364
4370
  summary: No dependents (also returned for a nonexistent id)
4365
4371
  value: {}
4366
4372
  populated:
4367
- summary: Another flow is configured to run after this one
4373
+ summary: Another flow starts this one when its run completes
4368
4374
  value:
4369
4375
  flows:
4370
4376
  - id: 69f4b2cb95ec28be9ca1a88d
@@ -5847,9 +5853,11 @@ components:
5847
5853
  - string
5848
5854
  - 'null'
5849
5855
  description: |-
5850
- IANA timezone for the schedule (e.g. `America/New_York`). Defaults to UTC. The flow's
5851
- `schedule` and each page generator's own `schedule` are read in this timezone; a page
5852
- generator has no timezone of its own.
5856
+ IANA timezone for the schedule (e.g. `America/New_York`). The flow's `schedule` and each
5857
+ page generator's own `schedule` are read in this timezone; a page generator has no
5858
+ timezone of its own. A flow saved without one stores none, and its schedule then runs in
5859
+ UTC when the account owner's profile has no time zone; per the Help Center's time zone
5860
+ precedence, it runs in the owner's profile time zone when the profile sets one.
5853
5861
  examples:
5854
5862
  - America/New_York
5855
5863
  - Europe/London
@@ -6935,8 +6943,10 @@ components:
6935
6943
  `application` covers the step's whole call to the external system, not only its answer:
6936
6944
  besides errors the destination returned, it marks a request that never got an answer,
6937
6945
  such as a URL template that failed to render (`handlebars_template_parse_error`) or a
6938
- refused connection, so read `code` and `message` with it. `GET /v1/errors/filterMetadata`
6939
- lists the source values the errors filter accepts.
6946
+ refused connection, so read `code` and `message` with it. `post_submit_hook` marks an error
6947
+ a postSubmit hook added or reworded — a destination refusal included — while one the hook
6948
+ passes along unchanged keeps `application`, so it does not mean the destination accepted the
6949
+ record. `GET /v1/errors/filterMetadata` lists the source values the errors filter accepts.
6940
6950
  examples:
6941
6951
  - application
6942
6952
  code:
@@ -7831,7 +7841,8 @@ components:
7831
7841
  (an import's errors, a postSubmit hook's included) it is the incoming record, before the
7832
7842
  import's mappings — not the request body the import sent or the response it got back — and a
7833
7843
  retry maps it again with the import's current mappings, so a mapping fix reaches the retried
7834
- record. At `post_response_mapping` (a postResponseMap hook's error) it is the record after the
7844
+ record. At `page_processor_export` (a lookup's errors) it is the record as it reached the
7845
+ lookup. At `post_response_mapping` (a postResponseMap hook's error) it is the record after the
7835
7846
  step's response mapping, with the mapped fields: a retry neither maps nor sends it again, and
7836
7847
  the destination's reply is in `adaptorResponse`. Shape varies by adaptor.
7837
7848
  additionalProperties: true
@@ -7840,14 +7851,25 @@ components:
7840
7851
  description: |-
7841
7852
  Pipeline stage where the record was when the error occurred, which is where a retry resumes.
7842
7853
  `page_processor_import` is the record as it entered the import, so a retry sends it to the
7843
- destination again; a postSubmit hook's errors are stored here, so retrying them writes records
7844
- the destination already accepted a second time (live, 2026-10-22). `post_response_mapping` is a
7845
- postResponseMap hook's error, raised after the destination answered: a retry runs the hook from
7846
- the stored reply and carries the record on to the flow's next steps, sending nothing to that
7847
- destination again (live, 2026-10-23 and 2026-10-25: the import's request count didn't change,
7848
- and the next import received the retried records).
7854
+ destination again. A postSubmit hook's errors are stored here whether the destination accepted
7855
+ the record or refused it and the hook reworded the refusal (live, 2026-10-30), so neither the
7856
+ stage nor the error's `post_submit_hook` source says whether the record was written: retrying
7857
+ an error the hook raised after the destination accepted the record writes it a second time
7858
+ (live, 2026-10-22), while a reworded refusal is a record the destination did not take.
7859
+ `page_processor_export` is a lookup's error: a retry runs the lookup again as it is configured
7860
+ now (live, 2026-10-30: after the lookup's template was fixed, the retried records succeeded).
7861
+ `post_response_mapping` is a postResponseMap hook's error, raised after the destination
7862
+ answered: a retry runs the hook from the stored reply and carries the record on to the flow's
7863
+ next steps, sending nothing to that destination again (live, 2026-10-23 and 2026-10-25: the
7864
+ import's request count didn't change, and the next import received the retried records).
7865
+ x-celigo-ai-guidance:
7866
+ - |-
7867
+ Before retrying `post_submit_hook` errors, find out whether the destination took each
7868
+ record — the hook's message, or a lookup of the record in the destination — and retry the
7869
+ refusals. A hook error on a record the destination accepted is written again by the retry.
7849
7870
  examples:
7850
7871
  - page_processor_import
7872
+ - page_processor_export
7851
7873
  - post_response_mapping
7852
7874
  - importMappingExtract
7853
7875
  pgExportId:
@@ -602,8 +602,10 @@ components:
602
602
  - **openai**: OpenAI models (GPT-4.1, GPT-5, etc.). Configure via the `openai` object.
603
603
  - **gemini**: Google Gemini models via the LiteLLM proxy. Configure via `litellm` with overrides in `litellm._overrides.gemini`.
604
604
  - **anthropic**: Anthropic Claude models via the LiteLLM proxy. Configure via `litellm` with overrides in `litellm._overrides.anthropic`.
605
- - **Catalog providers** — `mistral`, `xai`, `huggingface`, `deepseek`, `cohere`, `groq`. Added
606
- as catalog data rather than platform code, they share one generic flat format:
605
+ - **Catalog providers** — every other value of `provider` (Mistral, xAI, Hugging Face,
606
+ DeepSeek, Cohere, Groq, Together AI, Azure OpenAI, Fireworks AI, AWS Bedrock, NVIDIA NIM,
607
+ Ollama Cloud and Google Vertex AI today; the catalog grows without a platform release).
608
+ Added as catalog data rather than platform code, they share one generic flat format:
607
609
  `model`, `modelOptions`, `instructions`, `output`, and the `prompts` / `resources`
608
610
  arrays directly on this object.
609
611
 
@@ -655,26 +657,43 @@ components:
655
657
  - deepseek
656
658
  - cohere
657
659
  - groq
660
+ - together_ai
661
+ - azure_ai
662
+ - fireworks_ai
663
+ - bedrock
664
+ - nvidia_nim
665
+ - ollama_chat
666
+ - vertex_ai
658
667
  x-enumDescriptions:
659
- openai: Use OpenAI models via the OpenAI Responses API (built-in; `openai` block).
660
- gemini: Use Google Gemini models via the LiteLLM proxy (built-in; `litellm` block).
661
- anthropic: Use Anthropic Claude models via the LiteLLM proxy (built-in; `litellm` block).
662
- mistral: Use Mistral models (catalog provider; generic flat format, BYOK).
663
- xai: Use xAI Grok models (catalog provider; generic flat format, BYOK).
664
- huggingface: Use Hugging Face inference endpoint models (catalog provider; generic flat format, BYOK).
665
- deepseek: Use DeepSeek models (catalog provider; generic flat format, BYOK).
666
- cohere: Use Cohere models (catalog provider; generic flat format, BYOK).
667
- groq: Use Groq-hosted models (catalog provider; generic flat format, BYOK).
668
- description: AI provider to use.
668
+ openai: Use OpenAI models via the OpenAI Responses API (built-in; `openai` block; Celigo AI or BYOK)
669
+ gemini: Use Google Gemini models via the LiteLLM proxy (built-in; `litellm` block; Celigo AI or BYOK)
670
+ anthropic: Use Anthropic Claude models via the LiteLLM proxy (built-in; `litellm` block; Celigo AI or BYOK)
671
+ mistral: Use Mistral models (catalog provider; generic flat format, BYOK)
672
+ xai: Use xAI Grok models (catalog provider; generic flat format, BYOK)
673
+ huggingface: Use Hugging Face inference endpoint models (catalog provider; generic flat format, BYOK)
674
+ deepseek: Use DeepSeek models (catalog provider; generic flat format, BYOK)
675
+ cohere: Use Cohere models (catalog provider; generic flat format, BYOK)
676
+ groq: Use Groq-hosted models (catalog provider; generic flat format, BYOK)
677
+ together_ai: Use models served by Together AI (catalog provider; generic flat format, BYOK)
678
+ azure_ai: Use deployments on an Azure AI Foundry / Azure OpenAI resource — `model` is the deployment name (catalog provider; generic flat format, BYOK)
679
+ fireworks_ai: Use models served by Fireworks AI (catalog provider; generic flat format, BYOK)
680
+ bedrock: Use AWS Bedrock models through cross-region inference profile ids such as `global.anthropic.claude-sonnet-4-6` (catalog provider; generic flat format, BYOK)
681
+ nvidia_nim: Use models served by NVIDIA NIM (catalog provider; generic flat format, BYOK)
682
+ ollama_chat: Use models served by Ollama Cloud (catalog provider; generic flat format, BYOK)
683
+ vertex_ai: Use Gemini models on Google Vertex AI with the customer's own GCP project (catalog provider; generic flat format, BYOK)
684
+ description: |-
685
+ AI provider to use. Built-in providers run on Celigo AI credentials or on a
686
+ BYOK connection; every other provider is a catalog row that runs only on a BYOK
687
+ connection. The catalog is data — a provider can be added without a platform
688
+ release, and `GET /api/aiproviders` lists the rows currently offered.
669
689
  x-celigo-ai-guidance:
670
690
  - |-
671
691
  The provider decides the configuration format, and the server rejects a
672
692
  mismatch with 422 `invalid_provider_config_format`: `openai` needs the
673
693
  `openai` block, `gemini` and `anthropic` need the `litellm` block (Gemini- or
674
- Claude-specific settings under `litellm._overrides`), and the catalog
675
- providers (`mistral`, `xai`, `huggingface`, `deepseek`, `cohere`, `groq`) need the
676
- generic flat format — `model` and `modelOptions` directly on this object,
677
- never an `openai` or `litellm` block.
694
+ Claude-specific settings under `litellm._overrides`), and every other
695
+ provider (the catalog providers) needs the generic flat format — `model` and
696
+ `modelOptions` directly on this object, never an `openai` or `litellm` block.
678
697
  - |-
679
698
  Catalog providers are BYOK-only, and the save enforces it through the model
680
699
  catalog: without a `_connectionId` the guardrail fails to save with 422
@@ -683,6 +702,18 @@ components:
683
702
  configuration.") — the model is a catalog row that is not offered on
684
703
  platform-managed credentials. Attach an HTTP connection to the vendor's API
685
704
  (token auth) before saving a catalog-provider guardrail.
705
+ - |-
706
+ Without a connection, a provider the catalog does not list is refused at the
707
+ model check — 422 `ai_model_not_in_catalog` on `guardrail.aiAgent.model` — so the
708
+ message names the model, not the provider. Check the provider against the
709
+ catalog before blaming the model.
710
+ - |-
711
+ For `azure_ai` and `bedrock` the vendor-specific settings ride the BYOK
712
+ connection, not this object: an optional connection `baseURI` (the vendor
713
+ endpoint the connector asks for), and connection settings forwarded to the
714
+ vendor — Azure's `apiVersion`, Bedrock's `awsRegionName`. `bedrock`
715
+ authenticates with a Bedrock API key (no IAM role); for `azure_ai`, `model` is
716
+ the deployment name.
686
717
  model:
687
718
  type: string
688
719
  description: |-
@@ -1566,6 +1597,13 @@ components:
1566
1597
  - deepseek
1567
1598
  - cohere
1568
1599
  - groq
1600
+ - together_ai
1601
+ - azure_ai
1602
+ - fireworks_ai
1603
+ - bedrock
1604
+ - nvidia_nim
1605
+ - ollama_chat
1606
+ - vertex_ai
1569
1607
  required:
1570
1608
  - provider
1571
1609
  then:
@@ -2389,7 +2427,7 @@ components:
2389
2427
  Connection for BYOK (bring your own key) — only meaningful for `ai_agent` type
2390
2428
  guardrails. Optional for the built-in providers (`openai`, `gemini`, `anthropic`),
2391
2429
  which run on platform-managed credentials when it is omitted; catalog providers
2392
- (`mistral`, `xai`, `huggingface`, `deepseek`, `cohere`, `groq`) have no platform-managed
2430
+ (every other value of `provider`) have no platform-managed
2393
2431
  credentials and need it to run.
2394
2432
  examples:
2395
2433
  - 68ae48d6b5f755d2dd38c294