@wildo-ai/external-connectors-models 1.1.1 → 1.1.3

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.
Files changed (87) hide show
  1. package/dist/esm/.native.tsbuildinfo +1 -0
  2. package/dist/esm/core/commons.external-connectors-models.schemas.d.ts +49 -9
  3. package/dist/esm/core/commons.external-connectors-models.schemas.d.ts.map +1 -1
  4. package/dist/esm/core/commons.external-connectors-models.schemas.js +46 -7
  5. package/dist/esm/core/commons.external-connectors-models.schemas.js.map +1 -1
  6. package/dist/esm/core/operation-classification.external-connectors-models.schemas.d.ts +13 -0
  7. package/dist/esm/core/operation-classification.external-connectors-models.schemas.d.ts.map +1 -0
  8. package/dist/esm/core/operation-classification.external-connectors-models.schemas.js +14 -0
  9. package/dist/esm/core/operation-classification.external-connectors-models.schemas.js.map +1 -0
  10. package/dist/esm/core/protocols.external-connectors-models.schemas.d.ts +0 -25
  11. package/dist/esm/core/protocols.external-connectors-models.schemas.d.ts.map +1 -1
  12. package/dist/esm/core/protocols.external-connectors-models.schemas.js.map +1 -1
  13. package/dist/esm/core/security.external-connectors-models.schemas.d.ts +132 -2
  14. package/dist/esm/core/security.external-connectors-models.schemas.d.ts.map +1 -1
  15. package/dist/esm/core/security.external-connectors-models.schemas.js +164 -0
  16. package/dist/esm/core/security.external-connectors-models.schemas.js.map +1 -1
  17. package/dist/esm/features/core.external-connectors-models.schemas.d.ts +0 -63
  18. package/dist/esm/features/core.external-connectors-models.schemas.d.ts.map +0 -1
  19. package/dist/esm/features/core.external-connectors-models.schemas.js +0 -101
  20. package/dist/esm/features/core.external-connectors-models.schemas.js.map +0 -1
  21. package/dist/esm/features/email.external-connectors-models.schemas.d.ts +0 -181
  22. package/dist/esm/features/email.external-connectors-models.schemas.d.ts.map +0 -1
  23. package/dist/esm/features/email.external-connectors-models.schemas.js +0 -34
  24. package/dist/esm/features/email.external-connectors-models.schemas.js.map +0 -1
  25. package/dist/esm/features/hooks.external-connectors-models.schemas.d.ts +0 -101
  26. package/dist/esm/features/hooks.external-connectors-models.schemas.d.ts.map +0 -1
  27. package/dist/esm/features/hooks.external-connectors-models.schemas.js +0 -11
  28. package/dist/esm/features/hooks.external-connectors-models.schemas.js.map +0 -1
  29. package/dist/esm/features/sms.external-connectors-models.schemas.d.ts +0 -21
  30. package/dist/esm/features/sms.external-connectors-models.schemas.d.ts.map +0 -1
  31. package/dist/esm/features/sms.external-connectors-models.schemas.js +0 -8
  32. package/dist/esm/features/sms.external-connectors-models.schemas.js.map +0 -1
  33. package/dist/esm/index.d.ts +3 -9
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +6 -10
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/protocols/a2a.external-connectors-models.schemas.d.ts +0 -57
  38. package/dist/esm/protocols/a2a.external-connectors-models.schemas.d.ts.map +0 -1
  39. package/dist/esm/protocols/a2a.external-connectors-models.schemas.js +0 -73
  40. package/dist/esm/protocols/a2a.external-connectors-models.schemas.js.map +0 -1
  41. package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.d.ts +242 -3
  42. package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.d.ts.map +1 -1
  43. package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.js +294 -2
  44. package/dist/esm/protocols/agent-client-protocol.external-connectors-models.schemas.js.map +1 -1
  45. package/dist/esm/protocols/billing.standard-interface.schemas.d.ts +154 -0
  46. package/dist/esm/protocols/billing.standard-interface.schemas.d.ts.map +1 -1
  47. package/dist/esm/protocols/billing.standard-interface.schemas.js +50 -1
  48. package/dist/esm/protocols/billing.standard-interface.schemas.js.map +1 -1
  49. package/dist/esm/protocols/email.external-connectors-models.schemas.d.ts +1 -1
  50. package/dist/esm/protocols/email.standard-interface.schemas.d.ts +5 -5
  51. package/dist/esm/protocols/git.external-connectors-models.schemas.d.ts +0 -14
  52. package/dist/esm/protocols/git.external-connectors-models.schemas.d.ts.map +0 -1
  53. package/dist/esm/protocols/git.external-connectors-models.schemas.js +0 -9
  54. package/dist/esm/protocols/git.external-connectors-models.schemas.js.map +0 -1
  55. package/dist/esm/protocols/grpc.external-connectors-models.schemas.d.ts +0 -14
  56. package/dist/esm/protocols/grpc.external-connectors-models.schemas.d.ts.map +0 -1
  57. package/dist/esm/protocols/grpc.external-connectors-models.schemas.js +0 -9
  58. package/dist/esm/protocols/grpc.external-connectors-models.schemas.js.map +0 -1
  59. package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.d.ts +101 -0
  60. package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.d.ts.map +1 -0
  61. package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.js +11 -0
  62. package/dist/esm/protocols/hooks-capability.external-connectors-models.schemas.js.map +1 -0
  63. package/dist/esm/protocols/llm.external-connectors-models.schemas.d.ts +39 -20
  64. package/dist/esm/protocols/llm.external-connectors-models.schemas.d.ts.map +1 -1
  65. package/dist/esm/protocols/llm.external-connectors-models.schemas.js +113 -27
  66. package/dist/esm/protocols/llm.external-connectors-models.schemas.js.map +1 -1
  67. package/dist/esm/protocols/mcp.external-connectors-models.schemas.d.ts +0 -60
  68. package/dist/esm/protocols/mcp.external-connectors-models.schemas.d.ts.map +0 -1
  69. package/dist/esm/protocols/mcp.external-connectors-models.schemas.js +0 -35
  70. package/dist/esm/protocols/mcp.external-connectors-models.schemas.js.map +0 -1
  71. package/dist/esm/protocols/oauth2.external-connectors-models.schemas.d.ts +2 -2
  72. package/dist/esm/protocols/rest-api.external-connectors-models.schemas.d.ts +1 -89
  73. package/dist/esm/protocols/rest-api.external-connectors-models.schemas.d.ts.map +1 -1
  74. package/dist/esm/protocols/rest-api.external-connectors-models.schemas.js +1 -83
  75. package/dist/esm/protocols/rest-api.external-connectors-models.schemas.js.map +1 -1
  76. package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.d.ts +370 -0
  77. package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.d.ts.map +1 -0
  78. package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.js +89 -0
  79. package/dist/esm/protocols/rest-operations.external-connectors-models.schemas.js.map +1 -0
  80. package/dist/esm/protocols/saml.external-connectors-models.schemas.d.ts +0 -135
  81. package/dist/esm/protocols/saml.external-connectors-models.schemas.d.ts.map +0 -1
  82. package/dist/esm/protocols/saml.external-connectors-models.schemas.js +0 -9
  83. package/dist/esm/protocols/saml.external-connectors-models.schemas.js.map +0 -1
  84. package/dist/esm/protocols/sms.standard-interface.schemas.d.ts +2 -2
  85. package/dist/tsconfig.build.tsbuildinfo +1 -1
  86. package/package.json +2 -2
  87. package/dist/esm/.builder.pid +0 -9
