@futdevpro/fsm-dynamo 1.16.19 → 1.16.22

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 (26) hide show
  1. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.d.ts +0 -11
  2. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.d.ts.map +1 -1
  3. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js +48 -2
  4. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js.map +1 -1
  5. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.d.ts +6 -0
  6. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.d.ts.map +1 -1
  7. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js +6 -0
  8. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js.map +1 -1
  9. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.d.ts +0 -10
  10. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.d.ts.map +1 -1
  11. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js +34 -0
  12. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js.map +1 -1
  13. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.d.ts +6 -0
  14. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.d.ts.map +1 -1
  15. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js +6 -0
  16. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js.map +1 -1
  17. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.d.ts +0 -10
  18. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.d.ts.map +1 -1
  19. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js +97 -0
  20. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js.map +1 -1
  21. package/package.json +1 -1
  22. package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +51 -2
  23. package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +6 -0
  24. package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +38 -0
  25. package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +6 -0
  26. package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +103 -0
@@ -1,14 +1,3 @@
1
1
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
2
- /**
3
- * Anthropic Claude model registry — verified 2026-06-01 against platform.claude.com docs.
4
- *
5
- * All Claude models are chat (Messages API) models — Anthropic has NO embeddings API.
6
- * Tool use is universal (content-block `tool_use` / `tool_result` wire format).
7
- * Anthropic has no dedicated JSON-mode flag (structured output is done via tools),
8
- * so `jsonMode` is false across the board.
9
- *
10
- * Param note (translator): Opus 4.7+ reject `temperature`/`top_p`/`top_k` with 400 —
11
- * not modelled here, handled in the Anthropic call translator.
12
- */
13
2
  export declare const DyFM_AAI_Models: DyFM_AI_ModelInfo[];
14
3
  //# sourceMappingURL=aai-models.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAgE9C,CAAC"}
1
+ {"version":3,"file":"aai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AA4D7E,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAmE9C,CAAC"}
@@ -12,9 +12,52 @@ const aai_model_enum_1 = require("../_enums/aai-model.enum");
12
12
  * Anthropic has no dedicated JSON-mode flag (structured output is done via tools),
13
13
  * so `jsonMode` is false across the board.
14
14
  *
15
- * Param note (translator): Opus 4.7+ reject `temperature`/`top_p`/`top_k` with 400
16
- * not modelled here, handled in the Anthropic call translator.
15
+ * Param note (FR-048): Opus 4.7+ reject `temperature`/`top_p`/`top_k` with 400. This IS now
16
+ * modelled here via `settingsSchema.unsupported` the general reconciler drops them before the
17
+ * call. The Anthropic translator's local param-drop (FR-047 Phase 4) becomes redundant once it
18
+ * delegates to the reconciler. See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
17
19
  */
