@futdevpro/fsm-dynamo 1.15.16 → 1.15.17
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/.dynamo/pipeline.cicd.config.json +128 -0
- package/build/_modules/ai/_collections/ai-model-registry.util.d.ts +24 -0
- package/build/_modules/ai/_collections/ai-model-registry.util.d.ts.map +1 -0
- package/build/_modules/ai/_collections/ai-model-registry.util.js +31 -0
- package/build/_modules/ai/_collections/ai-model-registry.util.js.map +1 -0
- package/build/_modules/ai/_enums/ai-message-role.enum.d.ts +3 -1
- package/build/_modules/ai/_enums/ai-message-role.enum.d.ts.map +1 -1
- package/build/_modules/ai/_enums/ai-message-role.enum.js +2 -0
- package/build/_modules/ai/_enums/ai-message-role.enum.js.map +1 -1
- package/build/_modules/ai/_enums/ai-model-type.enum.d.ts +3 -1
- package/build/_modules/ai/_enums/ai-model-type.enum.d.ts.map +1 -1
- package/build/_modules/ai/_enums/ai-model-type.enum.js +2 -0
- package/build/_modules/ai/_enums/ai-model-type.enum.js.map +1 -1
- package/build/_modules/ai/_models/ai-call-settings.interface.d.ts +21 -0
- package/build/_modules/ai/_models/ai-call-settings.interface.d.ts.map +1 -1
- package/build/_modules/ai/_models/ai-call-settings.interface.js +21 -0
- package/build/_modules/ai/_models/ai-call-settings.interface.js.map +1 -1
- package/build/_modules/ai/_models/ai-llm-response.interface.d.ts +5 -0
- package/build/_modules/ai/_models/ai-llm-response.interface.d.ts.map +1 -1
- package/build/_modules/ai/_models/ai-message.interface.d.ts +5 -0
- package/build/_modules/ai/_models/ai-message.interface.d.ts.map +1 -1
- package/build/_modules/ai/_models/ai-model-capabilities.interface.d.ts +28 -0
- package/build/_modules/ai/_models/ai-model-capabilities.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-model-capabilities.interface.js +3 -0
- package/build/_modules/ai/_models/ai-model-capabilities.interface.js.map +1 -0
- package/build/_modules/ai/_models/ai-model-info.interface.d.ts +62 -0
- package/build/_modules/ai/_models/ai-model-info.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-model-info.interface.js +3 -0
- package/build/_modules/ai/_models/ai-model-info.interface.js.map +1 -0
- package/build/_modules/ai/_models/ai-model-settings-schema.interface.d.ts +52 -0
- package/build/_modules/ai/_models/ai-model-settings-schema.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-model-settings-schema.interface.js +3 -0
- package/build/_modules/ai/_models/ai-model-settings-schema.interface.js.map +1 -0
- package/build/_modules/ai/_models/ai-tool-call.interface.d.ts +19 -0
- package/build/_modules/ai/_models/ai-tool-call.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-tool-call.interface.js +3 -0
- package/build/_modules/ai/_models/ai-tool-call.interface.js.map +1 -0
- package/build/_modules/ai/_models/ai-tool-handler.type.d.ts +11 -0
- package/build/_modules/ai/_models/ai-tool-handler.type.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-tool-handler.type.js +3 -0
- package/build/_modules/ai/_models/ai-tool-handler.type.js.map +1 -0
- package/build/_modules/ai/_models/ai-tool-result.interface.d.ts +17 -0
- package/build/_modules/ai/_models/ai-tool-result.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-tool-result.interface.js +3 -0
- package/build/_modules/ai/_models/ai-tool-result.interface.js.map +1 -0
- package/build/_modules/ai/_models/ai-tool.interface.d.ts +17 -0
- package/build/_modules/ai/_models/ai-tool.interface.d.ts.map +1 -0
- package/build/_modules/ai/_models/ai-tool.interface.js +3 -0
- package/build/_modules/ai/_models/ai-tool.interface.js.map +1 -0
- package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.d.ts +14 -0
- package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.d.ts.map +1 -0
- package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js +80 -0
- package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js.map +1 -0
- package/build/_modules/ai/_modules/anthropic/_enums/aai-model.enum.d.ts +4 -0
- package/build/_modules/ai/_modules/anthropic/_enums/aai-model.enum.d.ts.map +1 -1
- package/build/_modules/ai/_modules/anthropic/_enums/aai-model.enum.js +7 -0
- package/build/_modules/ai/_modules/anthropic/_enums/aai-model.enum.js.map +1 -1
- package/build/_modules/ai/_modules/anthropic/index.d.ts +1 -0
- package/build/_modules/ai/_modules/anthropic/index.d.ts.map +1 -1
- package/build/_modules/ai/_modules/anthropic/index.js +2 -0
- package/build/_modules/ai/_modules/anthropic/index.js.map +1 -1
- package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.d.ts +12 -0
- package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.d.ts.map +1 -0
- package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js +35 -0
- package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js.map +1 -0
- package/build/_modules/ai/_modules/fdp-ai/index.d.ts +1 -0
- package/build/_modules/ai/_modules/fdp-ai/index.d.ts.map +1 -1
- package/build/_modules/ai/_modules/fdp-ai/index.js +2 -0
- package/build/_modules/ai/_modules/fdp-ai/index.js.map +1 -1
- package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.d.ts +13 -0
- package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.d.ts.map +1 -0
- package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js +97 -0
- package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js.map +1 -0
- package/build/_modules/ai/_modules/google-ai/_enums/gai-model.enum.d.ts +4 -0
- package/build/_modules/ai/_modules/google-ai/_enums/gai-model.enum.d.ts.map +1 -1
- package/build/_modules/ai/_modules/google-ai/_enums/gai-model.enum.js +8 -1
- package/build/_modules/ai/_modules/google-ai/_enums/gai-model.enum.js.map +1 -1
- package/build/_modules/ai/_modules/google-ai/index.d.ts +1 -0
- package/build/_modules/ai/_modules/google-ai/index.d.ts.map +1 -1
- package/build/_modules/ai/_modules/google-ai/index.js +2 -0
- package/build/_modules/ai/_modules/google-ai/index.js.map +1 -1
- package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.d.ts +13 -0
- package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.d.ts.map +1 -0
- package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js +53 -0
- package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js.map +1 -0
- package/build/_modules/ai/_modules/local-ai/index.d.ts +1 -0
- package/build/_modules/ai/_modules/local-ai/index.d.ts.map +1 -1
- package/build/_modules/ai/_modules/local-ai/index.js +2 -0
- package/build/_modules/ai/_modules/local-ai/index.js.map +1 -1
- package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.d.ts +13 -0
- package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.d.ts.map +1 -0
- package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js +240 -0
- package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js.map +1 -0
- package/build/_modules/ai/_modules/open-ai/_enums/oai-model.enum.d.ts +8 -0
- package/build/_modules/ai/_modules/open-ai/_enums/oai-model.enum.d.ts.map +1 -1
- package/build/_modules/ai/_modules/open-ai/_enums/oai-model.enum.js +10 -0
- package/build/_modules/ai/_modules/open-ai/_enums/oai-model.enum.js.map +1 -1
- package/build/_modules/ai/_modules/open-ai/index.d.ts +1 -0
- package/build/_modules/ai/_modules/open-ai/index.d.ts.map +1 -1
- package/build/_modules/ai/_modules/open-ai/index.js +1 -0
- package/build/_modules/ai/_modules/open-ai/index.js.map +1 -1
- package/build/_modules/ai/index.d.ts +8 -0
- package/build/_modules/ai/index.d.ts.map +1 -1
- package/build/_modules/ai/index.js +8 -0
- package/build/_modules/ai/index.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/ai/_collections/ai-model-registry.util.spec.ts +37 -0
- package/src/_modules/ai/_collections/ai-model-registry.util.ts +30 -0
- package/src/_modules/ai/_enums/ai-message-role.enum.ts +2 -0
- package/src/_modules/ai/_enums/ai-model-type.enum.ts +2 -0
- package/src/_modules/ai/_models/ai-call-settings.interface.ts +21 -0
- package/src/_modules/ai/_models/ai-llm-response.interface.ts +5 -0
- package/src/_modules/ai/_models/ai-message.interface.ts +5 -0
- package/src/_modules/ai/_models/ai-model-capabilities.interface.ts +27 -0
- package/src/_modules/ai/_models/ai-model-info.interface.ts +63 -0
- package/src/_modules/ai/_models/ai-model-settings-schema.interface.ts +52 -0
- package/src/_modules/ai/_models/ai-tool-call.interface.ts +18 -0
- package/src/_modules/ai/_models/ai-tool-handler.type.ts +11 -0
- package/src/_modules/ai/_models/ai-tool-result.interface.ts +16 -0
- package/src/_modules/ai/_models/ai-tool.interface.ts +16 -0
- package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +78 -0
- package/src/_modules/ai/_modules/anthropic/_enums/aai-model.enum.ts +8 -0
- package/src/_modules/ai/_modules/anthropic/index.ts +3 -0
- package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +33 -0
- package/src/_modules/ai/_modules/fdp-ai/index.ts +3 -0
- package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +95 -0
- package/src/_modules/ai/_modules/google-ai/_enums/gai-model.enum.ts +9 -1
- package/src/_modules/ai/_modules/google-ai/index.ts +3 -0
- package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +51 -0
- package/src/_modules/ai/_modules/local-ai/index.ts +3 -0
- package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +241 -0
- package/src/_modules/ai/_modules/open-ai/_enums/oai-model.enum.ts +11 -0
- package/src/_modules/ai/_modules/open-ai/index.ts +1 -0
- package/src/_modules/ai/index.ts +8 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RESERVED — per-model settings schema (FR-048; NOT implemented by FR-047).
|
|
3
|
+
*
|
|
4
|
+
* Sibling of {@link DyFM_AI_ModelCapabilities}: capabilities describe what a
|
|
5
|
+
* model can DO; this describes which tuning PARAMETERS it accepts, their
|
|
6
|
+
* bounds, and which it REJECTS. A flat {@link DyFM_AI_CallSettings} bag cannot
|
|
7
|
+
* express this, yet sending an unsupported param can hard-fail a call (e.g.
|
|
8
|
+
* Anthropic Opus 4.7+ rejects `temperature`/`top_p`/`top_k` with HTTP 400).
|
|
9
|
+
*
|
|
10
|
+
* This type reserves the architectural space and documents intent. The
|
|
11
|
+
* registry consts do NOT populate `settingsSchema` yet, and no reconciler
|
|
12
|
+
* consumes it yet — both are FR-048 work. The exact shape may evolve when
|
|
13
|
+
* FR-048 is built; treat this as a forward placeholder, not a frozen contract.
|
|
14
|
+
*
|
|
15
|
+
* See: `__agent/feature-requests/FR-048-per-model-agnostic-settings.md`
|
|
16
|
+
* `documentations/guidelines/development/ai-per-model-settings.md`
|
|
17
|
+
*/
|
|
18
|
+
export interface DyFM_AI_ModelSettingsSchema {
|
|
19
|
+
/** Agnostic setting keys this model ACCEPTS (e.g. 'temperature','topP','maxTokens','reasoningEffort'). */
|
|
20
|
+
supported?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Agnostic setting keys this model REJECTS — sending them errors.
|
|
23
|
+
* Example: Opus 4.7+ → ['temperature','topP','topK'] (HTTP 400 on non-default).
|
|
24
|
+
* The future reconciler drops these (debug-log, never silently).
|
|
25
|
+
*/
|
|
26
|
+
unsupported?: string[];
|
|
27
|
+
/** Per-key value constraints (range / enum / default). */
|
|
28
|
+
constraints?: Record<string, DyFM_AI_SettingConstraint>;
|
|
29
|
+
/**
|
|
30
|
+
* Provider/model-specific knobs NOT present on the agnostic CallSettings
|
|
31
|
+
* (e.g. OpenAI 'reasoningEffort', Gemini 'thinkingConfig'). The provider
|
|
32
|
+
* translator maps these to the native param.
|
|
33
|
+
*/
|
|
34
|
+
extraParams?: string[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* RESERVED (FR-048) — value constraint for a single tuning parameter.
|
|
39
|
+
* Forward placeholder; shape may evolve when FR-048 is built.
|
|
40
|
+
*/
|
|
41
|
+
export interface DyFM_AI_SettingConstraint {
|
|
42
|
+
/** Minimum numeric value (inclusive), if applicable. */
|
|
43
|
+
min?: number;
|
|
44
|
+
/** Maximum numeric value (inclusive), if applicable. */
|
|
45
|
+
max?: number;
|
|
46
|
+
/** Default value the provider applies when omitted. */
|
|
47
|
+
default?: unknown;
|
|
48
|
+
/** Allowed discrete values (enum-like params, e.g. reasoningEffort). */
|
|
49
|
+
allowed?: unknown[];
|
|
50
|
+
/** Free-text note (Hunglish ok) — e.g. provider quirk, version gate. */
|
|
51
|
+
note?: string;
|
|
52
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A normalized tool invocation requested by the model.
|
|
3
|
+
*
|
|
4
|
+
* Each provider's native shape is normalized into this at the translator boundary:
|
|
5
|
+
* - OpenAI: message.tool_calls[] → { id, name, arguments: JSON.parse(function.arguments) }
|
|
6
|
+
* - Anthropic: content[] { type:'tool_use', id, name, input } → { id, name, arguments: input }
|
|
7
|
+
* - Gemini: parts[].functionCall { id, name, args } → { id, name, arguments: args }
|
|
8
|
+
*
|
|
9
|
+
* `arguments` is ALWAYS a parsed object (OpenAI's JSON string is parsed at the boundary).
|
|
10
|
+
*/
|
|
11
|
+
export interface DyFM_AI_ToolCall {
|
|
12
|
+
/** Provider call id — echoed back when returning the result. */
|
|
13
|
+
id: string;
|
|
14
|
+
/** The invoked tool's name. */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Parsed arguments object. */
|
|
17
|
+
arguments: Record<string, unknown>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler for a single function-calling tool — receives the parsed arguments
|
|
3
|
+
* (JSON already parsed) and returns the tool result as a string (which is fed
|
|
4
|
+
* back to the model). Generalized from the proven legacy `FDPNTS_GPT_ToolHandler`.
|
|
5
|
+
*/
|
|
6
|
+
export type DyFM_AI_ToolHandler = (args: Record<string, unknown>) => Promise<string> | string;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Tool-name → handler registration for the `requestWithTools` agent-loop.
|
|
10
|
+
*/
|
|
11
|
+
export type DyFM_AI_ToolHandlers = Record<string, DyFM_AI_ToolHandler>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The result of executing a tool, fed back to the model.
|
|
3
|
+
*
|
|
4
|
+
* Translated per provider:
|
|
5
|
+
* - OpenAI: { role:'tool', tool_call_id: toolCallId, content }
|
|
6
|
+
* - Anthropic: content block { type:'tool_result', tool_use_id: toolCallId, content, is_error: isError }
|
|
7
|
+
* - Gemini: part { functionResponse: { id: toolCallId, name, response: { result: content } } }
|
|
8
|
+
*/
|
|
9
|
+
export interface DyFM_AI_ToolResult {
|
|
10
|
+
/** Must echo the originating {@link DyFM_AI_ToolCall.id}. */
|
|
11
|
+
toolCallId: string;
|
|
12
|
+
/** The tool's output (or an error message — see {@link isError}). */
|
|
13
|
+
content: string;
|
|
14
|
+
/** True when the tool failed; the model is told so it can correct. */
|
|
15
|
+
isError?: boolean;
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral tool (function) definition for native function calling.
|
|
3
|
+
*
|
|
4
|
+
* One agnostic shape, translated per provider by the execution layer:
|
|
5
|
+
* - OpenAI-wire: → { type:'function', function:{ name, description, parameters } }
|
|
6
|
+
* - Anthropic: → { name, description, input_schema: parameters }
|
|
7
|
+
* - Gemini: → tools:[{ functionDeclarations:[{ name, description, parameters }] }]
|
|
8
|
+
*/
|
|
9
|
+
export interface DyFM_AI_Tool {
|
|
10
|
+
/** Function name. No spaces / special chars (Gemini constraint). */
|
|
11
|
+
name: string;
|
|
12
|
+
/** What the tool does — the model uses this to decide when to call it. */
|
|
13
|
+
description: string;
|
|
14
|
+
/** JSON Schema (object schema) describing the arguments. Translated to each provider's param shape. */
|
|
15
|
+
parameters: object;
|
|
16
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
|
|
2
|
+
import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
|
|
3
|
+
import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
|
|
4
|
+
import { DyFM_AAI_Model } from '../_enums/aai-model.enum';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Anthropic Claude model registry — verified 2026-06-01 against platform.claude.com docs.
|
|
8
|
+
*
|
|
9
|
+
* All Claude models are chat (Messages API) models — Anthropic has NO embeddings API.
|
|
10
|
+
* Tool use is universal (content-block `tool_use` / `tool_result` wire format).
|
|
11
|
+
* Anthropic has no dedicated JSON-mode flag (structured output is done via tools),
|
|
12
|
+
* so `jsonMode` is false across the board.
|
|
13
|
+
*
|
|
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.
|
|
16
|
+
*/
|
|
17
|
+
export const DyFM_AAI_Models: DyFM_AI_ModelInfo[] = [
|
|
18
|
+
{
|
|
19
|
+
id: DyFM_AAI_Model.claude_opus_4_8,
|
|
20
|
+
provider: DyFM_AI_Provider.Anthropic,
|
|
21
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
22
|
+
displayName: 'Claude Opus 4.8',
|
|
23
|
+
tier: 'Opus',
|
|
24
|
+
status: 'ga',
|
|
25
|
+
contextWindow: 1_000_000,
|
|
26
|
+
maxOutputTokens: 128_000,
|
|
27
|
+
capabilities: {
|
|
28
|
+
functionCalling: true,
|
|
29
|
+
vision: true,
|
|
30
|
+
streaming: true,
|
|
31
|
+
jsonMode: false,
|
|
32
|
+
audioInput: false,
|
|
33
|
+
audioOutput: false,
|
|
34
|
+
imageGeneration: false,
|
|
35
|
+
embeddings: false,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: DyFM_AAI_Model.claude_sonnet_4_6,
|
|
40
|
+
provider: DyFM_AI_Provider.Anthropic,
|
|
41
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
42
|
+
displayName: 'Claude Sonnet 4.6',
|
|
43
|
+
tier: 'Sonnet',
|
|
44
|
+
status: 'ga',
|
|
45
|
+
contextWindow: 1_000_000,
|
|
46
|
+
maxOutputTokens: 64_000,
|
|
47
|
+
capabilities: {
|
|
48
|
+
functionCalling: true,
|
|
49
|
+
vision: true,
|
|
50
|
+
streaming: true,
|
|
51
|
+
jsonMode: false,
|
|
52
|
+
audioInput: false,
|
|
53
|
+
audioOutput: false,
|
|
54
|
+
imageGeneration: false,
|
|
55
|
+
embeddings: false,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: DyFM_AAI_Model.claude_haiku_4_5,
|
|
60
|
+
provider: DyFM_AI_Provider.Anthropic,
|
|
61
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
62
|
+
displayName: 'Claude Haiku 4.5',
|
|
63
|
+
tier: 'Haiku',
|
|
64
|
+
status: 'ga',
|
|
65
|
+
contextWindow: 200_000,
|
|
66
|
+
maxOutputTokens: 64_000,
|
|
67
|
+
capabilities: {
|
|
68
|
+
functionCalling: true,
|
|
69
|
+
vision: true,
|
|
70
|
+
streaming: true,
|
|
71
|
+
jsonMode: false,
|
|
72
|
+
audioInput: false,
|
|
73
|
+
audioOutput: false,
|
|
74
|
+
imageGeneration: false,
|
|
75
|
+
embeddings: false,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
];
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
// Based on @anthropic-ai/sdk model identifiers
|
|
2
2
|
export enum DyFM_AAI_Model {
|
|
3
|
+
// Current GA (verified 2026-06). From the 4.6 generation the ids are
|
|
4
|
+
// dateless-but-pinned snapshots — there is NO `-latest` alias for these.
|
|
5
|
+
claude_opus_4_8 = 'claude-opus-4-8',
|
|
6
|
+
claude_sonnet_4_6 = 'claude-sonnet-4-6',
|
|
7
|
+
claude_haiku_4_5 = 'claude-haiku-4-5',
|
|
8
|
+
claude_haiku_4_5_20251001 = 'claude-haiku-4-5-20251001',
|
|
9
|
+
|
|
10
|
+
// Legacy / retired (kept for back-compat; NOT in the active registry)
|
|
3
11
|
claude_3_5_sonnet_latest = 'claude-3-5-sonnet-latest',
|
|
4
12
|
claude_3_5_sonnet_20241022 = 'claude-3-5-sonnet-20241022',
|
|
5
13
|
claude_3_5_haiku_latest = 'claude-3-5-haiku-latest',
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
|
|
2
|
+
import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
|
|
3
|
+
import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
|
|
4
|
+
import { DyFM_FdpAI_Model } from '../_enums/fdpai-model.enum';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* FDP-AI model registry.
|
|
8
|
+
*
|
|
9
|
+
* FDP-AI is an internal, OpenAI-wire-compatible HTTP gateway (`/chat/completions`),
|
|
10
|
+
* so tool calling follows the OpenAI format. Capabilities ultimately depend on the
|
|
11
|
+
* backing gateway/model — `functionCalling` is declared true on the assumption the
|
|
12
|
+
* gateway forwards OpenAI-style tools; confirm against the live FDP-AI deployment.
|
|
13
|
+
* Context window is gateway-defined and therefore left unset.
|
|
14
|
+
*/
|
|
15
|
+
export const DyFM_FdpAI_Models: DyFM_AI_ModelInfo[] = [
|
|
16
|
+
{
|
|
17
|
+
id: DyFM_FdpAI_Model.fdpBase1,
|
|
18
|
+
provider: DyFM_AI_Provider.FdpAI,
|
|
19
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
20
|
+
displayName: 'FDP Base 1',
|
|
21
|
+
status: 'ga',
|
|
22
|
+
capabilities: {
|
|
23
|
+
functionCalling: true, // OpenAI-wire compatible — verify against the live gateway
|
|
24
|
+
vision: false,
|
|
25
|
+
streaming: true,
|
|
26
|
+
jsonMode: false,
|
|
27
|
+
audioInput: false,
|
|
28
|
+
audioOutput: false,
|
|
29
|
+
imageGeneration: false,
|
|
30
|
+
embeddings: false,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
|
|
2
|
+
import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
|
|
3
|
+
import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
|
|
4
|
+
import { DyFM_GAI_Model } from '../_enums/gai-model.enum';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Google Gemini model registry — verified 2026-06-01 against ai.google.dev docs.
|
|
8
|
+
*
|
|
9
|
+
* SDK note: depend on `@google/genai` (the old `@google/generative-ai` was sunset
|
|
10
|
+
* 2025-11-30). Tool use via `functionDeclarations`; tool results are returned under
|
|
11
|
+
* a `user`-role `functionResponse` part (no dedicated tool role).
|
|
12
|
+
*
|
|
13
|
+
* Video input is a real Gemini capability but is not yet modelled in
|
|
14
|
+
* {@link DyFM_AI_ModelCapabilities} — `vision` covers image input only.
|
|
15
|
+
*/
|
|
16
|
+
export const DyFM_GAI_Models: DyFM_AI_ModelInfo[] = [
|
|
17
|
+
{
|
|
18
|
+
id: DyFM_GAI_Model.gemini_3_5_flash,
|
|
19
|
+
provider: DyFM_AI_Provider.Google,
|
|
20
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
21
|
+
displayName: 'Gemini 3.5 Flash',
|
|
22
|
+
tier: 'flash',
|
|
23
|
+
status: 'ga',
|
|
24
|
+
contextWindow: 1_048_576,
|
|
25
|
+
maxOutputTokens: 65_536,
|
|
26
|
+
capabilities: {
|
|
27
|
+
functionCalling: true,
|
|
28
|
+
vision: true,
|
|
29
|
+
streaming: true,
|
|
30
|
+
jsonMode: true,
|
|
31
|
+
audioInput: true,
|
|
32
|
+
audioOutput: false,
|
|
33
|
+
imageGeneration: false,
|
|
34
|
+
embeddings: false,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: DyFM_GAI_Model.gemini_3_1_pro_preview,
|
|
39
|
+
provider: DyFM_AI_Provider.Google,
|
|
40
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
41
|
+
displayName: 'Gemini 3.1 Pro (preview)',
|
|
42
|
+
tier: 'pro',
|
|
43
|
+
status: 'preview',
|
|
44
|
+
contextWindow: 1_048_576,
|
|
45
|
+
maxOutputTokens: 65_536,
|
|
46
|
+
capabilities: {
|
|
47
|
+
functionCalling: true,
|
|
48
|
+
vision: true,
|
|
49
|
+
streaming: true,
|
|
50
|
+
jsonMode: true,
|
|
51
|
+
audioInput: true,
|
|
52
|
+
audioOutput: false,
|
|
53
|
+
imageGeneration: false,
|
|
54
|
+
embeddings: false,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: DyFM_GAI_Model.gemini_3_1_flash_lite,
|
|
59
|
+
provider: DyFM_AI_Provider.Google,
|
|
60
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
61
|
+
displayName: 'Gemini 3.1 Flash-Lite',
|
|
62
|
+
tier: 'flash-lite',
|
|
63
|
+
status: 'ga',
|
|
64
|
+
contextWindow: 1_048_576,
|
|
65
|
+
maxOutputTokens: 65_536,
|
|
66
|
+
capabilities: {
|
|
67
|
+
functionCalling: true,
|
|
68
|
+
vision: true,
|
|
69
|
+
streaming: true,
|
|
70
|
+
jsonMode: true,
|
|
71
|
+
audioInput: true,
|
|
72
|
+
audioOutput: false,
|
|
73
|
+
imageGeneration: false,
|
|
74
|
+
embeddings: false,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: DyFM_GAI_Model.gemini_embedding_2,
|
|
79
|
+
provider: DyFM_AI_Provider.Google,
|
|
80
|
+
modelType: DyFM_AI_ModelType.Embedding,
|
|
81
|
+
displayName: 'Gemini Embedding 2',
|
|
82
|
+
status: 'ga',
|
|
83
|
+
contextWindow: 8_192,
|
|
84
|
+
capabilities: {
|
|
85
|
+
functionCalling: false,
|
|
86
|
+
vision: true, // multimodal embedding (text / image / audio)
|
|
87
|
+
streaming: false,
|
|
88
|
+
jsonMode: false,
|
|
89
|
+
audioInput: true,
|
|
90
|
+
audioOutput: false,
|
|
91
|
+
imageGeneration: false,
|
|
92
|
+
embeddings: true,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
];
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
// Based on @google/
|
|
1
|
+
// Based on the @google/genai SDK model identifiers
|
|
2
|
+
// (the older @google/generative-ai SDK was sunset 2025-11-30).
|
|
2
3
|
export enum DyFM_GAI_Model {
|
|
4
|
+
// Current (verified 2026-06)
|
|
5
|
+
gemini_3_5_flash = 'gemini-3.5-flash',
|
|
6
|
+
gemini_3_1_pro_preview = 'gemini-3.1-pro-preview',
|
|
7
|
+
gemini_3_1_flash_lite = 'gemini-3.1-flash-lite',
|
|
8
|
+
gemini_embedding_2 = 'gemini-embedding-2',
|
|
9
|
+
|
|
10
|
+
// Legacy (deprecated / removed from the active line-up)
|
|
3
11
|
gemini_1_5_pro_latest = 'gemini-1.5-pro-latest',
|
|
4
12
|
gemini_1_5_flash_latest = 'gemini-1.5-flash-latest',
|
|
5
13
|
text_embedding_004 = 'text-embedding-004',
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
|
|
2
|
+
import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
|
|
3
|
+
import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
|
|
4
|
+
import { DyFM_LAI_Model } from '../_enums/lai-model.enum';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Local-AI model registry.
|
|
8
|
+
*
|
|
9
|
+
* Local models are served by a self-hosted, OpenAI-wire-compatible server
|
|
10
|
+
* (lm-studio / ollama / vllm). These are GENERIC descriptors — the real
|
|
11
|
+
* capabilities depend entirely on the model the user has loaded at runtime.
|
|
12
|
+
* In particular `functionCalling` is left FALSE here because many local models
|
|
13
|
+
* do not support tool calling; it must be confirmed per loaded model rather than
|
|
14
|
+
* assumed. Context window is model-defined and therefore left unset.
|
|
15
|
+
*/
|
|
16
|
+
export const DyFM_LAI_Models: DyFM_AI_ModelInfo[] = [
|
|
17
|
+
{
|
|
18
|
+
id: DyFM_LAI_Model.generic_llm,
|
|
19
|
+
provider: DyFM_AI_Provider.LocalAI,
|
|
20
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
21
|
+
displayName: 'Local generic LLM',
|
|
22
|
+
status: 'ga',
|
|
23
|
+
capabilities: {
|
|
24
|
+
functionCalling: false, // runtime/model-dependent — confirm per loaded model
|
|
25
|
+
vision: false,
|
|
26
|
+
streaming: true,
|
|
27
|
+
jsonMode: false,
|
|
28
|
+
audioInput: false,
|
|
29
|
+
audioOutput: false,
|
|
30
|
+
imageGeneration: false,
|
|
31
|
+
embeddings: false,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: DyFM_LAI_Model.text_embedding,
|
|
36
|
+
provider: DyFM_AI_Provider.LocalAI,
|
|
37
|
+
modelType: DyFM_AI_ModelType.Embedding,
|
|
38
|
+
displayName: 'Local text embedding',
|
|
39
|
+
status: 'ga',
|
|
40
|
+
capabilities: {
|
|
41
|
+
functionCalling: false,
|
|
42
|
+
vision: false,
|
|
43
|
+
streaming: false,
|
|
44
|
+
jsonMode: false,
|
|
45
|
+
audioInput: false,
|
|
46
|
+
audioOutput: false,
|
|
47
|
+
imageGeneration: false,
|
|
48
|
+
embeddings: true,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
];
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { DyFM_AI_Provider } from '../../../_enums/ai-provider.enum';
|
|
2
|
+
import { DyFM_AI_ModelType } from '../../../_enums/ai-model-type.enum';
|
|
3
|
+
import { DyFM_AI_ModelInfo } from '../../../_models/ai-model-info.interface';
|
|
4
|
+
import { DyFM_OAI_Model } from '../_enums/oai-model.enum';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* OpenAI model registry — verified 2026-06-01 against developers.openai.com docs.
|
|
8
|
+
*
|
|
9
|
+
* Contains current GA + still-callable legacy models. Retired models are omitted;
|
|
10
|
+
* sunsetting ones carry `status: 'deprecated'` + `successorId` + `sunsetDate`.
|
|
11
|
+
*
|
|
12
|
+
* Tool-calling note: native function calling is universal across current OpenAI
|
|
13
|
+
* chat models. The `-pro` reasoning models support tools but NOT streaming and
|
|
14
|
+
* are Responses-API-only — reflected in `capabilities.streaming`.
|
|
15
|
+
*/
|
|
16
|
+
export const DyFM_OAI_Models: DyFM_AI_ModelInfo[] = [
|
|
17
|
+
// ── Chat / reasoning (current GA) ──
|
|
18
|
+
{
|
|
19
|
+
id: DyFM_OAI_Model.gpt55,
|
|
20
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
21
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
22
|
+
displayName: 'GPT-5.5',
|
|
23
|
+
tier: 'flagship',
|
|
24
|
+
status: 'ga',
|
|
25
|
+
contextWindow: 1_050_000,
|
|
26
|
+
maxOutputTokens: 128_000,
|
|
27
|
+
capabilities: {
|
|
28
|
+
functionCalling: true,
|
|
29
|
+
vision: true,
|
|
30
|
+
streaming: true,
|
|
31
|
+
jsonMode: true,
|
|
32
|
+
audioInput: false,
|
|
33
|
+
audioOutput: false,
|
|
34
|
+
imageGeneration: false,
|
|
35
|
+
embeddings: false,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: DyFM_OAI_Model.gpt55_pro,
|
|
40
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
41
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
42
|
+
displayName: 'GPT-5.5 Pro',
|
|
43
|
+
tier: 'pro',
|
|
44
|
+
status: 'ga',
|
|
45
|
+
contextWindow: 1_050_000,
|
|
46
|
+
maxOutputTokens: 128_000,
|
|
47
|
+
capabilities: {
|
|
48
|
+
functionCalling: true,
|
|
49
|
+
vision: true,
|
|
50
|
+
streaming: false, // Responses-API-only, no streaming
|
|
51
|
+
jsonMode: true,
|
|
52
|
+
audioInput: false,
|
|
53
|
+
audioOutput: false,
|
|
54
|
+
imageGeneration: false,
|
|
55
|
+
embeddings: false,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: DyFM_OAI_Model.gpt54,
|
|
60
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
61
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
62
|
+
displayName: 'GPT-5.4',
|
|
63
|
+
tier: 'flagship',
|
|
64
|
+
status: 'ga',
|
|
65
|
+
contextWindow: 1_000_000,
|
|
66
|
+
maxOutputTokens: 128_000,
|
|
67
|
+
capabilities: {
|
|
68
|
+
functionCalling: true,
|
|
69
|
+
vision: true,
|
|
70
|
+
streaming: true,
|
|
71
|
+
jsonMode: true,
|
|
72
|
+
audioInput: false,
|
|
73
|
+
audioOutput: false,
|
|
74
|
+
imageGeneration: false,
|
|
75
|
+
embeddings: false,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: DyFM_OAI_Model.gpt54_mini,
|
|
80
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
81
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
82
|
+
displayName: 'GPT-5.4 mini',
|
|
83
|
+
tier: 'mini',
|
|
84
|
+
status: 'ga',
|
|
85
|
+
contextWindow: 400_000,
|
|
86
|
+
maxOutputTokens: 128_000,
|
|
87
|
+
capabilities: {
|
|
88
|
+
functionCalling: true,
|
|
89
|
+
vision: true,
|
|
90
|
+
streaming: true,
|
|
91
|
+
jsonMode: true,
|
|
92
|
+
audioInput: false,
|
|
93
|
+
audioOutput: false,
|
|
94
|
+
imageGeneration: false,
|
|
95
|
+
embeddings: false,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: DyFM_OAI_Model.gpt54_nano,
|
|
100
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
101
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
102
|
+
displayName: 'GPT-5.4 nano',
|
|
103
|
+
tier: 'nano',
|
|
104
|
+
status: 'ga',
|
|
105
|
+
contextWindow: 400_000,
|
|
106
|
+
maxOutputTokens: 128_000,
|
|
107
|
+
capabilities: {
|
|
108
|
+
functionCalling: true,
|
|
109
|
+
vision: true,
|
|
110
|
+
streaming: true,
|
|
111
|
+
jsonMode: true,
|
|
112
|
+
audioInput: false,
|
|
113
|
+
audioOutput: false,
|
|
114
|
+
imageGeneration: false,
|
|
115
|
+
embeddings: false,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: DyFM_OAI_Model.o3_pro,
|
|
120
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
121
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
122
|
+
displayName: 'o3-pro',
|
|
123
|
+
tier: 'pro',
|
|
124
|
+
status: 'ga',
|
|
125
|
+
contextWindow: 200_000,
|
|
126
|
+
maxOutputTokens: 100_000,
|
|
127
|
+
capabilities: {
|
|
128
|
+
functionCalling: true,
|
|
129
|
+
vision: true,
|
|
130
|
+
streaming: false, // Responses-API-only, no streaming
|
|
131
|
+
jsonMode: true,
|
|
132
|
+
audioInput: false,
|
|
133
|
+
audioOutput: false,
|
|
134
|
+
imageGeneration: false,
|
|
135
|
+
embeddings: false,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
// ── Chat (legacy-active, sunsetting) ──
|
|
140
|
+
{
|
|
141
|
+
id: DyFM_OAI_Model.gpt4o,
|
|
142
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
143
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
144
|
+
displayName: 'GPT-4o',
|
|
145
|
+
tier: 'legacy',
|
|
146
|
+
status: 'deprecated',
|
|
147
|
+
successorId: DyFM_OAI_Model.gpt54_mini,
|
|
148
|
+
sunsetDate: '2026-10-23',
|
|
149
|
+
contextWindow: 128_000,
|
|
150
|
+
maxOutputTokens: 16_384,
|
|
151
|
+
capabilities: {
|
|
152
|
+
functionCalling: true,
|
|
153
|
+
vision: true,
|
|
154
|
+
streaming: true,
|
|
155
|
+
jsonMode: true,
|
|
156
|
+
audioInput: false,
|
|
157
|
+
audioOutput: false,
|
|
158
|
+
imageGeneration: false,
|
|
159
|
+
embeddings: false,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: DyFM_OAI_Model.gpt4o_mini,
|
|
164
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
165
|
+
modelType: DyFM_AI_ModelType.Chat,
|
|
166
|
+
displayName: 'GPT-4o mini',
|
|
167
|
+
tier: 'legacy',
|
|
168
|
+
status: 'deprecated',
|
|
169
|
+
successorId: DyFM_OAI_Model.gpt54_mini,
|
|
170
|
+
sunsetDate: '2026-10-23',
|
|
171
|
+
contextWindow: 128_000,
|
|
172
|
+
maxOutputTokens: 16_384,
|
|
173
|
+
capabilities: {
|
|
174
|
+
functionCalling: true,
|
|
175
|
+
vision: true,
|
|
176
|
+
streaming: true,
|
|
177
|
+
jsonMode: true,
|
|
178
|
+
audioInput: false,
|
|
179
|
+
audioOutput: false,
|
|
180
|
+
imageGeneration: false,
|
|
181
|
+
embeddings: false,
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
|
|
185
|
+
// ── Embeddings (current GA) ──
|
|
186
|
+
{
|
|
187
|
+
id: DyFM_OAI_Model.textEmbedding_3Small,
|
|
188
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
189
|
+
modelType: DyFM_AI_ModelType.Embedding,
|
|
190
|
+
displayName: 'text-embedding-3-small',
|
|
191
|
+
status: 'ga',
|
|
192
|
+
contextWindow: 8_191,
|
|
193
|
+
capabilities: {
|
|
194
|
+
functionCalling: false,
|
|
195
|
+
vision: false,
|
|
196
|
+
streaming: false,
|
|
197
|
+
jsonMode: false,
|
|
198
|
+
audioInput: false,
|
|
199
|
+
audioOutput: false,
|
|
200
|
+
imageGeneration: false,
|
|
201
|
+
embeddings: true,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: DyFM_OAI_Model.textEmbedding_3Large,
|
|
206
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
207
|
+
modelType: DyFM_AI_ModelType.Embedding,
|
|
208
|
+
displayName: 'text-embedding-3-large',
|
|
209
|
+
status: 'ga',
|
|
210
|
+
contextWindow: 8_191,
|
|
211
|
+
capabilities: {
|
|
212
|
+
functionCalling: false,
|
|
213
|
+
vision: false,
|
|
214
|
+
streaming: false,
|
|
215
|
+
jsonMode: false,
|
|
216
|
+
audioInput: false,
|
|
217
|
+
audioOutput: false,
|
|
218
|
+
imageGeneration: false,
|
|
219
|
+
embeddings: true,
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
// ── Image generation (current GA) ──
|
|
224
|
+
{
|
|
225
|
+
id: DyFM_OAI_Model.gptImage_2,
|
|
226
|
+
provider: DyFM_AI_Provider.OpenAI,
|
|
227
|
+
modelType: DyFM_AI_ModelType.Image,
|
|
228
|
+
displayName: 'GPT Image 2',
|
|
229
|
+
status: 'ga',
|
|
230
|
+
capabilities: {
|
|
231
|
+
functionCalling: false,
|
|
232
|
+
vision: true, // accepts image input for editing
|
|
233
|
+
streaming: false,
|
|
234
|
+
jsonMode: false,
|
|
235
|
+
audioInput: false,
|
|
236
|
+
audioOutput: false,
|
|
237
|
+
imageGeneration: true,
|
|
238
|
+
embeddings: false,
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
];
|