@@ -55,9 +55,11 @@ export var LLM_Model;
55
55
  // rejects temperature+topP together.
56
56
  /** Anthropic's most intelligent generally-available model (Claude 5 family, Mythos-class tier). */
57
57
  LLM_Model["CLAUDE_FABLE_5"] = "claude-fable-5";
58
+ /** Claude 5 family Opus tier. Same no-sampling-params contract as the rest of the family. */
59
+ LLM_Model["CLAUDE_OPUS_5"] = "claude-opus-5";
58
60
  /** Claude 5 family workhorse. */
59
61
  LLM_Model["CLAUDE_SONNET_5"] = "claude-sonnet-5";
60
- /** Latest Opus-tier model (4.x line). */
62
+ /** Opus 4.x line (superseded by CLAUDE_OPUS_5 as the Opus tier). */
61
63
  LLM_Model["CLAUDE_OPUS_4_8"] = "claude-opus-4-8";
62
64
  LLM_Model["CLAUDE_SONNET_4_5"] = "claude-sonnet-4-5";
63
65
  LLM_Model["CLAUDE_HAIKU_4_5"] = "claude-haiku-4-5";
@@ -123,8 +125,14 @@ export var LLM_Model_Thinking_Capability;
123
125
  LLM_Model_Thinking_Capability["OPTIONAL"] = "optional";
