@llumiverse/common 0.23.0-dev.20251121 → 0.23.0
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/lib/cjs/capability/azure_foundry.js +1 -0
- package/lib/cjs/capability/azure_foundry.js.map +1 -1
- package/lib/cjs/capability/bedrock.js +94 -127
- package/lib/cjs/capability/bedrock.js.map +1 -1
- package/lib/cjs/capability/openai.js +14 -56
- package/lib/cjs/capability/openai.js.map +1 -1
- package/lib/cjs/capability/vertexai.js +11 -29
- package/lib/cjs/capability/vertexai.js.map +1 -1
- package/lib/cjs/options/vertexai.js +30 -5
- package/lib/cjs/options/vertexai.js.map +1 -1
- package/lib/cjs/types.js +3 -0
- package/lib/cjs/types.js.map +1 -1
- package/lib/esm/capability/azure_foundry.js +1 -0
- package/lib/esm/capability/azure_foundry.js.map +1 -1
- package/lib/esm/capability/bedrock.js +94 -127
- package/lib/esm/capability/bedrock.js.map +1 -1
- package/lib/esm/capability/openai.js +14 -56
- package/lib/esm/capability/openai.js.map +1 -1
- package/lib/esm/capability/vertexai.js +11 -29
- package/lib/esm/capability/vertexai.js.map +1 -1
- package/lib/esm/options/vertexai.js +29 -4
- package/lib/esm/options/vertexai.js.map +1 -1
- package/lib/esm/types.js +3 -0
- package/lib/esm/types.js.map +1 -1
- package/lib/types/capability/azure_foundry.d.ts +1 -0
- package/lib/types/capability/azure_foundry.d.ts.map +1 -1
- package/lib/types/capability/bedrock.d.ts +1 -0
- package/lib/types/capability/bedrock.d.ts.map +1 -1
- package/lib/types/capability/openai.d.ts +1 -0
- package/lib/types/capability/openai.d.ts.map +1 -1
- package/lib/types/capability/vertexai.d.ts +1 -0
- package/lib/types/capability/vertexai.d.ts.map +1 -1
- package/lib/types/capability.d.ts +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/options/azure_foundry.d.ts +1 -0
- package/lib/types/options/bedrock.d.ts +1 -0
- package/lib/types/options/fallback.d.ts +1 -0
- package/lib/types/options/groq.d.ts +1 -0
- package/lib/types/options/openai.d.ts +1 -0
- package/lib/types/options/vertexai.d.ts +7 -0
- package/lib/types/options/vertexai.d.ts.map +1 -1
- package/lib/types/options.d.ts +1 -0
- package/lib/types/types.d.ts +8 -1
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/capability/azure_foundry.ts +1 -0
- package/src/capability/bedrock.ts +98 -128
- package/src/capability/openai.ts +20 -62
- package/src/capability/vertexai.ts +15 -33
- package/src/options/vertexai.ts +32 -4
- package/src/types.ts +8 -1
- package/lib/tsconfig.tsbuildinfo +0 -1
|
@@ -1,101 +1,72 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ModelCapabilities, ModelModalities } from "../types.js";
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// Explicit exception lists keyed by the model identifier (last segment after the prefix)
|
|
4
|
+
const RECORD_FOUNDATION_EXCEPTIONS: Record<string, ModelCapabilities> = {};
|
|
5
|
+
const RECORD_PROFILE_EXCEPTIONS: Record<string, ModelCapabilities> = {
|
|
6
|
+
"meta.llama3-1-70b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
7
|
+
"meta.llama3-1-8b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// Record of Bedrock model capabilities keyed by model identifier.
|
|
11
|
+
// Only include models that differ from their family defaults
|
|
4
12
|
const RECORD_MODEL_CAPABILITIES: Record<string, ModelCapabilities> = {
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"foundation-model/amazon.titan-text-express-v1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
13
|
-
"foundation-model/amazon.titan-text-lite-v1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
14
|
-
"foundation-model/amazon.titan-text-premier-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
15
|
-
"foundation-model/amazon.titan-tg1-large": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
16
|
-
"foundation-model/anthropic.claude-3-5-haiku-20241022-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
17
|
-
"foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
18
|
-
"foundation-model/anthropic.claude-3-5-sonnet-20241022-v2:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
19
|
-
"foundation-model/anthropic.claude-3-haiku-20240307-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
20
|
-
"foundation-model/anthropic.claude-3-opus-20240229-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
21
|
-
"foundation-model/anthropic.claude-3-sonnet-20240229-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
22
|
-
"foundation-model/anthropic.claude-instant-v1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
23
|
-
"foundation-model/anthropic.claude-v2": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
24
|
-
"foundation-model/anthropic.claude-v2:1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
25
|
-
"foundation-model/cohere.command-light-text-v14": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
26
|
-
"foundation-model/cohere.command-r-plus-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
27
|
-
"foundation-model/cohere.command-r-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
28
|
-
"foundation-model/cohere.command-text-v14": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
29
|
-
"foundation-model/meta.llama3-1-405b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
30
|
-
"foundation-model/meta.llama3-1-70b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
31
|
-
"foundation-model/meta.llama3-1-8b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
32
|
-
"foundation-model/meta.llama3-70b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
33
|
-
"foundation-model/meta.llama3-8b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
34
|
-
"foundation-model/mistral.mixtral-8x7b-instruct-v0:1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
35
|
-
"foundation-model/mistral.mistral-7b-instruct-v0:2": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
36
|
-
"foundation-model/mistral.mistral-large-2402-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
37
|
-
"foundation-model/mistral.mistral-large-2407-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
38
|
-
"foundation-model/mistral.mistral-small-2402-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
39
|
-
"foundation-model/openai.gpt-oss-20b-1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
40
|
-
"foundation-model/openai.gpt-oss-120b-1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
41
|
-
"inference-profile/us.amazon.nova-lite-v1:0": { input: { text: true, image: true, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
42
|
-
"inference-profile/us.amazon.nova-micro-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
43
|
-
"inference-profile/us.amazon.nova-premier-v1:0": { input: { text: true, image: true, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
44
|
-
"inference-profile/us.amazon.nova-pro-v1:0": { input: { text: true, image: true, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
45
|
-
"inference-profile/us.anthropic.claude-3-5-haiku-20241022-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
46
|
-
"inference-profile/us.anthropic.claude-3-5-sonnet-20240620-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
47
|
-
"inference-profile/us.anthropic.claude-3-5-sonnet-20241022-v2:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
48
|
-
"inference-profile/us.anthropic.claude-3-7-sonnet-20250219-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
49
|
-
"inference-profile/us.anthropic.claude-3-haiku-20240307-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
50
|
-
"inference-profile/us.anthropic.claude-3-opus-20240229-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
51
|
-
"inference-profile/us.anthropic.claude-3-sonnet-20240229-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
52
|
-
"inference-profile/us.anthropic.claude-opus-4-20250514-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
53
|
-
"inference-profile/us.anthropic.claude-sonnet-4-20250514-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
54
|
-
"inference-profile/us.deepseek.r1-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
55
|
-
"inference-profile/us.meta.llama3-1-70b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
56
|
-
"inference-profile/us.meta.llama3-1-8b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
57
|
-
"inference-profile/us.meta.llama3-2-1b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
58
|
-
"inference-profile/us.meta.llama3-2-11b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
59
|
-
"inference-profile/us.meta.llama3-2-3b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
60
|
-
"inference-profile/us.meta.llama3-2-90b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
61
|
-
"inference-profile/us.meta.llama3-3-70b-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
62
|
-
"inference-profile/us.meta.llama4-maverick-17b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
63
|
-
"inference-profile/us.meta.llama4-scout-17b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
64
|
-
"inference-profile/us.mistral.pixtral-large-2502-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
65
|
-
"inference-profile/us.writer.palmyra-x4-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
66
|
-
"inference-profile/us.writer.palmyra-x5-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
13
|
+
// Models with specific exceptions that differ from family
|
|
14
|
+
"ai21.jamba-instruct-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
15
|
+
"amazon.nova-canvas-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { image: true, text: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
16
|
+
"amazon.nova-micro-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
17
|
+
"anthropic.claude-3-5-haiku-20241022-v1:0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
18
|
+
"meta.llama3-2-11b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
19
|
+
"meta.llama3-2-90b-instruct-v1:0": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
67
20
|
};
|
|
68
21
|
|
|
69
|
-
//
|
|
22
|
+
// Family capabilities (longest prefix match)
|
|
70
23
|
const RECORD_FAMILY_CAPABILITIES: Record<string, ModelCapabilities> = {
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"inference-profile/us.meta.llama4-maverick-17b": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
93
|
-
"inference-profile/us.meta.llama4-scout-17b": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
94
|
-
"inference-profile/us.mistral.pixtral": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
95
|
-
"inference-profile/us.writer.palmyra": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
96
|
-
"inference-profile/us.twelvelabs.": { input: { text: true, image: false, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
24
|
+
"ai21.jamba": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
25
|
+
"amazon.nova": { input: { text: true, image: true, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
26
|
+
"amazon.titan": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
27
|
+
"anthropic.claude-3-5-haiku": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
28
|
+
"anthropic.claude": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
29
|
+
"cohere.command-r": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: true },
|
|
30
|
+
"cohere.command": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
31
|
+
"deepseek.r1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
32
|
+
"meta.llama3-1": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
33
|
+
"meta.llama3-2": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
34
|
+
"meta.llama3-3": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
35
|
+
"meta.llama3": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
36
|
+
"meta.llama4": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
37
|
+
"mistral.mistral-large": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
38
|
+
"mistral.mistral": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
39
|
+
"mistral.mixtral": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
40
|
+
"mistral.pixtral": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
41
|
+
"openai.gpt-oss": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
42
|
+
"qwen.": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false, tool_support_streaming: false },
|
|
43
|
+
"twelvelabs.": { input: { text: true, image: false, video: true, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
44
|
+
"writer.palmyra": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true, tool_support_streaming: false },
|
|
97
45
|
};
|
|
98
46
|
|
|
47
|
+
function extractModelLookupKey(modelName: string): string {
|
|
48
|
+
const lower = modelName.toLowerCase();
|
|
49
|
+
const lastSlashIdx = lower.lastIndexOf("/");
|
|
50
|
+
let key = lastSlashIdx === -1 ? lower : lower.slice(lastSlashIdx + 1);
|
|
51
|
+
if (lower.includes("inference-profile/")) {
|
|
52
|
+
key = key.replace(/^[^.]+\./, "");
|
|
53
|
+
}
|
|
54
|
+
return key;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function findFamilyCapability(
|
|
58
|
+
lookupKey: string,
|
|
59
|
+
families: Record<string, ModelCapabilities>
|
|
60
|
+
): ModelCapabilities | undefined {
|
|
61
|
+
let bestKey: string | undefined;
|
|
62
|
+
for (const key of Object.keys(families)) {
|
|
63
|
+
if (lookupKey.startsWith(key) && (!bestKey || key.length > bestKey.length)) {
|
|
64
|
+
bestKey = key;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return bestKey ? families[bestKey] : undefined;
|
|
68
|
+
}
|
|
69
|
+
|
|
99
70
|
/**
|
|
100
71
|
* Extract the model identifier from an ARN or inference profile
|
|
101
72
|
* @param modelName The full model ARN or name
|
|
@@ -139,57 +110,56 @@ function modelMatches(modelName: string, patterns: string[]): boolean {
|
|
|
139
110
|
*/
|
|
140
111
|
export function getModelCapabilitiesBedrock(model: string): ModelCapabilities {
|
|
141
112
|
// Normalize ARN or inference-profile to model ID
|
|
142
|
-
|
|
113
|
+
const modelLower = model.toLowerCase();
|
|
114
|
+
let normalized = modelLower;
|
|
143
115
|
const arnPattern = /^arn:aws:bedrock:[^:]+:[^:]*:(inference-profile|foundation-model)\/.+/i;
|
|
144
|
-
if (arnPattern.test(
|
|
116
|
+
if (arnPattern.test(modelLower)) {
|
|
145
117
|
// Extract after last occurrence of 'foundation-model/' or 'inference-profile/'
|
|
146
|
-
const foundationIdx =
|
|
147
|
-
const inferenceIdx =
|
|
118
|
+
const foundationIdx = modelLower.lastIndexOf('foundation-model/');
|
|
119
|
+
const inferenceIdx = modelLower.lastIndexOf('inference-profile/');
|
|
148
120
|
if (foundationIdx !== -1) {
|
|
149
|
-
normalized =
|
|
121
|
+
normalized = modelLower.substring(foundationIdx);
|
|
150
122
|
} else if (inferenceIdx !== -1) {
|
|
151
|
-
normalized =
|
|
123
|
+
normalized = modelLower.substring(inferenceIdx);
|
|
152
124
|
}
|
|
153
125
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
126
|
+
const isInferenceProfile = normalized.startsWith("inference-profile/");
|
|
127
|
+
const isFoundationModel = normalized.startsWith("foundation-model/");
|
|
128
|
+
const lookupKey = extractModelLookupKey(normalized);
|
|
129
|
+
|
|
130
|
+
// 1. Check exceptions
|
|
131
|
+
if (isFoundationModel) {
|
|
132
|
+
const exception = RECORD_FOUNDATION_EXCEPTIONS[lookupKey];
|
|
133
|
+
if (exception) return exception;
|
|
134
|
+
} else if (isInferenceProfile) {
|
|
135
|
+
const exception = RECORD_PROFILE_EXCEPTIONS[lookupKey];
|
|
136
|
+
if (exception) return exception;
|
|
158
137
|
}
|
|
159
138
|
|
|
160
|
-
//
|
|
161
|
-
const
|
|
162
|
-
if (
|
|
139
|
+
// 2. Check recorded capabilities by model
|
|
140
|
+
const modelCapability = RECORD_MODEL_CAPABILITIES[lookupKey];
|
|
141
|
+
if (modelCapability) return modelCapability;
|
|
163
142
|
|
|
164
|
-
//
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
for (const key of Object.keys(RECORD_FAMILY_CAPABILITIES)) {
|
|
168
|
-
if (normalized.startsWith(key) && key.length > bestFamilyLength) {
|
|
169
|
-
bestFamilyKey = key;
|
|
170
|
-
bestFamilyLength = key.length;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
if (bestFamilyKey) {
|
|
174
|
-
return RECORD_FAMILY_CAPABILITIES[bestFamilyKey];
|
|
175
|
-
}
|
|
143
|
+
// 3. Check recorded capabilities by family
|
|
144
|
+
const familyCapability = findFamilyCapability(lookupKey, RECORD_FAMILY_CAPABILITIES);
|
|
145
|
+
if (familyCapability) return familyCapability;
|
|
176
146
|
|
|
177
|
-
//
|
|
178
|
-
|
|
147
|
+
// 4. Fallback: infer from normalized name
|
|
148
|
+
const inferredName = normalizeModelName(lookupKey);
|
|
179
149
|
const input: ModelModalities = {
|
|
180
|
-
text: modelMatches(
|
|
181
|
-
image: modelMatches(
|
|
182
|
-
video: modelMatches(
|
|
183
|
-
audio: modelMatches(
|
|
150
|
+
text: modelMatches(inferredName, TEXT_INPUT_MODELS) || undefined,
|
|
151
|
+
image: modelMatches(inferredName, IMAGE_INPUT_MODELS) || undefined,
|
|
152
|
+
video: modelMatches(inferredName, VIDEO_INPUT_MODELS) || undefined,
|
|
153
|
+
audio: modelMatches(inferredName, AUDIO_INPUT_MODELS) || undefined,
|
|
184
154
|
embed: false
|
|
185
155
|
};
|
|
186
156
|
const output: ModelModalities = {
|
|
187
|
-
text: modelMatches(
|
|
188
|
-
image: modelMatches(
|
|
189
|
-
video: modelMatches(
|
|
190
|
-
audio: modelMatches(
|
|
191
|
-
embed: modelMatches(
|
|
157
|
+
text: modelMatches(inferredName, TEXT_OUTPUT_MODELS) || undefined,
|
|
158
|
+
image: modelMatches(inferredName, IMAGE_OUTPUT_MODELS) || undefined,
|
|
159
|
+
video: modelMatches(inferredName, VIDEO_OUTPUT_MODELS) || undefined,
|
|
160
|
+
audio: modelMatches(inferredName, AUDIO_OUTPUT_MODELS) || undefined,
|
|
161
|
+
embed: modelMatches(inferredName, EMBEDDING_OUTPUT_MODELS) || undefined
|
|
192
162
|
};
|
|
193
|
-
const tool_support = modelMatches(
|
|
163
|
+
const tool_support = modelMatches(inferredName, TOOL_SUPPORT_MODELS) || undefined;
|
|
194
164
|
return { input, output, tool_support };
|
|
195
165
|
}
|
package/src/capability/openai.ts
CHANGED
|
@@ -1,71 +1,29 @@
|
|
|
1
|
-
import { ModelModalities } from "../types.js";
|
|
1
|
+
import { ModelModalities } from "../types.js";
|
|
2
2
|
|
|
3
3
|
// Record of OpenAI model capabilities keyed by model ID (lowercased)
|
|
4
4
|
const RECORD_MODEL_CAPABILITIES: Record<string, { input: ModelModalities; output: ModelModalities; tool_support?: boolean }> = {
|
|
5
|
-
"chatgpt-4o-latest": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false }
|
|
6
|
-
"gpt-3.5-turbo": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
7
|
-
"gpt-3.5-turbo-0125": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
8
|
-
"gpt-3.5-turbo-1106": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
9
|
-
"gpt-3.5-turbo-16k": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
10
|
-
"gpt-3.5-turbo-instruct": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
11
|
-
"gpt-3.5-turbo-instruct-0914": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
12
|
-
"gpt-4": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
13
|
-
"gpt-4-0125-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
14
|
-
"gpt-4-0613": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
15
|
-
"gpt-4-1106-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
16
|
-
"gpt-4-turbo": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
17
|
-
"gpt-4-turbo-2024-04-09": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
18
|
-
"gpt-4-turbo-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
19
|
-
"gpt-4.1": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
20
|
-
"gpt-4.1-2025-04-14": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
21
|
-
"gpt-4.1-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
22
|
-
"gpt-4.1-mini-2025-04-14": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
23
|
-
"gpt-4.1-nano": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
24
|
-
"gpt-4.1-nano-2025-04-14": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
25
|
-
"gpt-4.5-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
26
|
-
"gpt-4.5-preview-2025-02-27": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
27
|
-
"gpt-4o": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
28
|
-
"gpt-4o-2024-05-13": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
29
|
-
"gpt-4o-2024-08-06": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
30
|
-
"gpt-4o-2024-11-20": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
31
|
-
"gpt-4o-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
32
|
-
"gpt-4o-mini-2024-07-18": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
33
|
-
"gpt-4o-mini-search-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
34
|
-
"gpt-4o-mini-search-preview-2025-03-11": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
35
|
-
"gpt-4o-search-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
36
|
-
"gpt-4o-search-preview-2025-03-11": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
37
|
-
"gpt-image-1": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
38
|
-
"o1": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
39
|
-
"o1-2024-12-17": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
40
|
-
"o1-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
41
|
-
"o1-mini-2024-09-12": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
42
|
-
"o1-preview": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
43
|
-
"o1-preview-2024-09-12": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
44
|
-
"o1-pro": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
45
|
-
"o1-pro-2025-03-19": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
46
|
-
"o3": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
47
|
-
"o3-2025-04-16": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
48
|
-
"o3-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
49
|
-
"o3-mini-2025-01-31": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
50
|
-
"o4-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
51
|
-
"o4-mini-2025-04-16": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true }
|
|
5
|
+
"chatgpt-4o-latest": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false }
|
|
52
6
|
};
|
|
53
7
|
|
|
54
8
|
// Populate RECORD_FAMILY_CAPABILITIES as a const record (lowest common denominator for each family)
|
|
55
9
|
const RECORD_FAMILY_CAPABILITIES: Record<string, { input: ModelModalities; output: ModelModalities; tool_support?: boolean }> = {
|
|
56
|
-
"gpt":
|
|
57
|
-
"gpt-3.5":
|
|
58
|
-
"gpt-
|
|
59
|
-
"gpt-4":
|
|
60
|
-
"gpt-
|
|
61
|
-
"gpt-4.
|
|
62
|
-
"gpt-
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
10
|
+
"gpt": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
11
|
+
"gpt-3.5": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
12
|
+
"gpt-4": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
13
|
+
"gpt-4-turbo": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
14
|
+
"gpt-4o": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
15
|
+
"gpt-4.1": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
16
|
+
"gpt-4.5": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
17
|
+
"gpt-image": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
18
|
+
"gpt-oss": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
19
|
+
"o": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
20
|
+
"o1-mini": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
21
|
+
"o1-preview": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
22
|
+
"omni-moderation": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
23
|
+
"sora": { input: { text: true, image: true, video: true, audio: false, embed: false }, output: { text: false, image: false, video: true, audio: true, embed: false }, tool_support: false },
|
|
24
|
+
"text-embedding": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: false, image: false, video: false, audio: false, embed: true }, tool_support: false },
|
|
25
|
+
"text-moderation": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
26
|
+
"whisper": { input: { text: false, image: false, video: false, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false }
|
|
69
27
|
};
|
|
70
28
|
|
|
71
29
|
// Fallback pattern lists for inferring modalities and tool support
|
|
@@ -78,7 +36,7 @@ const VIDEO_OUTPUT_MODELS = ["video"];
|
|
|
78
36
|
const AUDIO_OUTPUT_MODELS = ["audio"];
|
|
79
37
|
const TEXT_OUTPUT_MODELS = ["text"];
|
|
80
38
|
const EMBEDDING_OUTPUT_MODELS = ["embed"];
|
|
81
|
-
const TOOL_SUPPORT_MODELS = ["tool", "
|
|
39
|
+
const TOOL_SUPPORT_MODELS = ["tool", "gpt", "o1", "o3", "o4"];
|
|
82
40
|
|
|
83
41
|
function modelMatches(modelName: string, patterns: string[]): boolean {
|
|
84
42
|
return patterns.some(pattern => modelName.includes(pattern));
|
|
@@ -2,43 +2,25 @@ import { ModelModalities } from "../types.js";
|
|
|
2
2
|
|
|
3
3
|
// Record of Vertex AI model capabilities keyed by model ID (last path segment, lowercased)
|
|
4
4
|
const RECORD_MODEL_CAPABILITIES: Record<string, { input: ModelModalities; output: ModelModalities; tool_support?: boolean }> = {
|
|
5
|
-
"gemini-1.5-flash-002": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
6
|
-
"gemini-1.5-pro-002": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
7
|
-
"gemini-2.0-flash-001": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
8
5
|
"gemini-2.0-flash-lite-001": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
9
|
-
"gemini-2.5-flash-preview-04-17": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
10
|
-
"gemini-2.5-pro-preview-05-06": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
11
|
-
"imagen-3.0-generate-002": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
12
|
-
"imagen-3.0-capability-001": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
13
|
-
"imagen-4.0-generate-preview-05-20": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
14
|
-
"claude-3-opus": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
15
|
-
"claude-3-haiku": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
16
|
-
"claude-3-5-sonnet": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
17
|
-
"claude-3-5-haiku": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
18
|
-
"claude-3-5-sonnet-v2": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
19
|
-
"claude-3-7-sonnet": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
20
|
-
"claude-opus-4": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
21
|
-
"claude-sonnet-4": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
22
6
|
};
|
|
23
7
|
|
|
24
8
|
// Populate RECORD_FAMILY_CAPABILITIES as a const record (lowest common denominator for each family)
|
|
25
9
|
const RECORD_FAMILY_CAPABILITIES: Record<string, { input: ModelModalities; output: ModelModalities; tool_support?: boolean }> = {
|
|
26
|
-
"gemini
|
|
27
|
-
"gemini-2.
|
|
28
|
-
"gemini-
|
|
29
|
-
"gemini-
|
|
30
|
-
|
|
31
|
-
"imagen-3.0
|
|
32
|
-
"imagen-3.0-capability":
|
|
33
|
-
"imagen-4.0
|
|
34
|
-
"imagen-4.0-
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"claude": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
41
|
-
"llama": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
10
|
+
"gemini": { input: { text: true, image: true, video: true, audio: true, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
11
|
+
"gemini-2.5-flash-image": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
12
|
+
"gemini-3.0-pro-image": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
13
|
+
"gemini-3.0-flash-image": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
14
|
+
'imagen': { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
15
|
+
"imagen-3.0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
16
|
+
"imagen-3.0-capability": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
17
|
+
"imagen-4.0": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
18
|
+
"imagen-4.0-capability": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: false, image: true, video: false, audio: false, embed: false }, tool_support: false },
|
|
19
|
+
"claude": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
20
|
+
"llama": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
21
|
+
"llama-2": { input: { text: true, image: false, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: false },
|
|
22
|
+
"llama-3.2": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
23
|
+
"llama-4": { input: { text: true, image: true, video: false, audio: false, embed: false }, output: { text: true, image: false, video: false, audio: false, embed: false }, tool_support: true },
|
|
42
24
|
};
|
|
43
25
|
|
|
44
26
|
// Fallback pattern lists for inferring modalities and tool support
|
|
@@ -51,7 +33,7 @@ const VIDEO_OUTPUT_MODELS = ["video"];
|
|
|
51
33
|
const AUDIO_OUTPUT_MODELS = ["audio"];
|
|
52
34
|
const TEXT_OUTPUT_MODELS = ["text"];
|
|
53
35
|
const EMBEDDING_OUTPUT_MODELS = ["embed"];
|
|
54
|
-
const TOOL_SUPPORT_MODELS = ["tool", "sonnet", "opus", "gemini", "claude
|
|
36
|
+
const TOOL_SUPPORT_MODELS = ["tool", "sonnet", "opus", "gemini", "claude"];
|
|
55
37
|
|
|
56
38
|
function modelMatches(modelName: string, patterns: string[]): boolean {
|
|
57
39
|
return patterns.some(pattern => modelName.includes(pattern));
|
package/src/options/vertexai.ts
CHANGED
|
@@ -23,6 +23,12 @@ export enum ImagenMaskMode {
|
|
|
23
23
|
MASK_MODE_SEMANTIC = "MASK_MODE_SEMANTIC",
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
export enum ThinkingLevel {
|
|
27
|
+
HIGH = "HIGH",
|
|
28
|
+
LOW = "LOW",
|
|
29
|
+
THINKING_LEVEL_UNSPECIFIED = "THINKING_LEVEL_UNSPECIFIED"
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
export interface ImagenOptions {
|
|
27
33
|
_option_id: "vertexai-imagen"
|
|
28
34
|
|
|
@@ -75,6 +81,7 @@ export interface VertexAIGeminiOptions {
|
|
|
75
81
|
seed?: number;
|
|
76
82
|
include_thoughts?: boolean;
|
|
77
83
|
thinking_budget_tokens?: number;
|
|
84
|
+
thinking_level?: ThinkingLevel;
|
|
78
85
|
image_aspect_ratio?: "1:1" | "2:3" | "3:2" | "3:4" | "4:3" | "9:16" | "16:9" | "21:9";
|
|
79
86
|
}
|
|
80
87
|
|
|
@@ -290,8 +297,8 @@ function getGeminiOptions(model: string, _option?: ModelOptions): ModelOptionsIn
|
|
|
290
297
|
options
|
|
291
298
|
};
|
|
292
299
|
}
|
|
293
|
-
// Special handling for gemini-2.5-flash-image
|
|
294
|
-
if (model.includes("gemini-2.5-flash-image")) {
|
|
300
|
+
// Special handling for gemini-2.5-flash-image and gemini-3-pro-image
|
|
301
|
+
if (model.includes("gemini-2.5-flash-image") || model.includes("gemini-3-pro-image")) {
|
|
295
302
|
const max_tokens_limit = 32768;
|
|
296
303
|
const excludeOptions = ["max_tokens", "presence_penalty", "frequency_penalty", "seed", "top_k"];
|
|
297
304
|
let commonOptions = textOptionsFallback.options.filter((option) => !excludeOptions.includes(option.name));
|
|
@@ -358,6 +365,27 @@ function getGeminiOptions(model: string, _option?: ModelOptions): ModelOptionsIn
|
|
|
358
365
|
name: SharedOptions.seed, type: OptionType.numeric, integer: true, description: "The seed for the generation, useful for reproducibility"
|
|
359
366
|
};
|
|
360
367
|
|
|
368
|
+
if (model.includes("-3-")) {
|
|
369
|
+
const geminiThinkingOptions: ModelOptionInfoItem[] = [
|
|
370
|
+
{
|
|
371
|
+
name: "include_thoughts",
|
|
372
|
+
type: OptionType.boolean,
|
|
373
|
+
default: false,
|
|
374
|
+
description: "Include the model's reasoning process in the response"
|
|
375
|
+
}
|
|
376
|
+
];
|
|
377
|
+
|
|
378
|
+
return {
|
|
379
|
+
_option_id: "vertexai-gemini",
|
|
380
|
+
options: [
|
|
381
|
+
...max_tokens,
|
|
382
|
+
...commonOptions,
|
|
383
|
+
seedOption,
|
|
384
|
+
...geminiThinkingOptions,
|
|
385
|
+
]
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
|
|
361
389
|
if (model.includes("-2.5-")) {
|
|
362
390
|
// Gemini 2.5 thinking models
|
|
363
391
|
|
|
@@ -516,10 +544,10 @@ function getLlamaOptions(model: string): ModelOptionsInfo {
|
|
|
516
544
|
}
|
|
517
545
|
|
|
518
546
|
function getGeminiMaxTokensLimit(model: string): number {
|
|
519
|
-
if (model.includes("gemini-2.5-flash-image")) {
|
|
547
|
+
if (model.includes("gemini-2.5-flash-image") || model.includes("gemini-3-pro-image")) {
|
|
520
548
|
return 32768;
|
|
521
549
|
}
|
|
522
|
-
if (model.includes("thinking") || model.includes("-2.5-")) {
|
|
550
|
+
if (model.includes("thinking") || model.includes("-2.5-") || model.includes("-3-")) {
|
|
523
551
|
return 65536;
|
|
524
552
|
}
|
|
525
553
|
if (model.includes("ultra") || model.includes("vision")) {
|
package/src/types.ts
CHANGED
|
@@ -331,7 +331,11 @@ export interface StatelessExecutionOptions extends PromptOptions {
|
|
|
331
331
|
*/
|
|
332
332
|
include_original_response?: boolean;
|
|
333
333
|
model_options?: ModelOptions;
|
|
334
|
-
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* @deprecated This is deprecated. Use CompletionResult.type information instead.
|
|
337
|
+
*/
|
|
338
|
+
output_modality?: Modalities;
|
|
335
339
|
}
|
|
336
340
|
|
|
337
341
|
export interface ExecutionOptions extends StatelessExecutionOptions {
|
|
@@ -451,6 +455,9 @@ export interface ExecutionTokenUsage {
|
|
|
451
455
|
total?: number;
|
|
452
456
|
}
|
|
453
457
|
|
|
458
|
+
/**
|
|
459
|
+
* @deprecated This is deprecated. Use CompletionResult.type information instead.
|
|
460
|
+
*/
|
|
454
461
|
export enum Modalities {
|
|
455
462
|
text = "text",
|
|
456
463
|
image = "image",
|