20
+ /**
21
+ * Opus 4.7+ REJECT the sampling params with HTTP 400 on any non-default value.
22
+ *
23
+ * Source: `FR-048-per-model-agnostic-settings.md` §Problem + `ai-per-model-settings.md` table +
24
+ * the FR-047 Phase-4 Anthropic translator precursor. Verified 2026-06-01.
25
+ */
26
+ const AAI_OPUS_SETTINGS = {
27
+ supported: ['maxTokens'],
28
+ unsupported: ['temperature', 'topP', 'topK'],
29
+ constraints: {
30
+ maxTokens: {
31
+ note: 'Messages API: "Different models have different maximum values for this parameter" — the per-model ' +
32
+ 'cap lives in `maxOutputTokens`, so no global min/max is encoded. Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
33
+ },
34
+ },
35
+ };
36
+ /**
37
+ * Sonnet / Haiku still ACCEPT the sampling params (only Opus 4.7+ rejects them).
38
+ *
39
+ * **Fontos provider-kulonbseg:** az Anthropic `temperature` maximuma **1.0**, NEM 2.0 mint az OpenAI-nal —
40
+ * egy OpenAI-nal ervenyes `temperature: 1.5` itt ervenytelen. A validator ezt most elkapja.
41
+ * `topP` / `topK`: az API-referencia NEM ad meg szamszeru hatarokat → szandekosan nem kodolunk bele semmit.
42
+ * Forras: platform.claude.com/docs/en/api/messages, verified 2026-07-21.
43
+ */
44
+ const AAI_STANDARD_SETTINGS = {
45
+ supported: ['temperature', 'maxTokens', 'topP'],
46
+ extraParams: ['topK'],
47
+ constraints: {
48
+ temperature: {
49
+ min: 0,
50
+ max: 1,
51
+ default: 1,
52
+ note: 'Anthropic: "Defaults to 1.0. Ranges from 0.0 to 1.0." — NOTE: half the OpenAI max (2.0). ' +
53
+ 'Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
54
+ },
55
+ maxTokens: {
56
+ note: 'Messages API: "Different models have different maximum values for this parameter" — the per-model ' +
57
+ 'cap lives in `maxOutputTokens`. Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
58
+ },
59
+ },
60
+ };
18
61
  exports.DyFM_AAI_Models = [
19
62
  {
20
63
  id: aai_model_enum_1.DyFM_AAI_Model.claude_opus_4_8,
@@ -22,6 +65,7 @@ exports.DyFM_AAI_Models = [
22
65
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
23
66
  displayName: 'Claude Opus 4.8',
24
67
  tier: 'Opus',
68
+ settingsSchema: AAI_OPUS_SETTINGS,
25
69
  status: 'ga',
26
70
  contextWindow: 1_000_000,
27
71
  maxOutputTokens: 128_000,
@@ -43,6 +87,7 @@ exports.DyFM_AAI_Models = [
43
87
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
44
88
  displayName: 'Claude Sonnet 4.6',
45
89
  tier: 'Sonnet',
90
+ settingsSchema: AAI_STANDARD_SETTINGS,
46
91
  status: 'ga',
47
92
  contextWindow: 1_000_000,
48
93
  maxOutputTokens: 64_000,
@@ -64,6 +109,7 @@ exports.DyFM_AAI_Models = [
64
109
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
65
110
  displayName: 'Claude Haiku 4.5',
66
111
  tier: 'Haiku',
112
+ settingsSchema: AAI_STANDARD_SETTINGS,
67
113
  status: 'ga',
68
114
  contextWindow: 200_000,
69
115
  maxOutputTokens: 64_000,
@@ -1 +1 @@
1
- {"version":3,"file":"aai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,6DAA0D;AAE1D;;;;;;;;;;GAUG;AACU,QAAA,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,+BAAc,CAAC,eAAe;QAClC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,iBAAiB;QACpC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,gBAAgB;QACnC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"aai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAGvE,6DAA0D;AAE1D;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,iBAAiB,GAAgC;IACrD,SAAS,EAAE,CAAE,WAAW,CAAE;IAC1B,WAAW,EAAE,CAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAE;IAC9C,WAAW,EAAE;QACX,SAAS,EAAE;YACT,IAAI,EAAE,oGAAoG;gBACxG,yIAAyI;SAC5I;KACF;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAgC;IACzD,SAAS,EAAE,CAAE,aAAa,EAAE,WAAW,EAAE,MAAM,CAAE;IACjD,WAAW,EAAE,CAAE,MAAM,CAAE;IACvB,WAAW,EAAE;QACX,WAAW,EAAE;YACX,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,2FAA2F;gBAC/F,wEAAwE;SAC3E;QACD,SAAS,EAAE;YACT,IAAI,EAAE,oGAAoG;gBACxG,wGAAwG;SAC3G;KACF;CACF,CAAC;AACW,QAAA,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,+BAAc,CAAC,eAAe;QAClC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,MAAM;QACZ,cAAc,EAAE,iBAAiB;QACjC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,OAAO;QACxB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,iBAAiB;QACpC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,mBAAmB;QAChC,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,qBAAqB;QACrC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,gBAAgB;QACnC,QAAQ,EAAE,mCAAgB,CAAC,SAAS;QACpC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,OAAO;QACb,cAAc,EAAE,qBAAqB;QACrC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
@@ -7,6 +7,12 @@ import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
7
7
  * backing gateway/model — `functionCalling` is declared true on the assumption the
8
8
  * gateway forwards OpenAI-style tools; confirm against the live FDP-AI deployment.
9
9
  * Context window is gateway-defined and therefore left unset.
10
+ *
11
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset. Which tuning params the gateway
12
+ * actually accepts depends on the backing model it proxies to, and there is no verified record of that
13
+ * yet; encoding a guess could make the reconciler drop params the gateway does accept. With no schema the
14
+ * reconciler stays permissive (debug-logged). Populate once measured against the live gateway.
15
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
10
16
  */
11
17
  export declare const DyFM_FdpAI_Models: DyFM_AI_ModelInfo[];
12
18
  //# sourceMappingURL=fdpai-models.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fdpai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAmBhD,CAAC"}
1
+ {"version":3,"file":"fdpai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,EAmBhD,CAAC"}
@@ -12,6 +12,12 @@ const fdpai_model_enum_1 = require("../_enums/fdpai-model.enum");
12
12
  * backing gateway/model — `functionCalling` is declared true on the assumption the
13
13
  * gateway forwards OpenAI-style tools; confirm against the live FDP-AI deployment.
14
14
  * Context window is gateway-defined and therefore left unset.
15
+ *
16
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset. Which tuning params the gateway
17
+ * actually accepts depends on the backing model it proxies to, and there is no verified record of that
18
+ * yet; encoding a guess could make the reconciler drop params the gateway does accept. With no schema the
19
+ * reconciler stays permissive (debug-logged). Populate once measured against the live gateway.
20
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
15
21
  */
16
22
  exports.DyFM_FdpAI_Models = [
17
23
  {
@@ -1 +1 @@
1
- {"version":3,"file":"fdpai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,iEAA8D;AAE9D;;;;;;;;GAQG;AACU,QAAA,iBAAiB,GAAwB;IACpD;QACE,EAAE,EAAE,mCAAgB,CAAC,QAAQ;QAC7B,QAAQ,EAAE,mCAAgB,CAAC,KAAK;QAChC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI,EAAE,2DAA2D;YAClF,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"fdpai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,iEAA8D;AAE9D;;;;;;;;;;;;;;GAcG;AACU,QAAA,iBAAiB,GAAwB;IACpD;QACE,EAAE,EAAE,mCAAgB,CAAC,QAAQ;QAC7B,QAAQ,EAAE,mCAAgB,CAAC,KAAK;QAChC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,YAAY;QACzB,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI,EAAE,2DAA2D;YAClF,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
@@ -1,13 +1,3 @@
1
1
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
2
- /**
3
- * Google Gemini model registry — verified 2026-06-01 against ai.google.dev docs.
4
- *
5
- * SDK note: depend on `@google/genai` (the old `@google/generative-ai` was sunset
6
- * 2025-11-30). Tool use via `functionDeclarations`; tool results are returned under
7
- * a `user`-role `functionResponse` part (no dedicated tool role).
8
- *
9
- * Video input is a real Gemini capability but is not yet modelled in
10
- * {@link DyFM_AI_ModelCapabilities} — `vision` covers image input only.
11
- */
12
2
  export declare const DyFM_GAI_Models: DyFM_AI_ModelInfo[];
13
3
  //# sourceMappingURL=gai-models.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAmF9C,CAAC"}
1
+ {"version":3,"file":"gai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AA+C7E,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAuF9C,CAAC"}
@@ -14,6 +14,36 @@ const gai_model_enum_1 = require("../_enums/gai-model.enum");
14
14
  * Video input is a real Gemini capability but is not yet modelled in
15
15
  * {@link DyFM_AI_ModelCapabilities} — `vision` covers image input only.
16
16
  */
17
+ /**
18
+ * Gemini chat — a param-vokabular MAS, mint az OpenAI-e (FR-048 §Problem).
19
+ *
20
+ * Az agnosztikus `frequencyPenalty`/`presencePenalty` NEM resze a Gemini feluletnek, ezert `unsupported`:
21
+ * a reconciler eldobja oket. (A dropolas mindig biztonsagos — a Gemini ugysem ertelmezne oket.) A
22
+ * Gemini-specifikus knobok `extraParams`-kent utaznak; a nativ kepzes a provider-translator dolga.
23
+ * Forras: FR-048 §Problem + `ai-per-model-settings.md` tabla; verified 2026-06-01.
24
+ */
25
+ const GAI_CHAT_SETTINGS = {
26
+ supported: ['temperature', 'maxTokens', 'topP'],
27
+ unsupported: ['frequencyPenalty', 'presencePenalty'],
28
+ extraParams: ['topK', 'candidateCount', 'responseSchema', 'thinkingConfig', 'toolConfig'],
29
+ };
30
+ /**
31
+ * Mint {@link GAI_CHAT_SETTINGS}, de rogziti a Pro-preview NEM-nyilvanvalo default-jat: ha a hivas nem ad
32
+ * `maxOutputTokens`-t, a szerver **8192**-re defaultol (NEM a 65536-os maximumra). Forras: FR-048 §Problem.
33
+ */
34
+ const GAI_PRO_PREVIEW_SETTINGS = {
35
+ ...GAI_CHAT_SETTINGS,
36
+ constraints: {
37
+ maxTokens: {
38
+ default: 8192,
39
+ note: 'Gemini 3.1 Pro preview: omitted maxOutputTokens → server default 8192 (not the 65536 max). FR-048, verified 2026-06-01.',
40
+ },
41
+ },
42
+ };
43
+ /** Embedding-modell: chat-sampling paramok nem ertelmezettek → a reconciler eldobja oket. */
44
+ const GAI_EMBEDDING_SETTINGS = {
45
+ unsupported: ['temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens'],
46
+ };
17
47
  exports.DyFM_GAI_Models = [
18
48
  {
19
49
  id: gai_model_enum_1.DyFM_GAI_Model.gemini_3_5_flash,
@@ -21,6 +51,7 @@ exports.DyFM_GAI_Models = [
21
51
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
22
52
  displayName: 'Gemini 3.5 Flash',
23
53
  tier: 'flash',
54
+ settingsSchema: GAI_CHAT_SETTINGS,
24
55
  status: 'ga',
25
56
  contextWindow: 1_048_576,
26
57
  maxOutputTokens: 65_536,
@@ -42,6 +73,7 @@ exports.DyFM_GAI_Models = [
42
73
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
43
74
  displayName: 'Gemini 3.1 Pro (preview)',
44
75
  tier: 'pro',
76
+ settingsSchema: GAI_PRO_PREVIEW_SETTINGS,
45
77
  status: 'preview',
46
78
  contextWindow: 1_048_576,
47
79
  maxOutputTokens: 65_536,
@@ -63,6 +95,7 @@ exports.DyFM_GAI_Models = [
63
95
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
64
96
  displayName: 'Gemini 3.1 Flash-Lite',
65
97
  tier: 'flash-lite',
98
+ settingsSchema: GAI_CHAT_SETTINGS,
66
99
  status: 'ga',
67
100
  contextWindow: 1_048_576,
68
101
  maxOutputTokens: 65_536,
@@ -84,6 +117,7 @@ exports.DyFM_GAI_Models = [
84
117
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Embedding,
85
118
  displayName: 'Gemini Embedding 2',
86
119
  status: 'ga',
120
+ settingsSchema: GAI_EMBEDDING_SETTINGS,
87
121
  contextWindow: 8_192,
88
122
  capabilities: {
89
123
  functionCalling: false,
@@ -1 +1 @@
1
- {"version":3,"file":"gai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,6DAA0D;AAE1D;;;;;;;;;GASG;AACU,QAAA,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,+BAAc,CAAC,gBAAgB;QACnC,QAAQ,EAAE,mCAAgB,CAAC,MAAM;QACjC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,kBAAkB;QAC/B,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,sBAAsB;QACzC,QAAQ,EAAE,mCAAgB,CAAC,MAAM;QACjC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,qBAAqB;QACxC,QAAQ,EAAE,mCAAgB,CAAC,MAAM;QACjC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,SAAS;QACxB,eAAe,EAAE,MAAM;QACvB,YAAY,EAAE;YACZ,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,kBAAkB;QACrC,QAAQ,EAAE,mCAAgB,CAAC,MAAM;QACjC,SAAS,EAAE,sCAAiB,CAAC,SAAS;QACtC,WAAW,EAAE,oBAAoB;QACjC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,KAAK;QACpB,YAAY,EAAE;YACZ,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,IAAI,EAAE,8CAA8C;YAC5D,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"gai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,12 @@ import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
8
8
  * In particular `functionCalling` is left FALSE here because many local models
9
9
  * do not support tool calling; it must be confirmed per loaded model rather than
10
10
  * assumed. Context window is model-defined and therefore left unset.
11
+ *
12
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset here. The accepted tuning-param
13
+ * surface of a local model is decided by whatever the user loaded into the backend at runtime, so it is
14
+ * not knowable ahead of time; inventing one would be a guess. With no schema the reconciler stays
15
+ * permissive (passes settings through, with a debug log) — the honest best-effort behaviour.
16
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
11
17
  */
12
18
  export declare const DyFM_LAI_Models: DyFM_AI_ModelInfo[];
13
19
  //# sourceMappingURL=lai-models.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAqC9C,CAAC"}
1
+ {"version":3,"file":"lai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAqC9C,CAAC"}
@@ -13,6 +13,12 @@ const lai_model_enum_1 = require("../_enums/lai-model.enum");
13
13
  * In particular `functionCalling` is left FALSE here because many local models
14
14
  * do not support tool calling; it must be confirmed per loaded model rather than
15
15
  * assumed. Context window is model-defined and therefore left unset.
16
+ *
17
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset here. The accepted tuning-param
18
+ * surface of a local model is decided by whatever the user loaded into the backend at runtime, so it is
19
+ * not knowable ahead of time; inventing one would be a guess. With no schema the reconciler stays
20
+ * permissive (passes settings through, with a debug log) — the honest best-effort behaviour.
21
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
16
22
  */
17
23
  exports.DyFM_LAI_Models = [
18
24
  {
@@ -1 +1 @@
1
- {"version":3,"file":"lai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,6DAA0D;AAE1D;;;;;;;;;GASG;AACU,QAAA,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,+BAAc,CAAC,WAAW;QAC9B,QAAQ,EAAE,mCAAgB,CAAC,OAAO;QAClC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,mBAAmB;QAChC,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,KAAK,EAAE,qDAAqD;YAC7E,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,cAAc;QACjC,QAAQ,EAAE,mCAAgB,CAAC,OAAO;QAClC,SAAS,EAAE,sCAAiB,CAAC,SAAS;QACtC,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"lai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AACpE,2EAAuE;AAEvE,6DAA0D;AAE1D;;;;;;;;;;;;;;;GAeG;AACU,QAAA,eAAe,GAAwB;IAClD;QACE,EAAE,EAAE,+BAAc,CAAC,WAAW;QAC9B,QAAQ,EAAE,mCAAgB,CAAC,OAAO;QAClC,SAAS,EAAE,sCAAiB,CAAC,IAAI;QACjC,WAAW,EAAE,mBAAmB;QAChC,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,KAAK,EAAE,qDAAqD;YAC7E,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACpB;KACF;IACD;QACE,EAAE,EAAE,+BAAc,CAAC,cAAc;QACjC,QAAQ,EAAE,mCAAgB,CAAC,OAAO;QAClC,SAAS,EAAE,sCAAiB,CAAC,SAAS;QACtC,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE;YACZ,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;SACpB;KACF;CACF,CAAC"}
@@ -1,13 +1,3 @@
1
1
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
2
- /**
3
- * OpenAI model registry — verified 2026-06-01 against developers.openai.com docs.
4
- *
5
- * Contains current GA + still-callable legacy models. Retired models are omitted;
6
- * sunsetting ones carry `status: 'deprecated'` + `successorId` + `sunsetDate`.
7
- *
8
- * Tool-calling note: native function calling is universal across current OpenAI
9
- * chat models. The `-pro` reasoning models support tools but NOT streaming and
10
- * are Responses-API-only — reflected in `capabilities.streaming`.
11
- */
12
2
  export declare const DyFM_OAI_Models: DyFM_AI_ModelInfo[];
13
3
  //# sourceMappingURL=oai-models.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAG7E;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,EA4O9C,CAAC"}
1
+ {"version":3,"file":"oai-models.const.d.ts","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAyG7E,eAAO,MAAM,eAAe,EAAE,iBAAiB,EAuP9C,CAAC"}
@@ -13,7 +13,93 @@ const oai_model_enum_1 = require("../_enums/oai-model.enum");
13
13
  * Tool-calling note: native function calling is universal across current OpenAI
14
14
  * chat models. The `-pro` reasoning models support tools but NOT streaming and
15
15
  * are Responses-API-only — reflected in `capabilities.streaming`.
16
+ *
17
+ * Settings note (FR-048): `settingsSchema` is now populated — it records which tuning
18
+ * params each model ACCEPTS/REJECTS, so the reconciler can drop model-rejected params
19
+ * before the call instead of hard-failing with HTTP 400. See
20
+ * `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
21
+ */
22
+ /**
23
+ * Reasoning models (`gpt-5.x`, `o`-series) REJECT the sampling params with HTTP 400 and
24
+ * instead expose a `reasoningEffort` knob.
25
+ *
26
+ * Source: FR-047 code-review fix `514153f` (`isReasoningModel` = `/^gpt-5/ || /^o[0-9]/`,
27
+ * which omits the 4 sampling params) + `FR-048-per-model-agnostic-settings.md` §Problem.
28
+ * Verified 2026-06-01. Numeric ranges for other params are intentionally NOT encoded yet —
29
+ * pending the provider-doc capture pass (a wrong clamp would silently alter live calls).
30
+ */
31
+ const OAI_REASONING_SETTINGS = {
32
+ supported: ['maxTokens'],
33
+ unsupported: ['temperature', 'topP', 'frequencyPenalty', 'presencePenalty'],
34
+ extraParams: ['reasoningEffort'],
35
+ constraints: {
36
+ reasoningEffort: {
37
+ allowed: ['none', 'low', 'medium', 'high', 'xhigh'],
38
+ note: 'Reasoning-only knob; non-reasoning models have none. Source: FR-048 §Problem, verified 2026-06-01.',
39
+ },
40
+ },
41
+ };
42
+ /**
43
+ * Non-reasoning chat models (`gpt-4o` family) accept the classic sampling params.
44
+ *
45
+ * Numeric bounds captured from the official OpenAI API reference
46
+ * (https://developers.openai.com/api/reference — fetched 2026-07-21). The docs state the ranges but
47
+ * do NOT document default values, so no `default` is encoded here (an invented default would be a guess).
48
+ */
49
+ const OAI_CLASSIC_CHAT_SETTINGS = {
50
+ supported: ['temperature', 'maxTokens', 'topP', 'frequencyPenalty', 'presencePenalty'],
51
+ constraints: {
52
+ temperature: {
53
+ min: 0,
54
+ max: 2,
55
+ note: 'OpenAI: "between 0 and 2". Source: developers.openai.com API reference, verified 2026-07-21.',
56
+ },
57
+ topP: {
58
+ min: 0,
59
+ max: 1,
60
+ note: 'OpenAI nucleus sampling: "between 0 and 1". Source: developers.openai.com API reference, verified 2026-07-21.',
61
+ },
62
+ frequencyPenalty: {
63
+ min: -2,
64
+ max: 2,
65
+ note: 'OpenAI: "Number between -2.0 and 2.0". Source: developers.openai.com API reference, verified 2026-07-21.',
66
+ },
67
+ presencePenalty: {
68
+ min: -2,
69
+ max: 2,
70
+ note: 'OpenAI: "Number between -2.0 and 2.0". Source: developers.openai.com API reference, verified 2026-07-21.',
71
+ },
72
+ },
73
+ };
74
+ /**
75
+ * Embedding models take no sampling params; the one real knob is `dimensions`.
76
+ *
77
+ * The sampling params are listed as `unsupported` so the reconciler DROPS them — dropping a
78
+ * meaningless param from an embeddings call is always safe, regardless of whether the API
79
+ * would 400 or silently ignore it. Max/default dims per the `DyFM_OAI_Model` JSDoc (verified 2026-06).
80
+ */
81
+ const OAI_EMBEDDING_SETTINGS_SMALL = {
82
+ unsupported: ['temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens'],
83
+ extraParams: ['dimensions'],
84
+ constraints: {
85
+ dimensions: { max: 1536, default: 1536, note: 'text-embedding-3-small native dims (Matryoshka truncation allowed below max).' },
86
+ },
87
+ };
88
+ /** As {@link OAI_EMBEDDING_SETTINGS_SMALL}, with the 3-large native dimension count. */
89
+ const OAI_EMBEDDING_SETTINGS_LARGE = {
90
+ unsupported: ['temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens'],
91
+ extraParams: ['dimensions'],
92
+ constraints: {
93
+ dimensions: { max: 3072, default: 3072, note: 'text-embedding-3-large native dims (Matryoshka truncation allowed below max).' },
94
+ },
95
+ };
96
+ /**
97
+ * Image-generation models take no chat sampling params (dropped by the reconciler).
98
+ * The image-specific knobs (size / quality / background) are NOT encoded yet — pending doc capture (D4).
16
99
  */
100
+ const OAI_IMAGE_SETTINGS = {
101
+ unsupported: ['temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens'],
102
+ };
17
103
  exports.DyFM_OAI_Models = [
18
104
  // ── Chat / reasoning (current GA) ──
19
105
  {
@@ -22,6 +108,7 @@ exports.DyFM_OAI_Models = [
22
108
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
23
109
  displayName: 'GPT-5.5',
24
110
  tier: 'flagship',
111
+ settingsSchema: OAI_REASONING_SETTINGS,
25
112
  status: 'ga',
26
113
  contextWindow: 1_050_000,
27
114
  maxOutputTokens: 128_000,
@@ -43,6 +130,7 @@ exports.DyFM_OAI_Models = [
43
130
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
44
131
  displayName: 'GPT-5.5 Pro',
45
132
  tier: 'pro',
133
+ settingsSchema: OAI_REASONING_SETTINGS,
46
134
  status: 'ga',
47
135
  contextWindow: 1_050_000,
48
136
  maxOutputTokens: 128_000,
@@ -64,6 +152,7 @@ exports.DyFM_OAI_Models = [
64
152
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
65
153
  displayName: 'GPT-5.4',
66
154
  tier: 'flagship',
155
+ settingsSchema: OAI_REASONING_SETTINGS,
67
156
  status: 'ga',
68
157
  contextWindow: 1_000_000,
69
158
  maxOutputTokens: 128_000,
@@ -85,6 +174,7 @@ exports.DyFM_OAI_Models = [
85
174
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
86
175
  displayName: 'GPT-5.4 mini',
87
176
  tier: 'mini',
177
+ settingsSchema: OAI_REASONING_SETTINGS,
88
178
  status: 'ga',
89
179
  contextWindow: 400_000,
90
180
  maxOutputTokens: 128_000,
@@ -106,6 +196,7 @@ exports.DyFM_OAI_Models = [
106
196
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
107
197
  displayName: 'GPT-5.4 nano',
108
198
  tier: 'nano',
199
+ settingsSchema: OAI_REASONING_SETTINGS,
109
200
  status: 'ga',
110
201
  contextWindow: 400_000,
111
202
  maxOutputTokens: 128_000,
@@ -127,6 +218,7 @@ exports.DyFM_OAI_Models = [
127
218
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
128
219
  displayName: 'o3-pro',
129
220
  tier: 'pro',
221
+ settingsSchema: OAI_REASONING_SETTINGS,
130
222
  status: 'ga',
131
223
  contextWindow: 200_000,
132
224
  maxOutputTokens: 100_000,
@@ -149,6 +241,7 @@ exports.DyFM_OAI_Models = [
149
241
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
150
242
  displayName: 'GPT-4o',
151
243
  tier: 'legacy',
244
+ settingsSchema: OAI_CLASSIC_CHAT_SETTINGS,
152
245
  status: 'deprecated',
153
246
  successorId: oai_model_enum_1.DyFM_OAI_Model.gpt54_mini,
154
247
  sunsetDate: '2026-10-23',
@@ -172,6 +265,7 @@ exports.DyFM_OAI_Models = [
172
265
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Chat,
173
266
  displayName: 'GPT-4o mini',
174
267
  tier: 'legacy',
268
+ settingsSchema: OAI_CLASSIC_CHAT_SETTINGS,
175
269
  status: 'deprecated',
176
270
  successorId: oai_model_enum_1.DyFM_OAI_Model.gpt54_mini,
177
271
  sunsetDate: '2026-10-23',
@@ -196,6 +290,7 @@ exports.DyFM_OAI_Models = [
196
290
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Embedding,
197
291
  displayName: 'text-embedding-3-small',
198
292
  status: 'ga',
293
+ settingsSchema: OAI_EMBEDDING_SETTINGS_SMALL,
199
294
  contextWindow: 8_191,
200
295
  capabilities: {
201
296
  functionCalling: false,
@@ -215,6 +310,7 @@ exports.DyFM_OAI_Models = [
215
310
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Embedding,
216
311
  displayName: 'text-embedding-3-large',
217
312
  status: 'ga',
313
+ settingsSchema: OAI_EMBEDDING_SETTINGS_LARGE,
218
314
  contextWindow: 8_191,
219
315
  capabilities: {
220
316
  functionCalling: false,
@@ -235,6 +331,7 @@ exports.DyFM_OAI_Models = [
235
331
  modelType: ai_model_type_enum_1.DyFM_AI_ModelType.Image,
236
332
  displayName: 'GPT Image 2',
237
333
  status: 'ga',
334
+ settingsSchema: OAI_IMAGE_SETTINGS,
238
335
  capabilities: {
239
336
  functionCalling: false,
240
337
  vision: true, // accepts image input for editing
@@ -1 +1 @@
1
- {"version":3,"file":"oai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oai-models.const.js","sourceRoot":"","sources":["../../../../../../src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "01.16.19",
3
+ "version": "01.16.22",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",
@@ -1,6 +1,7 @@
1
1
  import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
2
2
  import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
3
3
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
4
+ import { DyFM_AI_ModelSettingsSchema } from '../../../_models/ai-model-settings-schema.interface';
4
5
  import { DyFM_AAI_Model } from '../_enums/aai-model.enum';
5
6
 
6
7
  /**
@@ -11,9 +12,54 @@ import { DyFM_AAI_Model } from '../_enums/aai-model.enum';
11
12
  * Anthropic has no dedicated JSON-mode flag (structured output is done via tools),
12
13
  * so `jsonMode` is false across the board.
13
14
  *
14
- * Param note (translator): Opus 4.7+ reject `temperature`/`top_p`/`top_k` with 400
15
- * not modelled here, handled in the Anthropic call translator.
15
+ * Param note (FR-048): Opus 4.7+ reject `temperature`/`top_p`/`top_k` with 400. This IS now
16
+ * modelled here via `settingsSchema.unsupported` the general reconciler drops them before the
17
+ * call. The Anthropic translator's local param-drop (FR-047 Phase 4) becomes redundant once it
18
+ * delegates to the reconciler. See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
16
19
  */
20
+
21
+ /**
22
+ * Opus 4.7+ REJECT the sampling params with HTTP 400 on any non-default value.
23
+ *
24
+ * Source: `FR-048-per-model-agnostic-settings.md` §Problem + `ai-per-model-settings.md` table +
25
+ * the FR-047 Phase-4 Anthropic translator precursor. Verified 2026-06-01.
26
+ */
27
+ const AAI_OPUS_SETTINGS: DyFM_AI_ModelSettingsSchema = {
28
+ supported: [ 'maxTokens' ],
29
+ unsupported: [ 'temperature', 'topP', 'topK' ],
30
+ constraints: {
31
+ maxTokens: {
32
+ note: 'Messages API: "Different models have different maximum values for this parameter" — the per-model ' +
33
+ 'cap lives in `maxOutputTokens`, so no global min/max is encoded. Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
34
+ },
35
+ },
36
+ };
37
+
38
+ /**
39
+ * Sonnet / Haiku still ACCEPT the sampling params (only Opus 4.7+ rejects them).
40
+ *
41
+ * **Fontos provider-kulonbseg:** az Anthropic `temperature` maximuma **1.0**, NEM 2.0 mint az OpenAI-nal —
42
+ * egy OpenAI-nal ervenyes `temperature: 1.5` itt ervenytelen. A validator ezt most elkapja.
43
+ * `topP` / `topK`: az API-referencia NEM ad meg szamszeru hatarokat → szandekosan nem kodolunk bele semmit.
44
+ * Forras: platform.claude.com/docs/en/api/messages, verified 2026-07-21.
45
+ */
46
+ const AAI_STANDARD_SETTINGS: DyFM_AI_ModelSettingsSchema = {
47
+ supported: [ 'temperature', 'maxTokens', 'topP' ],
48
+ extraParams: [ 'topK' ],
49
+ constraints: {
50
+ temperature: {
51
+ min: 0,
52
+ max: 1,
53
+ default: 1,
54
+ note: 'Anthropic: "Defaults to 1.0. Ranges from 0.0 to 1.0." — NOTE: half the OpenAI max (2.0). ' +
55
+ 'Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
56
+ },
57
+ maxTokens: {
58
+ note: 'Messages API: "Different models have different maximum values for this parameter" — the per-model ' +
59
+ 'cap lives in `maxOutputTokens`. Source: platform.claude.com/docs/en/api/messages, verified 2026-07-21.',
60
+ },
61
+ },
62
+ };
17
63
  export const DyFM_AAI_Models: DyFM_AI_ModelInfo[] = [
18
64
  {
19
65
  id: DyFM_AAI_Model.claude_opus_4_8,
@@ -21,6 +67,7 @@ export const DyFM_AAI_Models: DyFM_AI_ModelInfo[] = [
21
67
  modelType: DyFM_AI_ModelType.Chat,
22
68
  displayName: 'Claude Opus 4.8',
23
69
  tier: 'Opus',
70
+ settingsSchema: AAI_OPUS_SETTINGS,
24
71
  status: 'ga',
25
72
  contextWindow: 1_000_000,
26
73
  maxOutputTokens: 128_000,
@@ -42,6 +89,7 @@ export const DyFM_AAI_Models: DyFM_AI_ModelInfo[] = [
42
89
  modelType: DyFM_AI_ModelType.Chat,
43
90
  displayName: 'Claude Sonnet 4.6',
44
91
  tier: 'Sonnet',
92
+ settingsSchema: AAI_STANDARD_SETTINGS,
45
93
  status: 'ga',
46
94
  contextWindow: 1_000_000,
47
95
  maxOutputTokens: 64_000,
@@ -63,6 +111,7 @@ export const DyFM_AAI_Models: DyFM_AI_ModelInfo[] = [
63
111
  modelType: DyFM_AI_ModelType.Chat,
64
112
  displayName: 'Claude Haiku 4.5',
65
113
  tier: 'Haiku',
114
+ settingsSchema: AAI_STANDARD_SETTINGS,
66
115
  status: 'ga',
67
116
  contextWindow: 200_000,
68
117
  maxOutputTokens: 64_000,
@@ -11,6 +11,12 @@ import { DyFM_FdpAI_Model } from '../_enums/fdpai-model.enum';
11
11
  * backing gateway/model — `functionCalling` is declared true on the assumption the
12
12
  * gateway forwards OpenAI-style tools; confirm against the live FDP-AI deployment.
13
13
  * Context window is gateway-defined and therefore left unset.
14
+ *
15
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset. Which tuning params the gateway
16
+ * actually accepts depends on the backing model it proxies to, and there is no verified record of that
17
+ * yet; encoding a guess could make the reconciler drop params the gateway does accept. With no schema the
18
+ * reconciler stays permissive (debug-logged). Populate once measured against the live gateway.
19
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
14
20
  */
15
21
  export const DyFM_FdpAI_Models: DyFM_AI_ModelInfo[] = [
16
22
  {
@@ -1,6 +1,7 @@
1
1
  import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
2
2
  import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
3
3
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
4
+ import { DyFM_AI_ModelSettingsSchema } from '../../../_models/ai-model-settings-schema.interface';
4
5
  import { DyFM_GAI_Model } from '../_enums/gai-model.enum';
5
6
 
6
7
  /**
@@ -13,6 +14,39 @@ import { DyFM_GAI_Model } from '../_enums/gai-model.enum';
13
14
  * Video input is a real Gemini capability but is not yet modelled in
14
15
  * {@link DyFM_AI_ModelCapabilities} — `vision` covers image input only.
15
16
  */
17
+ /**
18
+ * Gemini chat — a param-vokabular MAS, mint az OpenAI-e (FR-048 §Problem).
19
+ *
20
+ * Az agnosztikus `frequencyPenalty`/`presencePenalty` NEM resze a Gemini feluletnek, ezert `unsupported`:
21
+ * a reconciler eldobja oket. (A dropolas mindig biztonsagos — a Gemini ugysem ertelmezne oket.) A
22
+ * Gemini-specifikus knobok `extraParams`-kent utaznak; a nativ kepzes a provider-translator dolga.
23
+ * Forras: FR-048 §Problem + `ai-per-model-settings.md` tabla; verified 2026-06-01.
24
+ */
25
+ const GAI_CHAT_SETTINGS: DyFM_AI_ModelSettingsSchema = {
26
+ supported: [ 'temperature', 'maxTokens', 'topP' ],
27
+ unsupported: [ 'frequencyPenalty', 'presencePenalty' ],
28
+ extraParams: [ 'topK', 'candidateCount', 'responseSchema', 'thinkingConfig', 'toolConfig' ],
29
+ };
30
+
31
+ /**
32
+ * Mint {@link GAI_CHAT_SETTINGS}, de rogziti a Pro-preview NEM-nyilvanvalo default-jat: ha a hivas nem ad
33
+ * `maxOutputTokens`-t, a szerver **8192**-re defaultol (NEM a 65536-os maximumra). Forras: FR-048 §Problem.
34
+ */
35
+ const GAI_PRO_PREVIEW_SETTINGS: DyFM_AI_ModelSettingsSchema = {
36
+ ...GAI_CHAT_SETTINGS,
37
+ constraints: {
38
+ maxTokens: {
39
+ default: 8192,
40
+ note: 'Gemini 3.1 Pro preview: omitted maxOutputTokens → server default 8192 (not the 65536 max). FR-048, verified 2026-06-01.',
41
+ },
42
+ },
43
+ };
44
+
45
+ /** Embedding-modell: chat-sampling paramok nem ertelmezettek → a reconciler eldobja oket. */
46
+ const GAI_EMBEDDING_SETTINGS: DyFM_AI_ModelSettingsSchema = {
47
+ unsupported: [ 'temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens' ],
48
+ };
49
+
16
50
  export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
17
51
  {
18
52
  id: DyFM_GAI_Model.gemini_3_5_flash,
@@ -20,6 +54,7 @@ export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
20
54
  modelType: DyFM_AI_ModelType.Chat,
21
55
  displayName: 'Gemini 3.5 Flash',
22
56
  tier: 'flash',
57
+ settingsSchema: GAI_CHAT_SETTINGS,
23
58
  status: 'ga',
24
59
  contextWindow: 1_048_576,
25
60
  maxOutputTokens: 65_536,
@@ -41,6 +76,7 @@ export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
41
76
  modelType: DyFM_AI_ModelType.Chat,
42
77
  displayName: 'Gemini 3.1 Pro (preview)',
43
78
  tier: 'pro',
79
+ settingsSchema: GAI_PRO_PREVIEW_SETTINGS,
44
80
  status: 'preview',
45
81
  contextWindow: 1_048_576,
46
82
  maxOutputTokens: 65_536,
@@ -62,6 +98,7 @@ export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
62
98
  modelType: DyFM_AI_ModelType.Chat,
63
99
  displayName: 'Gemini 3.1 Flash-Lite',
64
100
  tier: 'flash-lite',
101
+ settingsSchema: GAI_CHAT_SETTINGS,
65
102
  status: 'ga',
66
103
  contextWindow: 1_048_576,
67
104
  maxOutputTokens: 65_536,
@@ -83,6 +120,7 @@ export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
83
120
  modelType: DyFM_AI_ModelType.Embedding,
84
121
  displayName: 'Gemini Embedding 2',
85
122
  status: 'ga',
123
+ settingsSchema: GAI_EMBEDDING_SETTINGS,
86
124
  contextWindow: 8_192,
87
125
  capabilities: {
88
126
  functionCalling: false,
@@ -12,6 +12,12 @@ import { DyFM_LAI_Model } from '../_enums/lai-model.enum';
12
12
  * In particular `functionCalling` is left FALSE here because many local models
13
13
  * do not support tool calling; it must be confirmed per loaded model rather than
14
14
  * assumed. Context window is model-defined and therefore left unset.
15
+ *
16
+ * Settings note (FR-048) — `settingsSchema` is DELIBERATELY left unset here. The accepted tuning-param
17
+ * surface of a local model is decided by whatever the user loaded into the backend at runtime, so it is
18
+ * not knowable ahead of time; inventing one would be a guess. With no schema the reconciler stays
19
+ * permissive (passes settings through, with a debug log) — the honest best-effort behaviour.
20
+ * See `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
15
21
  */
16
22
  export const DyFM_LAI_Models: DyFM_AI_ModelInfo[] = [
17
23
  {
@@ -1,6 +1,7 @@
1
1
  import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
2
2
  import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
3
3
  import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
4
+ import { DyFM_AI_ModelSettingsSchema } from '../../../_models/ai-model-settings-schema.interface';
4
5
  import { DyFM_OAI_Model } from '../_enums/oai-model.enum';
5
6
 
6
7
  /**
@@ -12,7 +13,98 @@ import { DyFM_OAI_Model } from '../_enums/oai-model.enum';
12
13
  * Tool-calling note: native function calling is universal across current OpenAI
13
14
  * chat models. The `-pro` reasoning models support tools but NOT streaming and
14
15
  * are Responses-API-only — reflected in `capabilities.streaming`.
16
+ *
17
+ * Settings note (FR-048): `settingsSchema` is now populated — it records which tuning
18
+ * params each model ACCEPTS/REJECTS, so the reconciler can drop model-rejected params
19
+ * before the call instead of hard-failing with HTTP 400. See
20
+ * `documentations/plans/ai-mocking-system/FR-048-LAYER-A.md`.
21
+ */
22
+
23
+ /**
24
+ * Reasoning models (`gpt-5.x`, `o`-series) REJECT the sampling params with HTTP 400 and
25
+ * instead expose a `reasoningEffort` knob.
26
+ *
27
+ * Source: FR-047 code-review fix `514153f` (`isReasoningModel` = `/^gpt-5/ || /^o[0-9]/`,
28
+ * which omits the 4 sampling params) + `FR-048-per-model-agnostic-settings.md` §Problem.
29
+ * Verified 2026-06-01. Numeric ranges for other params are intentionally NOT encoded yet —
30
+ * pending the provider-doc capture pass (a wrong clamp would silently alter live calls).
31
+ */
32
+ const OAI_REASONING_SETTINGS: DyFM_AI_ModelSettingsSchema = {
33
+ supported: [ 'maxTokens' ],
34
+ unsupported: [ 'temperature', 'topP', 'frequencyPenalty', 'presencePenalty' ],
35
+ extraParams: [ 'reasoningEffort' ],
36
+ constraints: {
37
+ reasoningEffort: {
38
+ allowed: [ 'none', 'low', 'medium', 'high', 'xhigh' ],
39
+ note: 'Reasoning-only knob; non-reasoning models have none. Source: FR-048 §Problem, verified 2026-06-01.',
40
+ },
41
+ },
42
+ };
43
+
44
+ /**
45
+ * Non-reasoning chat models (`gpt-4o` family) accept the classic sampling params.
46
+ *
47
+ * Numeric bounds captured from the official OpenAI API reference
48
+ * (https://developers.openai.com/api/reference — fetched 2026-07-21). The docs state the ranges but
49
+ * do NOT document default values, so no `default` is encoded here (an invented default would be a guess).
50
+ */
51
+ const OAI_CLASSIC_CHAT_SETTINGS: DyFM_AI_ModelSettingsSchema = {
52
+ supported: [ 'temperature', 'maxTokens', 'topP', 'frequencyPenalty', 'presencePenalty' ],
53
+ constraints: {
54
+ temperature: {
55
+ min: 0,
56
+ max: 2,
57
+ note: 'OpenAI: "between 0 and 2". Source: developers.openai.com API reference, verified 2026-07-21.',
58
+ },
59
+ topP: {
60
+ min: 0,
61
+ max: 1,
62
+ note: 'OpenAI nucleus sampling: "between 0 and 1". Source: developers.openai.com API reference, verified 2026-07-21.',
63
+ },
64
+ frequencyPenalty: {
65
+ min: -2,
66
+ max: 2,
67
+ note: 'OpenAI: "Number between -2.0 and 2.0". Source: developers.openai.com API reference, verified 2026-07-21.',
68
+ },
69
+ presencePenalty: {
70
+ min: -2,
71
+ max: 2,
72
+ note: 'OpenAI: "Number between -2.0 and 2.0". Source: developers.openai.com API reference, verified 2026-07-21.',
73
+ },
74
+ },
75
+ };
76
+
77
+ /**
78
+ * Embedding models take no sampling params; the one real knob is `dimensions`.
79
+ *
80
+ * The sampling params are listed as `unsupported` so the reconciler DROPS them — dropping a
81
+ * meaningless param from an embeddings call is always safe, regardless of whether the API
82
+ * would 400 or silently ignore it. Max/default dims per the `DyFM_OAI_Model` JSDoc (verified 2026-06).
83
+ */
84
+ const OAI_EMBEDDING_SETTINGS_SMALL: DyFM_AI_ModelSettingsSchema = {
85
+ unsupported: [ 'temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens' ],
86
+ extraParams: [ 'dimensions' ],
87
+ constraints: {
88
+ dimensions: { max: 1536, default: 1536, note: 'text-embedding-3-small native dims (Matryoshka truncation allowed below max).' },
89
+ },
90
+ };
91
+
92
+ /** As {@link OAI_EMBEDDING_SETTINGS_SMALL}, with the 3-large native dimension count. */
93
+ const OAI_EMBEDDING_SETTINGS_LARGE: DyFM_AI_ModelSettingsSchema = {
94
+ unsupported: [ 'temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens' ],
95
+ extraParams: [ 'dimensions' ],
96
+ constraints: {
97
+ dimensions: { max: 3072, default: 3072, note: 'text-embedding-3-large native dims (Matryoshka truncation allowed below max).' },
98
+ },
99
+ };
100
+
101
+ /**
102
+ * Image-generation models take no chat sampling params (dropped by the reconciler).
103
+ * The image-specific knobs (size / quality / background) are NOT encoded yet — pending doc capture (D4).
15
104
  */
105
+ const OAI_IMAGE_SETTINGS: DyFM_AI_ModelSettingsSchema = {
106
+ unsupported: [ 'temperature', 'topP', 'frequencyPenalty', 'presencePenalty', 'maxTokens' ],
107
+ };
16
108
  export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
17
109
  // ── Chat / reasoning (current GA) ──
18
110
  {
@@ -21,6 +113,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
21
113
  modelType: DyFM_AI_ModelType.Chat,
22
114
  displayName: 'GPT-5.5',
23
115
  tier: 'flagship',
116
+ settingsSchema: OAI_REASONING_SETTINGS,
24
117
  status: 'ga',
25
118
  contextWindow: 1_050_000,
26
119
  maxOutputTokens: 128_000,
@@ -42,6 +135,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
42
135
  modelType: DyFM_AI_ModelType.Chat,
43
136
  displayName: 'GPT-5.5 Pro',
44
137
  tier: 'pro',
138
+ settingsSchema: OAI_REASONING_SETTINGS,
45
139
  status: 'ga',
46
140
  contextWindow: 1_050_000,
47
141
  maxOutputTokens: 128_000,
@@ -63,6 +157,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
63
157
  modelType: DyFM_AI_ModelType.Chat,
64
158
  displayName: 'GPT-5.4',
65
159
  tier: 'flagship',
160
+ settingsSchema: OAI_REASONING_SETTINGS,
66
161
  status: 'ga',
67
162
  contextWindow: 1_000_000,
68
163
  maxOutputTokens: 128_000,
@@ -84,6 +179,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
84
179
  modelType: DyFM_AI_ModelType.Chat,
85
180
  displayName: 'GPT-5.4 mini',
86
181
  tier: 'mini',
182
+ settingsSchema: OAI_REASONING_SETTINGS,
87
183
  status: 'ga',
88
184
  contextWindow: 400_000,
89
185
  maxOutputTokens: 128_000,
@@ -105,6 +201,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
105
201
  modelType: DyFM_AI_ModelType.Chat,
106
202
  displayName: 'GPT-5.4 nano',
107
203
  tier: 'nano',
204
+ settingsSchema: OAI_REASONING_SETTINGS,
108
205
  status: 'ga',
109
206
  contextWindow: 400_000,
110
207
  maxOutputTokens: 128_000,
@@ -126,6 +223,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
126
223
  modelType: DyFM_AI_ModelType.Chat,
127
224
  displayName: 'o3-pro',
128
225
  tier: 'pro',
226
+ settingsSchema: OAI_REASONING_SETTINGS,
129
227
  status: 'ga',
130
228
  contextWindow: 200_000,
131
229
  maxOutputTokens: 100_000,
@@ -149,6 +247,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
149
247
  modelType: DyFM_AI_ModelType.Chat,
150
248
  displayName: 'GPT-4o',
151
249
  tier: 'legacy',
250
+ settingsSchema: OAI_CLASSIC_CHAT_SETTINGS,
152
251
  status: 'deprecated',
153
252
  successorId: DyFM_OAI_Model.gpt54_mini,
154
253
  sunsetDate: '2026-10-23',
@@ -172,6 +271,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
172
271
  modelType: DyFM_AI_ModelType.Chat,
173
272
  displayName: 'GPT-4o mini',
174
273
  tier: 'legacy',
274
+ settingsSchema: OAI_CLASSIC_CHAT_SETTINGS,
175
275
  status: 'deprecated',
176
276
  successorId: DyFM_OAI_Model.gpt54_mini,
177
277
  sunsetDate: '2026-10-23',
@@ -197,6 +297,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
197
297
  modelType: DyFM_AI_ModelType.Embedding,
198
298
  displayName: 'text-embedding-3-small',
199
299
  status: 'ga',
300
+ settingsSchema: OAI_EMBEDDING_SETTINGS_SMALL,
200
301
  contextWindow: 8_191,
201
302
  capabilities: {
202
303
  functionCalling: false,
@@ -216,6 +317,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
216
317
  modelType: DyFM_AI_ModelType.Embedding,
217
318
  displayName: 'text-embedding-3-large',
218
319
  status: 'ga',
320
+ settingsSchema: OAI_EMBEDDING_SETTINGS_LARGE,
219
321
  contextWindow: 8_191,
220
322
  capabilities: {
221
323
  functionCalling: false,
@@ -237,6 +339,7 @@ export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
237
339
  modelType: DyFM_AI_ModelType.Image,
238
340
  displayName: 'GPT Image 2',
239
341
  status: 'ga',
342
+ settingsSchema: OAI_IMAGE_SETTINGS,
240
343
  capabilities: {
241
344
  functionCalling: false,
242
345
  vision: true, // accepts image input for editing