124
126
  /**
125
127
  * The model ALWAYS reasons and thinking CANNOT be disabled (o-series,
126
- * Claude 5). Every effort is valid EXCEPT `NONE` — asking such a model not to
127
- * think is a provider error, not a preference.
128
+ * `claude-fable-5`). Every effort is valid EXCEPT `NONE` — asking such a model
129
+ * not to think is a provider error, not a preference.
130
+ *
131
+ * NOT a property of a model FAMILY: measured 2026-09-08, `claude-fable-5`
132
+ * refuses `thinking.type.disabled` while `claude-sonnet-5` and
133
+ * `claude-opus-5` accept it. Both siblings carried this value on the family's
134
+ * behalf for a month, which made `validateReasoningEffortForModel` refuse a
135
+ * configuration the provider would have honoured.
128
136
  */
129
137
  LLM_Model_Thinking_Capability["ALWAYS"] = "always";
130
138
  })(LLM_Model_Thinking_Capability || (LLM_Model_Thinking_Capability = {}));
@@ -289,8 +297,8 @@ export const LLMProvider_ToolChoice_Schema = z.union([
289
297
  * OpenAI o-series, Claude 5 thinking, Gemini reasoning, …). The values mirror
290
298
  * the AI SDK 7 top-level `reasoning` option EXACTLY, which the SDK translates to
291
299
  * each provider's native reasoning setting (OpenAI `reasoning_effort`, Anthropic
292
- * thinking budget, …). Omit for non-reasoning models or to accept the provider
293
- * default.
300
+ * `output_config.effort`, …). Omit for non-reasoning models or to accept the
301
+ * provider default.
294
302
  *
295
303
  * Effort ladder (cost/latency ↑ with depth):
296
304
  * - `NONE` — reasoning off; mechanical tasks (extraction, formatting, labelling).
@@ -301,20 +309,30 @@ export const LLMProvider_ToolChoice_Schema = z.union([
301
309
  * - `PROVIDER_DEFAULT` — explicitly defer to the model's own default effort.
302
310
  *
303
311
  * NOT EVERY MODEL SUPPORTS EVERY LEVEL — the SDK forwards the value and the
304
- * provider validates it. Support matrix VERIFIED LIVE (2026-07-16/17); pick a
305
- * level the target model actually supports:
312
+ * provider validates it. Support matrix VERIFIED LIVE (2026-09-08), per MODEL
313
+ * rather than per family, because the family is not uniform:
314
+ *
315
+ * | Model | Supported | Rejected |
316
+ * |--------------------------------------|---------------------------------|-------------------------------|
317
+ * | GPT-5.6 sol / terra / luna | none, low, medium, high, xhigh | `minimal`, `provider-default` |
318
+ * | claude-fable-5 | low, medium, high, xhigh | **`none`**, `minimal`, `provider-default` |
319
+ * | claude-sonnet-5 · claude-opus-5 | none, low, medium, high, xhigh | `minimal`, `provider-default` |
306
320
  *
307
- * | Model family | Supported | Rejected |
308
- * |---------------------|------------------------------------|--------------------------------|
309
- * | OpenAI GPT-5.6 | none, low, medium, high, xhigh | `minimal`, `max` |
310
- * | Anthropic Claude 5 | low, medium, high, xhigh | **`none`** — thinking CANNOT |
311
- * | (fable-5, …) | | be disabled ("thinking.type. |
312
- * | | | disabled is not supported…"; |
313
- * | | | defaults to adaptive) |
321
+ * ⚠️ `NONE` is NOT portable, but the line is finer than "OpenAI yes, Anthropic
322
+ * no": `claude-fable-5` alone refuses it. Its siblings accept it, so a level
323
+ * that is legal on `claude-sonnet-5` can still be illegal on `claude-fable-5` —
324
+ * which is why the capability is a per-model probed fact and never a family
325
+ * assumption. `PROVIDER_DEFAULT` is rejected as an explicit value by BOTH
326
+ * providers — omit the field entirely for the model's own default.
314
327
  *
315
- * ⚠️ `NONE` is therefore NOT portable: it turns reasoning off on GPT-5.6 but
316
- * ERRORS on Claude 5. `PROVIDER_DEFAULT` as an explicit value is also rejected
317
- * by GPT-5.6 — omit the field entirely for the model's default instead.
328
+ * How each provider expresses this natively, since the vocabularies differ and
329
+ * Anthropic's changed: OpenAI takes `reasoning_effort: <level>`. Anthropic
330
+ * takes `thinking: {type:'disabled'}` for `NONE`, and otherwise
331
+ * `thinking: {type:'adaptive'}` + `output_config: {effort: <level>}` — its
332
+ * accepted set is `low|medium|high|xhigh|max`, so `max` exists there and is
333
+ * deliberately NOT an enum member (OpenAI rejects it, and a level only one
334
+ * provider honours would not be portable). The older
335
+ * `thinking: {type:'enabled', budget_tokens}` form is RETIRED and now 400s.
318
336
  */
319
337
  export var LLMProvider_ReasoningEffort;
320
338
  (function (LLMProvider_ReasoningEffort) {
@@ -348,7 +366,7 @@ export const LLM_MODEL_CATALOG = {
348
366
  [LLM_Model.OPEN_AI_GPT_5_6_SOL]: {
349
367
  providerRef: "openai",
350
368
  availability: LLM_Model_Availability.PRODUCTION,
351
- probedOn: "2026-07-16",
369
+ probedOn: "2026-09-08",
352
370
  applicabilities: [LLM_Model_Applicability.DEEP_JUDGMENT, LLM_Model_Applicability.LONG_CONTEXT_ANALYSIS],
353
371
  ioCapabilities: [
354
372
  LLM_Model_IO_Capability.MULTIMODAL_VISION,
@@ -364,7 +382,7 @@ export const LLM_MODEL_CATALOG = {
364
382
  [LLM_Model.OPEN_AI_GPT_5_6_TERRA]: {
365
383
  providerRef: "openai",
366
384
  availability: LLM_Model_Availability.PRODUCTION,
367
- probedOn: "2026-07-16",
385
+ probedOn: "2026-09-08",
368
386
  applicabilities: [LLM_Model_Applicability.STRUCTURED_AUTHORING, LLM_Model_Applicability.VISUAL_JUDGMENT],
369
387
  ioCapabilities: [
370
388
  LLM_Model_IO_Capability.MULTIMODAL_VISION,
@@ -378,7 +396,7 @@ export const LLM_MODEL_CATALOG = {
378
396
  [LLM_Model.OPEN_AI_GPT_5_6_LUNA]: {
379
397
  providerRef: "openai",
380
398
  availability: LLM_Model_Availability.PRODUCTION,
381
- probedOn: "2026-07-16",
399
+ probedOn: "2026-09-08",
382
400
  applicabilities: [LLM_Model_Applicability.HIGH_VOLUME_MECHANICAL],
383
401
  ioCapabilities: [LLM_Model_IO_Capability.STRUCTURED_OUTPUTS, LLM_Model_IO_Capability.TOOL_USE],
384
402
  thinkingCapability: LLM_Model_Thinking_Capability.OPTIONAL,
@@ -411,14 +429,18 @@ export const LLM_MODEL_CATALOG = {
411
429
  [LLM_Model.OPEN_AI_O4_MINI]: { providerRef: "openai", availability: LLM_Model_Availability.PRODUCTION, probedOn: "2026-07-16", applicabilities: [] },
412
430
  // ---------------------------------------------------------------
413
431
  // Anthropic — ids verified LIVE against `GET /v1/models` (2026-07-16).
414
- // The Claude 5 family reasons ADAPTIVELY and cannot be told not to:
415
- // live, `reasoning: 'none'` → 400 "thinking.type.disabled is not supported
416
- // for this model; thinking defaults to adaptive".
432
+ //
433
+ // Thinking posture re-probed 2026-09-08 and it is PER MODEL, not per family.
434
+ // `claude-fable-5` refuses `thinking: {type:'disabled'}` (400 "…is not
435
+ // supported for this model; thinking defaults to adaptive") — ALWAYS.
436
+ // `claude-sonnet-5` and `claude-opus-5` ACCEPT it (200) — OPTIONAL. All three
437
+ // reject `minimal` and `provider-default` as `output_config.effort` values,
438
+ // whose accepted set is `low|medium|high|xhigh|max`.
417
439
  // ---------------------------------------------------------------
418
440
  [LLM_Model.CLAUDE_FABLE_5]: {
419
441
  providerRef: "anthropic",
420
442
  availability: LLM_Model_Availability.PRODUCTION,
421
- probedOn: "2026-07-16",
443
+ probedOn: "2026-09-08",
422
444
  applicabilities: [
423
445
  LLM_Model_Applicability.DEEP_JUDGMENT,
424
446
  LLM_Model_Applicability.LONG_CONTEXT_ANALYSIS,
@@ -430,13 +452,41 @@ export const LLM_MODEL_CATALOG = {
430
452
  LLM_Model_IO_Capability.TOOL_USE,
431
453
  LLM_Model_IO_Capability.LONG_CONTEXT,
432
454
  ],
455
+ // The ONLY model that still refuses `thinking: {type:'disabled'}` (re-probed
456
+ // 2026-09-08); its two siblings accept it, so this value is not the family's.
433
457
  thinkingCapability: LLM_Model_Thinking_Capability.ALWAYS,
458
+ unsupportedReasoningEfforts: [LLMProvider_ReasoningEffort.MINIMAL, LLMProvider_ReasoningEffort.PROVIDER_DEFAULT],
459
+ rejectsExplicitTemperature: true,
460
+ },
461
+ [LLM_Model.CLAUDE_OPUS_5]: {
462
+ providerRef: "anthropic",
463
+ availability: LLM_Model_Availability.PRODUCTION,
464
+ // Probed live 2026-09-04 by the switch of the ACP coding/research lane onto it (it had been
465
+ // every host-managed session's silent operator default long before it had an enum member).
466
+ // Re-probed 2026-09-08 once it gained an `LLM_SMOKE` entry, which corrected
467
+ // `thinkingCapability` from an inherited ALWAYS to the measured OPTIONAL.
468
+ probedOn: "2026-09-08",
469
+ applicabilities: [
470
+ LLM_Model_Applicability.DEEP_JUDGMENT,
471
+ LLM_Model_Applicability.LONG_CONTEXT_ANALYSIS,
472
+ LLM_Model_Applicability.STRUCTURED_AUTHORING,
473
+ LLM_Model_Applicability.WORKSPACE_CODING_AGENT,
474
+ ],
475
+ ioCapabilities: [
476
+ LLM_Model_IO_Capability.MULTIMODAL_VISION,
477
+ LLM_Model_IO_Capability.STRUCTURED_OUTPUTS,
478
+ LLM_Model_IO_Capability.TOOL_USE,
479
+ LLM_Model_IO_Capability.CODE_GENERATION,
480
+ LLM_Model_IO_Capability.LONG_CONTEXT,
481
+ ],
482
+ thinkingCapability: LLM_Model_Thinking_Capability.OPTIONAL,
483
+ unsupportedReasoningEfforts: [LLMProvider_ReasoningEffort.MINIMAL, LLMProvider_ReasoningEffort.PROVIDER_DEFAULT],
434
484
  rejectsExplicitTemperature: true,
435
485
  },
436
486
  [LLM_Model.CLAUDE_SONNET_5]: {
437
487
  providerRef: "anthropic",
438
488
  availability: LLM_Model_Availability.PRODUCTION,
439
- probedOn: "2026-07-16",
489
+ probedOn: "2026-09-08",
440
490
  applicabilities: [
441
491
  LLM_Model_Applicability.STRUCTURED_AUTHORING,
442
492
  LLM_Model_Applicability.WORKSPACE_CODING_AGENT,
@@ -447,7 +497,8 @@ export const LLM_MODEL_CATALOG = {
447
497
  LLM_Model_IO_Capability.TOOL_USE,
448
498
  LLM_Model_IO_Capability.CODE_GENERATION,
449
499
  ],
450
- thinkingCapability: LLM_Model_Thinking_Capability.ALWAYS,
500
+ thinkingCapability: LLM_Model_Thinking_Capability.OPTIONAL,
501
+ unsupportedReasoningEfforts: [LLMProvider_ReasoningEffort.MINIMAL, LLMProvider_ReasoningEffort.PROVIDER_DEFAULT],
451
502
  rejectsExplicitTemperature: true,
452
503
  },
453
504
  [LLM_Model.CLAUDE_OPUS_4_8]: {
@@ -709,7 +760,28 @@ export const validateReasoningEffortForModel = (model, effort) => {
709
760
  * REJECTS an explicit `temperature`).
710
761
  */
711
762
  export const LLMProvider_OperationModelConfiguration_Schema = z.object({
712
- model: z.string(),
763
+ /**
764
+ * A CONCRETE model id — the escape hatch, and no longer the ordinary way to answer "which model".
765
+ *
766
+ * Declare {@link modelApplicability} instead unless you specifically need THIS id: a fine-tuned
767
+ * or custom deployment, or an agent pinned for a reason worth writing down. Naming an id at each
768
+ * agent is what the applicability axis exists to replace — a monthly model launch then means one
769
+ * catalog edit rather than N definition edits, and nobody has to re-audit which agents should
770
+ * move.
771
+ *
772
+ * Exactly one of `model` / `modelApplicability` must be present (refined below).
773
+ */
774
+ model: z.string().optional(),
775
+ /**
776
+ * The KIND of work this agent does — resolved to a concrete id at agent registration through
777
+ * `resolveModelForApplicability`, against the agent's own `providerRef`.
778
+ *
779
+ * This is the durable form: it survives model launches and retirements, and it states the
780
+ * cost/quality trade the author actually made. Resolution FAILS CLOSED with a named error, so an
781
+ * applicability no model of this provider serves is a startup error rather than a silent
782
+ * substitution.
783
+ */
784
+ modelApplicability: z.enum(LLM_Model_Applicability).optional(),
713
785
  providerRef: z.string(),
714
786
  temperature: z.number().optional(),
715
787
  maxTokens: z.number().optional(),
@@ -735,6 +807,20 @@ export const LLMProvider_OperationModelConfiguration_Schema = z.object({
735
807
  toolingFunctionEnabled: z.boolean().optional(),
736
808
  mcpCompatible: z.boolean().optional(),
737
809
  toolChoice: LLMProvider_ToolChoice_Schema.optional(),
810
+ }).refine((config) => (config.model === undefined) !== (config.modelApplicability === undefined), {
811
+ /*
812
+ * EXACTLY ONE, and both halves of that matter.
813
+ *
814
+ * NEITHER is the state this refinement mainly exists for — `model` used to be required, so
815
+ * omitting it is the new mistake and it must not reach a runtime that then has nothing to call.
816
+ *
817
+ * BOTH is the subtler one: a config carrying an id AND a class states two answers to one
818
+ * question, and whichever the resolver happened to prefer would be a silent decision. It is
819
+ * also exactly how the axis would have died — an applicability that coexists with the id it was
820
+ * meant to replace changes nothing, which is the trap #439 records.
821
+ */
822
+ message: 'An LLM configuration must declare EXACTLY ONE of `model` (a concrete id — the escape hatch for fine-tuned or pinned deployments) or `modelApplicability` (the kind of work, resolved to an id at registration). Declaring both states two answers to one question; declaring neither leaves nothing to call.',
823
+ path: ['model'],
738
824
  });
739
825
  /** @wildo_source:part:end saas.external-providers.llm.model-configuration */
740
826
  // ===============================================================