@agent-native/core 0.12.18 → 0.12.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/default-model.d.ts +1 -20
- package/dist/agent/default-model.d.ts.map +1 -1
- package/dist/agent/default-model.js +1 -20
- package/dist/agent/default-model.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts +2 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +13 -38
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +3 -11
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +3 -21
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/model-config.d.ts +99 -0
- package/dist/agent/model-config.d.ts.map +1 -0
- package/dist/agent/model-config.js +112 -0
- package/dist/agent/model-config.js.map +1 -0
- package/dist/agent/production-agent.d.ts +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +13 -1
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/create.d.ts +4 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +19 -4
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts +3 -0
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +67 -27
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +4 -0
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +34 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +4 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +10 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +50 -8
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +4 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +11 -2
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +10 -9
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +5 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +19 -6
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/pasted-text.d.ts.map +1 -1
- package/dist/client/composer/pasted-text.js +1 -1
- package/dist/client/composer/pasted-text.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +5 -40
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
- package/dist/client/settings/AutomationsSection.js +3 -30
- package/dist/client/settings/AutomationsSection.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +44 -14
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/use-chat-models.d.ts.map +1 -1
- package/dist/client/use-chat-models.js +41 -3
- package/dist/client/use-chat-models.js.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +61 -6
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +158 -7
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +1 -2
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/types.d.ts +1 -1
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +2 -2
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +11 -7
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts +1 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +49 -9
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +4 -2
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +3 -9
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/sentry-config.d.ts +5 -0
- package/dist/server/sentry-config.d.ts.map +1 -0
- package/dist/server/sentry-config.js +43 -0
- package/dist/server/sentry-config.js.map +1 -0
- package/dist/server/sentry-plugin.d.ts +1 -1
- package/dist/server/sentry-plugin.js +2 -2
- package/dist/server/sentry-plugin.js.map +1 -1
- package/dist/server/sentry.d.ts +4 -4
- package/dist/server/sentry.d.ts.map +1 -1
- package/dist/server/sentry.js +13 -13
- package/dist/server/sentry.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +12 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/templates/workspace-root/_gitignore +1 -0
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +5 -5
- package/dist/usage/store.js.map +1 -1
- package/docs/content/deployment.md +23 -3
- package/docs/content/multi-app-workspace.md +8 -2
- package/docs/content/observability.md +8 -8
- package/package.json +1 -1
- package/src/templates/workspace-root/_gitignore +1 -0
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* The framework-wide default model.
|
|
3
|
-
*
|
|
4
|
-
* One place to bump the default when a new Claude model ships. Everything
|
|
5
|
-
* that needs a default model fallback (agent chat, A2A handler, integration
|
|
6
|
-
* agent, MCP askAgent, etc.) imports this constant — there are no hardcoded
|
|
7
|
-
* model ID literals scattered across the codebase.
|
|
8
|
-
*
|
|
9
|
-
* Templates and apps can still override per-call by passing `model: "..."`
|
|
10
|
-
* in their plugin options; this is just the value used when no override is
|
|
11
|
-
* provided.
|
|
12
|
-
*
|
|
13
|
-
* Why sonnet (not haiku): the agent makes user-facing decisions (URLs, IDs,
|
|
14
|
-
* delegated answers). Haiku is fast and cheap but hallucinates slugs and
|
|
15
|
-
* paths in user-facing text often enough that we hit it during normal use
|
|
16
|
-
* (e.g. a Slack reply with a deck URL pointing to a host that doesn't exist).
|
|
17
|
-
* Sonnet's accuracy at the same task is dramatically better and the latency
|
|
18
|
-
* cost is acceptable for the cross-app A2A path.
|
|
19
|
-
*/
|
|
20
|
-
export declare const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
1
|
+
export { DEFAULT_MODEL, DEFAULT_OPENAI_MODEL, DEFAULT_ANTHROPIC_MODEL, } from "./model-config.js";
|
|
21
2
|
//# sourceMappingURL=default-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-model.d.ts","sourceRoot":"","sources":["../../src/agent/default-model.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"default-model.d.ts","sourceRoot":"","sources":["../../src/agent/default-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* The framework-wide default model.
|
|
3
|
-
*
|
|
4
|
-
* One place to bump the default when a new Claude model ships. Everything
|
|
5
|
-
* that needs a default model fallback (agent chat, A2A handler, integration
|
|
6
|
-
* agent, MCP askAgent, etc.) imports this constant — there are no hardcoded
|
|
7
|
-
* model ID literals scattered across the codebase.
|
|
8
|
-
*
|
|
9
|
-
* Templates and apps can still override per-call by passing `model: "..."`
|
|
10
|
-
* in their plugin options; this is just the value used when no override is
|
|
11
|
-
* provided.
|
|
12
|
-
*
|
|
13
|
-
* Why sonnet (not haiku): the agent makes user-facing decisions (URLs, IDs,
|
|
14
|
-
* delegated answers). Haiku is fast and cheap but hallucinates slugs and
|
|
15
|
-
* paths in user-facing text often enough that we hit it during normal use
|
|
16
|
-
* (e.g. a Slack reply with a deck URL pointing to a host that doesn't exist).
|
|
17
|
-
* Sonnet's accuracy at the same task is dramatically better and the latency
|
|
18
|
-
* cost is acceptable for the cross-app A2A path.
|
|
19
|
-
*/
|
|
20
|
-
export const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
1
|
+
export { DEFAULT_MODEL, DEFAULT_OPENAI_MODEL, DEFAULT_ANTHROPIC_MODEL, } from "./model-config.js";
|
|
21
2
|
//# sourceMappingURL=default-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-model.js","sourceRoot":"","sources":["../../src/agent/default-model.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"default-model.js","sourceRoot":"","sources":["../../src/agent/default-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC","sourcesContent":["export {\n DEFAULT_MODEL,\n DEFAULT_OPENAI_MODEL,\n DEFAULT_ANTHROPIC_MODEL,\n} from \"./model-config.js\";\n"]}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* so the core package remains installable without the AI SDK.
|
|
13
13
|
*/
|
|
14
14
|
import type { AgentEngine, EngineCapabilities } from "./types.js";
|
|
15
|
-
|
|
15
|
+
import { type AISDKProvider } from "../model-config.js";
|
|
16
|
+
export type { AISDKProvider } from "../model-config.js";
|
|
16
17
|
declare const PROVIDER_CAPABILITIES: Record<AISDKProvider, EngineCapabilities>;
|
|
17
18
|
declare const PROVIDER_DEFAULT_MODELS: Record<AISDKProvider, string>;
|
|
18
19
|
declare const PROVIDER_SUPPORTED_MODELS: Record<AISDKProvider, readonly string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/ai-sdk-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-sdk-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/ai-sdk-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAI7E,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,QAAA,MAAM,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAyDpE,CAAC;AAMF,QAAA,MAAM,uBAAuB,EAKxB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEnC,QAAA,MAAM,yBAAyB,EAKf,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;AAEzD,QAAA,MAAM,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAStD,CAAC;AAEF,QAAA,MAAM,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CASpD,CAAC;AA0BF,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAsMD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,WAAW,CAEb;AA8CD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,GAClB,CAAC"}
|
|
@@ -12,9 +12,12 @@
|
|
|
12
12
|
* so the core package remains installable without the AI SDK.
|
|
13
13
|
*/
|
|
14
14
|
import { engineToolsToAISDK, engineMessagesToAISDK, aiSdkPartToEngineEvents, aiSdkStepToAssistantContent, } from "./translate-ai-sdk.js";
|
|
15
|
-
import {
|
|
15
|
+
import { AI_SDK_MODEL_CONFIG } from "../model-config.js";
|
|
16
16
|
import { readDeployCredentialEnv } from "../../server/credential-provider.js";
|
|
17
17
|
import { normalizeReasoningEffortForModel } from "../../shared/reasoning-effort.js";
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Provider definitions
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
18
21
|
const PROVIDER_CAPABILITIES = {
|
|
19
22
|
anthropic: {
|
|
20
23
|
thinking: true,
|
|
@@ -73,43 +76,15 @@ const PROVIDER_CAPABILITIES = {
|
|
|
73
76
|
parallelToolCalls: false,
|
|
74
77
|
},
|
|
75
78
|
};
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
};
|
|
86
|
-
const PROVIDER_SUPPORTED_MODELS = {
|
|
87
|
-
anthropic: [
|
|
88
|
-
"claude-opus-4-7",
|
|
89
|
-
"claude-sonnet-4-6",
|
|
90
|
-
"claude-haiku-4-5-20251001",
|
|
91
|
-
],
|
|
92
|
-
openai: ["gpt-5.5", "gpt-5.4", "gpt-5.4-mini"],
|
|
93
|
-
openrouter: [
|
|
94
|
-
"anthropic/claude-opus-4.7",
|
|
95
|
-
"anthropic/claude-sonnet-4.6",
|
|
96
|
-
"openai/gpt-5.4",
|
|
97
|
-
"google/gemini-2.5-flash",
|
|
98
|
-
],
|
|
99
|
-
google: ["gemini-3-flash-preview", "gemini-3.1-pro-preview"],
|
|
100
|
-
groq: [
|
|
101
|
-
"llama-3.3-70b-versatile",
|
|
102
|
-
"llama-3.1-70b-versatile",
|
|
103
|
-
"mixtral-8x7b-32768",
|
|
104
|
-
],
|
|
105
|
-
mistral: [
|
|
106
|
-
"mistral-large-latest",
|
|
107
|
-
"mistral-medium-latest",
|
|
108
|
-
"mistral-small-latest",
|
|
109
|
-
],
|
|
110
|
-
cohere: ["command-r-plus", "command-r"],
|
|
111
|
-
ollama: ["llama3.1", "llama3.2", "mistral", "codestral"],
|
|
112
|
-
};
|
|
79
|
+
const providerModelEntries = Object.entries(AI_SDK_MODEL_CONFIG);
|
|
80
|
+
const PROVIDER_DEFAULT_MODELS = Object.fromEntries(providerModelEntries.map(([provider, config]) => [
|
|
81
|
+
provider,
|
|
82
|
+
config.defaultModel,
|
|
83
|
+
]));
|
|
84
|
+
const PROVIDER_SUPPORTED_MODELS = Object.fromEntries(providerModelEntries.map(([provider, config]) => [
|
|
85
|
+
provider,
|
|
86
|
+
config.supportedModels,
|
|
87
|
+
]));
|
|
113
88
|
const PROVIDER_ENV_VARS = {
|
|
114
89
|
anthropic: ["ANTHROPIC_API_KEY"],
|
|
115
90
|
openai: ["OPENAI_API_KEY"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk-engine.js","sourceRoot":"","sources":["../../../src/agent/engine/ai-sdk-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AISDKEngine — wraps the Vercel AI SDK (ai package) for multi-provider support.\n *\n * Supports Anthropic, OpenAI, Google Gemini, Groq, and any provider with an\n * @ai-sdk/* package. Provider is selected via the `provider` config option.\n *\n * When provider is \"anthropic\", Anthropic-native features (thinking, cacheControl)\n * are forwarded through the AI SDK's providerOptions mechanism — no fidelity loss\n * compared to the native AnthropicEngine.\n *\n * The ai package is an OPTIONAL peer dependency. This engine uses dynamic import()\n * so the core package remains installable without the AI SDK.\n */\n\nimport type {\n AgentEngine,\n EngineCapabilities,\n EngineStreamOptions,\n EngineEvent,\n EngineContentPart,\n} from \"./types.js\";\nimport {\n engineToolsToAISDK,\n engineMessagesToAISDK,\n aiSdkPartToEngineEvents,\n aiSdkStepToAssistantContent,\n} from \"./translate-ai-sdk.js\";\nimport { DEFAULT_MODEL } from \"../default-model.js\";\nimport { readDeployCredentialEnv } from \"../../server/credential-provider.js\";\nimport { normalizeReasoningEffortForModel } from \"../../shared/reasoning-effort.js\";\n\n// ---------------------------------------------------------------------------\n// Provider definitions\n// ---------------------------------------------------------------------------\n\nexport type AISDKProvider =\n | \"anthropic\"\n | \"openai\"\n | \"openrouter\"\n | \"google\"\n | \"groq\"\n | \"mistral\"\n | \"cohere\"\n | \"ollama\";\n\nconst PROVIDER_CAPABILITIES: Record<AISDKProvider, EngineCapabilities> = {\n anthropic: {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: false, // not exposed through AI SDK yet\n parallelToolCalls: true,\n },\n openai: {\n thinking: true,\n promptCaching: false,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n openrouter: {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n google: {\n thinking: true,\n promptCaching: false,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n groq: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n mistral: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n cohere: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n ollama: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n};\n\nconst PROVIDER_DEFAULT_MODELS: Record<AISDKProvider, string> = {\n anthropic: DEFAULT_MODEL,\n openai: \"gpt-5.4\",\n openrouter: \"anthropic/claude-sonnet-4.6\",\n google: \"gemini-3-flash-preview\",\n groq: \"llama-3.3-70b-versatile\",\n mistral: \"mistral-large-latest\",\n cohere: \"command-r-plus\",\n ollama: \"llama3.1\",\n};\n\nconst PROVIDER_SUPPORTED_MODELS: Record<AISDKProvider, readonly string[]> = {\n anthropic: [\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5-20251001\",\n ],\n openai: [\"gpt-5.5\", \"gpt-5.4\", \"gpt-5.4-mini\"],\n openrouter: [\n \"anthropic/claude-opus-4.7\",\n \"anthropic/claude-sonnet-4.6\",\n \"openai/gpt-5.4\",\n \"google/gemini-2.5-flash\",\n ],\n google: [\"gemini-3-flash-preview\", \"gemini-3.1-pro-preview\"],\n groq: [\n \"llama-3.3-70b-versatile\",\n \"llama-3.1-70b-versatile\",\n \"mixtral-8x7b-32768\",\n ],\n mistral: [\n \"mistral-large-latest\",\n \"mistral-medium-latest\",\n \"mistral-small-latest\",\n ],\n cohere: [\"command-r-plus\", \"command-r\"],\n ollama: [\"llama3.1\", \"llama3.2\", \"mistral\", \"codestral\"],\n};\n\nconst PROVIDER_ENV_VARS: Record<AISDKProvider, string[]> = {\n anthropic: [\"ANTHROPIC_API_KEY\"],\n openai: [\"OPENAI_API_KEY\"],\n openrouter: [\"OPENROUTER_API_KEY\"],\n google: [\"GOOGLE_GENERATIVE_AI_API_KEY\"],\n groq: [\"GROQ_API_KEY\"],\n mistral: [\"MISTRAL_API_KEY\"],\n cohere: [\"COHERE_API_KEY\"],\n ollama: [], // runs locally\n};\n\nconst PROVIDER_PACKAGES: Record<AISDKProvider, string> = {\n anthropic: \"@ai-sdk/anthropic\",\n openai: \"@ai-sdk/openai\",\n openrouter: \"@openrouter/ai-sdk-provider\",\n google: \"@ai-sdk/google\",\n groq: \"@ai-sdk/groq\",\n mistral: \"@ai-sdk/mistral\",\n cohere: \"@ai-sdk/cohere\",\n ollama: \"ai-sdk-ollama\",\n};\n\n/** Factory export name per provider (not all follow `create<Provider>`). */\nconst PROVIDER_FACTORIES: Record<AISDKProvider, string> = {\n anthropic: \"createAnthropic\",\n openai: \"createOpenAI\",\n openrouter: \"createOpenRouter\",\n google: \"createGoogleGenerativeAI\",\n groq: \"createGroq\",\n mistral: \"createMistral\",\n cohere: \"createCohere\",\n ollama: \"createOllama\",\n};\n\nfunction googleThinkingBudget(effort: string) {\n if (effort === \"low\") return 1024;\n if (effort === \"high\") return 8000;\n if (effort === \"xhigh\") return 16_000;\n if (effort === \"max\") return 32_000;\n return -1;\n}\n\n// ---------------------------------------------------------------------------\n// AISDKEngine implementation\n// ---------------------------------------------------------------------------\n\n/** Config accepted by every `ai-sdk:*` engine. */\nexport interface AISDKEngineConfig {\n /** Override the provider's default model (also becomes the engine's defaultModel). */\n model?: string;\n /** API key — falls back to the provider-specific env var if omitted. */\n apiKey?: string;\n /** Override the provider base URL (useful for proxies or OpenAI-compatible gateways). */\n baseUrl?: string;\n /** OpenRouter: `X-OpenRouter-Title` header for dashboard attribution. */\n appName?: string;\n /** OpenRouter: `HTTP-Referer` header for dashboard attribution. */\n appUrl?: string;\n}\n\nclass AISDKEngine implements AgentEngine {\n readonly name: string;\n readonly label: string;\n readonly defaultModel: string;\n readonly supportedModels: readonly string[];\n readonly capabilities: EngineCapabilities;\n\n private readonly provider: AISDKProvider;\n private readonly apiKey?: string;\n private readonly baseUrl?: string;\n private readonly appName?: string;\n private readonly appUrl?: string;\n\n constructor(provider: AISDKProvider, config: AISDKEngineConfig) {\n this.provider = provider;\n this.name = `ai-sdk:${provider}`;\n this.label = `${capitalize(provider)} (AI SDK)`;\n this.defaultModel = config.model ?? PROVIDER_DEFAULT_MODELS[provider];\n this.supportedModels = PROVIDER_SUPPORTED_MODELS[provider];\n this.capabilities = PROVIDER_CAPABILITIES[provider];\n this.apiKey = config.apiKey ?? getProviderApiKey(provider);\n this.baseUrl = config.baseUrl;\n this.appName = config.appName;\n this.appUrl = config.appUrl;\n }\n\n async *stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n let aiModule: any;\n try {\n aiModule = await import(\"ai\");\n } catch {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: `The \"ai\" package is not installed. Run: pnpm add ai ${PROVIDER_PACKAGES[this.provider]}`,\n };\n return;\n }\n\n const { streamText, jsonSchema } = aiModule;\n\n let providerModel: any;\n try {\n providerModel = await this.createProviderModel(opts.model);\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n return;\n }\n\n const aiSdkTools =\n opts.tools.length > 0\n ? engineToolsToAISDK(opts.tools, jsonSchema)\n : undefined;\n const messages = engineMessagesToAISDK(opts.messages);\n\n // Build providerOptions for Anthropic-native features when using Anthropic provider\n const providerOpts: Record<string, unknown> = {};\n if (this.provider === \"anthropic\" && opts.providerOptions?.anthropic) {\n const anthropicOpts = opts.providerOptions.anthropic;\n if (anthropicOpts.thinking) {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n thinking: {\n type: \"enabled\",\n budgetTokens: anthropicOpts.thinking.budgetTokens,\n },\n };\n }\n if (anthropicOpts.cacheControl) {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n cacheControl: anthropicOpts.cacheControl,\n };\n }\n }\n const reasoningEffort = normalizeReasoningEffortForModel(\n opts.model,\n opts.reasoningEffort,\n );\n if (reasoningEffort) {\n if (this.provider === \"anthropic\") {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n thinking: (\n providerOpts.anthropic as { thinking?: unknown } | undefined\n )?.thinking ?? { type: \"adaptive\" },\n outputConfig: { effort: reasoningEffort },\n };\n } else if (this.provider === \"openai\") {\n providerOpts.openai = {\n ...((providerOpts.openai as object) ?? {}),\n reasoningEffort,\n };\n } else if (this.provider === \"openrouter\") {\n providerOpts.openrouter = {\n ...((providerOpts.openrouter as object) ?? {}),\n reasoning: { effort: reasoningEffort },\n };\n } else if (this.provider === \"google\") {\n providerOpts.google = {\n ...((providerOpts.google as object) ?? {}),\n thinkingConfig: {\n thinkingBudget: googleThinkingBudget(reasoningEffort),\n },\n };\n }\n }\n\n let assistantContent: EngineContentPart[] = [];\n\n try {\n const result = streamText({\n model: providerModel,\n system: opts.systemPrompt,\n messages,\n tools: aiSdkTools,\n maxOutputTokens: opts.maxOutputTokens ?? 32768,\n ...(opts.temperature !== undefined\n ? { temperature: opts.temperature }\n : {}),\n abortSignal: opts.abortSignal,\n onStepFinish: (step: any) => {\n assistantContent = aiSdkStepToAssistantContent(step);\n },\n ...(Object.keys(providerOpts).length > 0\n ? { providerOptions: providerOpts }\n : {}),\n });\n\n // Buffer the terminal stop so assistant-content can be emitted just\n // before it, regardless of where `finish` arrives in the stream.\n let bufferedStop: EngineEvent | undefined;\n\n for await (const part of result.fullStream) {\n for (const event of aiSdkPartToEngineEvents(part)) {\n if (event.type === \"stop\") {\n bufferedStop = event;\n } else {\n yield event;\n }\n }\n }\n\n yield { type: \"assistant-content\", parts: assistantContent };\n yield bufferedStop ?? { type: \"stop\", reason: \"end_turn\" };\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n throw err;\n }\n }\n\n private async createProviderModel(model: string): Promise<any> {\n const pkg = PROVIDER_PACKAGES[this.provider];\n let providerModule: any;\n try {\n providerModule = await importProviderPackage(this.provider);\n } catch {\n throw new Error(\n `Provider package \"${pkg}\" is not installed. Run: pnpm add ai ${pkg}`,\n );\n }\n\n const fnName = PROVIDER_FACTORIES[this.provider];\n const createFn = providerModule[fnName] ?? providerModule.default;\n if (typeof createFn !== \"function\") {\n throw new Error(`\"${pkg}\" does not export ${fnName} or default`);\n }\n\n const config: Record<string, unknown> = {};\n if (this.apiKey) config.apiKey = this.apiKey;\n if (this.baseUrl) config.baseURL = this.baseUrl;\n // Scoped to openrouter — other providers' factories may reject unknown keys.\n if (this.provider === \"openrouter\") {\n if (this.appName) config.appName = this.appName;\n if (this.appUrl) config.appUrl = this.appUrl;\n }\n\n const provider = createFn(config);\n // @ai-sdk/openai@3 defaults to the Responses API; force Chat Completions\n // so OpenAI-compatible gateways (OpenRouter, Groq, Together, …) work too.\n return this.provider === \"openai\" ? provider.chat(model) : provider(model);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory functions\n// ---------------------------------------------------------------------------\n\nexport function createAISDKEngine(\n provider: AISDKProvider,\n config: Record<string, unknown> = {},\n): AgentEngine {\n return new AISDKEngine(provider, config as AISDKEngineConfig);\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Static string-literal imports so bundlers (Nitro/Rollup/Vercel) can analyze\n// and include provider packages. A variable-based `import(pkg)` gets skipped.\nasync function importProviderPackage(provider: AISDKProvider): Promise<any> {\n switch (provider) {\n case \"anthropic\":\n return import(\"@ai-sdk/anthropic\");\n case \"openai\":\n return import(\"@ai-sdk/openai\");\n case \"openrouter\":\n return import(\"@openrouter/ai-sdk-provider\");\n case \"google\":\n return import(\"@ai-sdk/google\");\n case \"groq\":\n return import(\"@ai-sdk/groq\");\n case \"mistral\":\n return import(\"@ai-sdk/mistral\");\n case \"cohere\":\n return import(\"@ai-sdk/cohere\");\n case \"ollama\":\n return import(\"ai-sdk-ollama\");\n }\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction getProviderApiKey(provider: AISDKProvider): string | undefined {\n const envVars = PROVIDER_ENV_VARS[provider];\n for (const v of envVars) {\n const value = readDeployCredentialEnv(v);\n if (value) return value;\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Exports for registry registration\n// ---------------------------------------------------------------------------\n\nexport {\n PROVIDER_CAPABILITIES,\n PROVIDER_DEFAULT_MODELS,\n PROVIDER_SUPPORTED_MODELS,\n PROVIDER_ENV_VARS,\n PROVIDER_PACKAGES,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"ai-sdk-engine.js","sourceRoot":"","sources":["../../../src/agent/engine/ai-sdk-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AISDKEngine — wraps the Vercel AI SDK (ai package) for multi-provider support.\n *\n * Supports Anthropic, OpenAI, Google Gemini, Groq, and any provider with an\n * @ai-sdk/* package. Provider is selected via the `provider` config option.\n *\n * When provider is \"anthropic\", Anthropic-native features (thinking, cacheControl)\n * are forwarded through the AI SDK's providerOptions mechanism — no fidelity loss\n * compared to the native AnthropicEngine.\n *\n * The ai package is an OPTIONAL peer dependency. This engine uses dynamic import()\n * so the core package remains installable without the AI SDK.\n */\n\nimport type {\n AgentEngine,\n EngineCapabilities,\n EngineStreamOptions,\n EngineEvent,\n EngineContentPart,\n} from \"./types.js\";\nimport {\n engineToolsToAISDK,\n engineMessagesToAISDK,\n aiSdkPartToEngineEvents,\n aiSdkStepToAssistantContent,\n} from \"./translate-ai-sdk.js\";\nimport { AI_SDK_MODEL_CONFIG, type AISDKProvider } from \"../model-config.js\";\nimport { readDeployCredentialEnv } from \"../../server/credential-provider.js\";\nimport { normalizeReasoningEffortForModel } from \"../../shared/reasoning-effort.js\";\n\nexport type { AISDKProvider } from \"../model-config.js\";\n\n// ---------------------------------------------------------------------------\n// Provider definitions\n// ---------------------------------------------------------------------------\n\nconst PROVIDER_CAPABILITIES: Record<AISDKProvider, EngineCapabilities> = {\n anthropic: {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: false, // not exposed through AI SDK yet\n parallelToolCalls: true,\n },\n openai: {\n thinking: true,\n promptCaching: false,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n openrouter: {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n google: {\n thinking: true,\n promptCaching: false,\n vision: true,\n computerUse: false,\n parallelToolCalls: true,\n },\n groq: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n mistral: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n cohere: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: true,\n },\n ollama: {\n thinking: false,\n promptCaching: false,\n vision: false,\n computerUse: false,\n parallelToolCalls: false,\n },\n};\n\nconst providerModelEntries = Object.entries(AI_SDK_MODEL_CONFIG) as Array<\n [AISDKProvider, (typeof AI_SDK_MODEL_CONFIG)[AISDKProvider]]\n>;\n\nconst PROVIDER_DEFAULT_MODELS = Object.fromEntries(\n providerModelEntries.map(([provider, config]) => [\n provider,\n config.defaultModel,\n ]),\n) as Record<AISDKProvider, string>;\n\nconst PROVIDER_SUPPORTED_MODELS = Object.fromEntries(\n providerModelEntries.map(([provider, config]) => [\n provider,\n config.supportedModels,\n ]),\n) as unknown as Record<AISDKProvider, readonly string[]>;\n\nconst PROVIDER_ENV_VARS: Record<AISDKProvider, string[]> = {\n anthropic: [\"ANTHROPIC_API_KEY\"],\n openai: [\"OPENAI_API_KEY\"],\n openrouter: [\"OPENROUTER_API_KEY\"],\n google: [\"GOOGLE_GENERATIVE_AI_API_KEY\"],\n groq: [\"GROQ_API_KEY\"],\n mistral: [\"MISTRAL_API_KEY\"],\n cohere: [\"COHERE_API_KEY\"],\n ollama: [], // runs locally\n};\n\nconst PROVIDER_PACKAGES: Record<AISDKProvider, string> = {\n anthropic: \"@ai-sdk/anthropic\",\n openai: \"@ai-sdk/openai\",\n openrouter: \"@openrouter/ai-sdk-provider\",\n google: \"@ai-sdk/google\",\n groq: \"@ai-sdk/groq\",\n mistral: \"@ai-sdk/mistral\",\n cohere: \"@ai-sdk/cohere\",\n ollama: \"ai-sdk-ollama\",\n};\n\n/** Factory export name per provider (not all follow `create<Provider>`). */\nconst PROVIDER_FACTORIES: Record<AISDKProvider, string> = {\n anthropic: \"createAnthropic\",\n openai: \"createOpenAI\",\n openrouter: \"createOpenRouter\",\n google: \"createGoogleGenerativeAI\",\n groq: \"createGroq\",\n mistral: \"createMistral\",\n cohere: \"createCohere\",\n ollama: \"createOllama\",\n};\n\nfunction googleThinkingBudget(effort: string) {\n if (effort === \"low\") return 1024;\n if (effort === \"high\") return 8000;\n if (effort === \"xhigh\") return 16_000;\n if (effort === \"max\") return 32_000;\n return -1;\n}\n\n// ---------------------------------------------------------------------------\n// AISDKEngine implementation\n// ---------------------------------------------------------------------------\n\n/** Config accepted by every `ai-sdk:*` engine. */\nexport interface AISDKEngineConfig {\n /** Override the provider's default model (also becomes the engine's defaultModel). */\n model?: string;\n /** API key — falls back to the provider-specific env var if omitted. */\n apiKey?: string;\n /** Override the provider base URL (useful for proxies or OpenAI-compatible gateways). */\n baseUrl?: string;\n /** OpenRouter: `X-OpenRouter-Title` header for dashboard attribution. */\n appName?: string;\n /** OpenRouter: `HTTP-Referer` header for dashboard attribution. */\n appUrl?: string;\n}\n\nclass AISDKEngine implements AgentEngine {\n readonly name: string;\n readonly label: string;\n readonly defaultModel: string;\n readonly supportedModels: readonly string[];\n readonly capabilities: EngineCapabilities;\n\n private readonly provider: AISDKProvider;\n private readonly apiKey?: string;\n private readonly baseUrl?: string;\n private readonly appName?: string;\n private readonly appUrl?: string;\n\n constructor(provider: AISDKProvider, config: AISDKEngineConfig) {\n this.provider = provider;\n this.name = `ai-sdk:${provider}`;\n this.label = `${capitalize(provider)} (AI SDK)`;\n this.defaultModel = config.model ?? PROVIDER_DEFAULT_MODELS[provider];\n this.supportedModels = PROVIDER_SUPPORTED_MODELS[provider];\n this.capabilities = PROVIDER_CAPABILITIES[provider];\n this.apiKey = config.apiKey ?? getProviderApiKey(provider);\n this.baseUrl = config.baseUrl;\n this.appName = config.appName;\n this.appUrl = config.appUrl;\n }\n\n async *stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n let aiModule: any;\n try {\n aiModule = await import(\"ai\");\n } catch {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: `The \"ai\" package is not installed. Run: pnpm add ai ${PROVIDER_PACKAGES[this.provider]}`,\n };\n return;\n }\n\n const { streamText, jsonSchema } = aiModule;\n\n let providerModel: any;\n try {\n providerModel = await this.createProviderModel(opts.model);\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n return;\n }\n\n const aiSdkTools =\n opts.tools.length > 0\n ? engineToolsToAISDK(opts.tools, jsonSchema)\n : undefined;\n const messages = engineMessagesToAISDK(opts.messages);\n\n // Build providerOptions for Anthropic-native features when using Anthropic provider\n const providerOpts: Record<string, unknown> = {};\n if (this.provider === \"anthropic\" && opts.providerOptions?.anthropic) {\n const anthropicOpts = opts.providerOptions.anthropic;\n if (anthropicOpts.thinking) {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n thinking: {\n type: \"enabled\",\n budgetTokens: anthropicOpts.thinking.budgetTokens,\n },\n };\n }\n if (anthropicOpts.cacheControl) {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n cacheControl: anthropicOpts.cacheControl,\n };\n }\n }\n const reasoningEffort = normalizeReasoningEffortForModel(\n opts.model,\n opts.reasoningEffort,\n );\n if (reasoningEffort) {\n if (this.provider === \"anthropic\") {\n providerOpts.anthropic = {\n ...((providerOpts.anthropic as object) ?? {}),\n thinking: (\n providerOpts.anthropic as { thinking?: unknown } | undefined\n )?.thinking ?? { type: \"adaptive\" },\n outputConfig: { effort: reasoningEffort },\n };\n } else if (this.provider === \"openai\") {\n providerOpts.openai = {\n ...((providerOpts.openai as object) ?? {}),\n reasoningEffort,\n };\n } else if (this.provider === \"openrouter\") {\n providerOpts.openrouter = {\n ...((providerOpts.openrouter as object) ?? {}),\n reasoning: { effort: reasoningEffort },\n };\n } else if (this.provider === \"google\") {\n providerOpts.google = {\n ...((providerOpts.google as object) ?? {}),\n thinkingConfig: {\n thinkingBudget: googleThinkingBudget(reasoningEffort),\n },\n };\n }\n }\n\n let assistantContent: EngineContentPart[] = [];\n\n try {\n const result = streamText({\n model: providerModel,\n system: opts.systemPrompt,\n messages,\n tools: aiSdkTools,\n maxOutputTokens: opts.maxOutputTokens ?? 32768,\n ...(opts.temperature !== undefined\n ? { temperature: opts.temperature }\n : {}),\n abortSignal: opts.abortSignal,\n onStepFinish: (step: any) => {\n assistantContent = aiSdkStepToAssistantContent(step);\n },\n ...(Object.keys(providerOpts).length > 0\n ? { providerOptions: providerOpts }\n : {}),\n });\n\n // Buffer the terminal stop so assistant-content can be emitted just\n // before it, regardless of where `finish` arrives in the stream.\n let bufferedStop: EngineEvent | undefined;\n\n for await (const part of result.fullStream) {\n for (const event of aiSdkPartToEngineEvents(part)) {\n if (event.type === \"stop\") {\n bufferedStop = event;\n } else {\n yield event;\n }\n }\n }\n\n yield { type: \"assistant-content\", parts: assistantContent };\n yield bufferedStop ?? { type: \"stop\", reason: \"end_turn\" };\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n throw err;\n }\n }\n\n private async createProviderModel(model: string): Promise<any> {\n const pkg = PROVIDER_PACKAGES[this.provider];\n let providerModule: any;\n try {\n providerModule = await importProviderPackage(this.provider);\n } catch {\n throw new Error(\n `Provider package \"${pkg}\" is not installed. Run: pnpm add ai ${pkg}`,\n );\n }\n\n const fnName = PROVIDER_FACTORIES[this.provider];\n const createFn = providerModule[fnName] ?? providerModule.default;\n if (typeof createFn !== \"function\") {\n throw new Error(`\"${pkg}\" does not export ${fnName} or default`);\n }\n\n const config: Record<string, unknown> = {};\n if (this.apiKey) config.apiKey = this.apiKey;\n if (this.baseUrl) config.baseURL = this.baseUrl;\n // Scoped to openrouter — other providers' factories may reject unknown keys.\n if (this.provider === \"openrouter\") {\n if (this.appName) config.appName = this.appName;\n if (this.appUrl) config.appUrl = this.appUrl;\n }\n\n const provider = createFn(config);\n // @ai-sdk/openai@3 defaults to the Responses API; force Chat Completions\n // so OpenAI-compatible gateways (OpenRouter, Groq, Together, …) work too.\n return this.provider === \"openai\" ? provider.chat(model) : provider(model);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory functions\n// ---------------------------------------------------------------------------\n\nexport function createAISDKEngine(\n provider: AISDKProvider,\n config: Record<string, unknown> = {},\n): AgentEngine {\n return new AISDKEngine(provider, config as AISDKEngineConfig);\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Static string-literal imports so bundlers (Nitro/Rollup/Vercel) can analyze\n// and include provider packages. A variable-based `import(pkg)` gets skipped.\nasync function importProviderPackage(provider: AISDKProvider): Promise<any> {\n switch (provider) {\n case \"anthropic\":\n return import(\"@ai-sdk/anthropic\");\n case \"openai\":\n return import(\"@ai-sdk/openai\");\n case \"openrouter\":\n return import(\"@openrouter/ai-sdk-provider\");\n case \"google\":\n return import(\"@ai-sdk/google\");\n case \"groq\":\n return import(\"@ai-sdk/groq\");\n case \"mistral\":\n return import(\"@ai-sdk/mistral\");\n case \"cohere\":\n return import(\"@ai-sdk/cohere\");\n case \"ollama\":\n return import(\"ai-sdk-ollama\");\n }\n}\n\nfunction capitalize(s: string): string {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nfunction getProviderApiKey(provider: AISDKProvider): string | undefined {\n const envVars = PROVIDER_ENV_VARS[provider];\n for (const v of envVars) {\n const value = readDeployCredentialEnv(v);\n if (value) return value;\n }\n return undefined;\n}\n\n// ---------------------------------------------------------------------------\n// Exports for registry registration\n// ---------------------------------------------------------------------------\n\nexport {\n PROVIDER_CAPABILITIES,\n PROVIDER_DEFAULT_MODELS,\n PROVIDER_SUPPORTED_MODELS,\n PROVIDER_ENV_VARS,\n PROVIDER_PACKAGES,\n};\n"]}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import type { AgentEngine, EngineCapabilities } from "./types.js";
|
|
11
11
|
export declare const ANTHROPIC_CAPABILITIES: EngineCapabilities;
|
|
12
12
|
export declare const ANTHROPIC_SUPPORTED_MODELS: readonly ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5-20251001"];
|
|
13
|
-
export declare const ANTHROPIC_DEFAULT_MODEL
|
|
13
|
+
export declare const ANTHROPIC_DEFAULT_MODEL: "claude-sonnet-4-6";
|
|
14
14
|
/**
|
|
15
15
|
* Create an AnthropicEngine instance.
|
|
16
16
|
* Falls back to the deployment Anthropic key if no key is provided.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/anthropic-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAGnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"anthropic-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/anthropic-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAepB,eAAO,MAAM,sBAAsB,EAAE,kBAMpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gFACC,CAAC;AACzC,eAAO,MAAM,uBAAuB,qBAAsC,CAAC;AA4I3E;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,WAAW,CAwBb"}
|
|
@@ -11,6 +11,7 @@ import { engineToolsToAnthropic, engineMessagesToAnthropic, anthropicContentToEn
|
|
|
11
11
|
import { readDeployCredentialEnv } from "../../server/credential-provider.js";
|
|
12
12
|
import { normalizeReasoningEffortForModel } from "../../shared/reasoning-effort.js";
|
|
13
13
|
import { LLM_MISSING_CREDENTIALS_ERROR_CODE, LLM_MISSING_CREDENTIALS_MESSAGE, } from "./credential-errors.js";
|
|
14
|
+
import { ANTHROPIC_MODEL_CONFIG } from "../model-config.js";
|
|
14
15
|
export const ANTHROPIC_CAPABILITIES = {
|
|
15
16
|
thinking: true,
|
|
16
17
|
promptCaching: true,
|
|
@@ -18,17 +19,8 @@ export const ANTHROPIC_CAPABILITIES = {
|
|
|
18
19
|
computerUse: true,
|
|
19
20
|
parallelToolCalls: true,
|
|
20
21
|
};
|
|
21
|
-
export const ANTHROPIC_SUPPORTED_MODELS =
|
|
22
|
-
|
|
23
|
-
"claude-sonnet-4-6",
|
|
24
|
-
"claude-haiku-4-5-20251001",
|
|
25
|
-
];
|
|
26
|
-
// Single source of truth for the framework default lives in
|
|
27
|
-
// agent/default-model.ts. Engines, integrations, and the agent-chat plugin
|
|
28
|
-
// all read from the same constant, so bumping the default model is a
|
|
29
|
-
// one-line change.
|
|
30
|
-
import { DEFAULT_MODEL } from "../default-model.js";
|
|
31
|
-
export const ANTHROPIC_DEFAULT_MODEL = DEFAULT_MODEL;
|
|
22
|
+
export const ANTHROPIC_SUPPORTED_MODELS = ANTHROPIC_MODEL_CONFIG.supportedModels;
|
|
23
|
+
export const ANTHROPIC_DEFAULT_MODEL = ANTHROPIC_MODEL_CONFIG.defaultModel;
|
|
32
24
|
class AnthropicEngine {
|
|
33
25
|
name = "anthropic";
|
|
34
26
|
label = "Claude (Anthropic SDK)";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-engine.js","sourceRoot":"","sources":["../../../src/agent/engine/anthropic-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AnthropicEngine — wraps @anthropic-ai/sdk for use as an AgentEngine.\n *\n * This is the default, best-in-class engine. It supports all Anthropic-native\n * features: extended thinking, prompt caching, vision, computer use, and\n * parallel tool calls.\n *\n * All providerOptions.anthropic fields are forwarded directly to the SDK.\n */\n\nimport type {\n AgentEngine,\n EngineCapabilities,\n EngineStreamOptions,\n EngineEvent,\n} from \"./types.js\";\nimport {\n engineToolsToAnthropic,\n engineMessagesToAnthropic,\n anthropicContentToEngine,\n anthropicChunkToEngineEvents,\n} from \"./translate-anthropic.js\";\nimport { readDeployCredentialEnv } from \"../../server/credential-provider.js\";\nimport { normalizeReasoningEffortForModel } from \"../../shared/reasoning-effort.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n} from \"./credential-errors.js\";\n\nexport const ANTHROPIC_CAPABILITIES: EngineCapabilities = {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: true,\n parallelToolCalls: true,\n};\n\nexport const ANTHROPIC_SUPPORTED_MODELS = [\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5-20251001\",\n] as const;\n\n// Single source of truth for the framework default lives in\n// agent/default-model.ts. Engines, integrations, and the agent-chat plugin\n// all read from the same constant, so bumping the default model is a\n// one-line change.\nimport { DEFAULT_MODEL } from \"../default-model.js\";\nexport const ANTHROPIC_DEFAULT_MODEL = DEFAULT_MODEL;\n\nclass AnthropicEngine implements AgentEngine {\n readonly name = \"anthropic\";\n readonly label = \"Claude (Anthropic SDK)\";\n readonly defaultModel = ANTHROPIC_DEFAULT_MODEL;\n readonly supportedModels = ANTHROPIC_SUPPORTED_MODELS;\n readonly capabilities = ANTHROPIC_CAPABILITIES;\n\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n async *stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n const Anthropic = (await import(\"@anthropic-ai/sdk\")).default;\n const client = new Anthropic({ apiKey: this.apiKey });\n\n const tools = engineToolsToAnthropic(opts.tools);\n const messages = engineMessagesToAnthropic(opts.messages);\n const anthropicOpts = opts.providerOptions?.anthropic;\n\n // Build extra body params for Anthropic-native features\n const extra: Record<string, unknown> = {};\n if (anthropicOpts?.thinking) {\n extra.thinking = {\n type: anthropicOpts.thinking.type,\n budget_tokens: anthropicOpts.thinking.budgetTokens,\n };\n }\n if (anthropicOpts?.topK !== undefined) {\n extra.top_k = anthropicOpts.topK;\n }\n const reasoningEffort = normalizeReasoningEffortForModel(\n opts.model,\n opts.reasoningEffort,\n );\n if (reasoningEffort) {\n if (!extra.thinking) {\n extra.thinking = { type: \"adaptive\" };\n }\n extra.output_config = { effort: reasoningEffort };\n }\n\n // Apply prompt caching to the system prompt and tools by default.\n // Cache is pure upside: identical prefixes on subsequent turns get ~90%\n // off input cost and much faster time-to-first-token. If the prefix\n // changes turn-to-turn, it's a no-op. Templates can opt out by setting\n // providerOptions.anthropic.cacheControl = false.\n const cacheEnabled = anthropicOpts?.cacheControl !== false;\n const systemBlocks: any[] = [{ type: \"text\", text: opts.systemPrompt }];\n if (cacheEnabled) {\n systemBlocks[0].cache_control = { type: \"ephemeral\" };\n }\n\n // Apply cache_control to the last tool definition when caching is enabled.\n // Anthropic caches the prefix up to and including the last cached block.\n let cachedTools = tools;\n if (cacheEnabled && tools.length > 0) {\n cachedTools = [...tools];\n const last = { ...cachedTools[cachedTools.length - 1] } as any;\n last.cache_control = { type: \"ephemeral\" };\n cachedTools[cachedTools.length - 1] = last;\n }\n\n const requestParams: any = {\n model: opts.model,\n max_tokens: opts.maxOutputTokens ?? 32768,\n system: systemBlocks,\n tools: cachedTools.length > 0 ? cachedTools : undefined,\n messages,\n ...(opts.temperature !== undefined\n ? { temperature: opts.temperature }\n : {}),\n ...extra,\n };\n\n // Remove undefined tools to avoid Anthropic API validation errors\n if (!requestParams.tools) delete requestParams.tools;\n\n const apiStream = client.messages.stream(requestParams, {\n signal: opts.abortSignal,\n });\n\n let thinkingText = \"\";\n let thinkingSignature = \"\";\n\n try {\n for await (const chunk of apiStream) {\n const events = anthropicChunkToEngineEvents(chunk);\n for (const event of events) {\n if (event.type === \"thinking-delta\") {\n thinkingText += event.text;\n if (event.signature) thinkingSignature = event.signature;\n }\n yield event;\n }\n }\n\n const finalMessage = await apiStream.finalMessage();\n const assistantContent = anthropicContentToEngine(finalMessage.content);\n\n // Emit usage\n if (finalMessage.usage) {\n yield {\n type: \"usage\",\n inputTokens: finalMessage.usage.input_tokens ?? 0,\n outputTokens: finalMessage.usage.output_tokens ?? 0,\n cacheReadTokens:\n (finalMessage.usage as any).cache_read_input_tokens ?? 0,\n cacheWriteTokens:\n (finalMessage.usage as any).cache_creation_input_tokens ?? 0,\n };\n }\n\n yield { type: \"assistant-content\", parts: assistantContent };\n\n // Emit stop reason\n const stopReason = finalMessage.stop_reason ?? \"end_turn\";\n yield {\n type: \"stop\",\n reason:\n stopReason === \"tool_use\"\n ? \"tool_use\"\n : stopReason === \"max_tokens\"\n ? \"max_tokens\"\n : \"end_turn\",\n };\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n throw err;\n }\n }\n}\n\n/**\n * Create an AnthropicEngine instance.\n * Falls back to the deployment Anthropic key if no key is provided.\n */\nexport function createAnthropicEngine(\n config: Record<string, unknown> = {},\n): AgentEngine {\n const apiKey =\n (config.apiKey as string | undefined) ??\n readDeployCredentialEnv(\"ANTHROPIC_API_KEY\") ??\n \"\";\n if (!apiKey) {\n // Return a \"missing key\" engine that immediately errors\n return {\n name: \"anthropic\",\n label: \"Claude (Anthropic SDK)\",\n defaultModel: ANTHROPIC_DEFAULT_MODEL,\n supportedModels: ANTHROPIC_SUPPORTED_MODELS,\n capabilities: ANTHROPIC_CAPABILITIES,\n async *stream() {\n yield {\n type: \"stop\" as const,\n reason: \"error\" as const,\n error: LLM_MISSING_CREDENTIALS_MESSAGE,\n errorCode: LLM_MISSING_CREDENTIALS_ERROR_CODE,\n };\n },\n };\n }\n return new AnthropicEngine(apiKey);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"anthropic-engine.js","sourceRoot":"","sources":["../../../src/agent/engine/anthropic-engine.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AnthropicEngine — wraps @anthropic-ai/sdk for use as an AgentEngine.\n *\n * This is the default, best-in-class engine. It supports all Anthropic-native\n * features: extended thinking, prompt caching, vision, computer use, and\n * parallel tool calls.\n *\n * All providerOptions.anthropic fields are forwarded directly to the SDK.\n */\n\nimport type {\n AgentEngine,\n EngineCapabilities,\n EngineStreamOptions,\n EngineEvent,\n} from \"./types.js\";\nimport {\n engineToolsToAnthropic,\n engineMessagesToAnthropic,\n anthropicContentToEngine,\n anthropicChunkToEngineEvents,\n} from \"./translate-anthropic.js\";\nimport { readDeployCredentialEnv } from \"../../server/credential-provider.js\";\nimport { normalizeReasoningEffortForModel } from \"../../shared/reasoning-effort.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n} from \"./credential-errors.js\";\nimport { ANTHROPIC_MODEL_CONFIG } from \"../model-config.js\";\n\nexport const ANTHROPIC_CAPABILITIES: EngineCapabilities = {\n thinking: true,\n promptCaching: true,\n vision: true,\n computerUse: true,\n parallelToolCalls: true,\n};\n\nexport const ANTHROPIC_SUPPORTED_MODELS =\n ANTHROPIC_MODEL_CONFIG.supportedModels;\nexport const ANTHROPIC_DEFAULT_MODEL = ANTHROPIC_MODEL_CONFIG.defaultModel;\n\nclass AnthropicEngine implements AgentEngine {\n readonly name = \"anthropic\";\n readonly label = \"Claude (Anthropic SDK)\";\n readonly defaultModel = ANTHROPIC_DEFAULT_MODEL;\n readonly supportedModels = ANTHROPIC_SUPPORTED_MODELS;\n readonly capabilities = ANTHROPIC_CAPABILITIES;\n\n private readonly apiKey: string;\n\n constructor(apiKey: string) {\n this.apiKey = apiKey;\n }\n\n async *stream(opts: EngineStreamOptions): AsyncIterable<EngineEvent> {\n const Anthropic = (await import(\"@anthropic-ai/sdk\")).default;\n const client = new Anthropic({ apiKey: this.apiKey });\n\n const tools = engineToolsToAnthropic(opts.tools);\n const messages = engineMessagesToAnthropic(opts.messages);\n const anthropicOpts = opts.providerOptions?.anthropic;\n\n // Build extra body params for Anthropic-native features\n const extra: Record<string, unknown> = {};\n if (anthropicOpts?.thinking) {\n extra.thinking = {\n type: anthropicOpts.thinking.type,\n budget_tokens: anthropicOpts.thinking.budgetTokens,\n };\n }\n if (anthropicOpts?.topK !== undefined) {\n extra.top_k = anthropicOpts.topK;\n }\n const reasoningEffort = normalizeReasoningEffortForModel(\n opts.model,\n opts.reasoningEffort,\n );\n if (reasoningEffort) {\n if (!extra.thinking) {\n extra.thinking = { type: \"adaptive\" };\n }\n extra.output_config = { effort: reasoningEffort };\n }\n\n // Apply prompt caching to the system prompt and tools by default.\n // Cache is pure upside: identical prefixes on subsequent turns get ~90%\n // off input cost and much faster time-to-first-token. If the prefix\n // changes turn-to-turn, it's a no-op. Templates can opt out by setting\n // providerOptions.anthropic.cacheControl = false.\n const cacheEnabled = anthropicOpts?.cacheControl !== false;\n const systemBlocks: any[] = [{ type: \"text\", text: opts.systemPrompt }];\n if (cacheEnabled) {\n systemBlocks[0].cache_control = { type: \"ephemeral\" };\n }\n\n // Apply cache_control to the last tool definition when caching is enabled.\n // Anthropic caches the prefix up to and including the last cached block.\n let cachedTools = tools;\n if (cacheEnabled && tools.length > 0) {\n cachedTools = [...tools];\n const last = { ...cachedTools[cachedTools.length - 1] } as any;\n last.cache_control = { type: \"ephemeral\" };\n cachedTools[cachedTools.length - 1] = last;\n }\n\n const requestParams: any = {\n model: opts.model,\n max_tokens: opts.maxOutputTokens ?? 32768,\n system: systemBlocks,\n tools: cachedTools.length > 0 ? cachedTools : undefined,\n messages,\n ...(opts.temperature !== undefined\n ? { temperature: opts.temperature }\n : {}),\n ...extra,\n };\n\n // Remove undefined tools to avoid Anthropic API validation errors\n if (!requestParams.tools) delete requestParams.tools;\n\n const apiStream = client.messages.stream(requestParams, {\n signal: opts.abortSignal,\n });\n\n let thinkingText = \"\";\n let thinkingSignature = \"\";\n\n try {\n for await (const chunk of apiStream) {\n const events = anthropicChunkToEngineEvents(chunk);\n for (const event of events) {\n if (event.type === \"thinking-delta\") {\n thinkingText += event.text;\n if (event.signature) thinkingSignature = event.signature;\n }\n yield event;\n }\n }\n\n const finalMessage = await apiStream.finalMessage();\n const assistantContent = anthropicContentToEngine(finalMessage.content);\n\n // Emit usage\n if (finalMessage.usage) {\n yield {\n type: \"usage\",\n inputTokens: finalMessage.usage.input_tokens ?? 0,\n outputTokens: finalMessage.usage.output_tokens ?? 0,\n cacheReadTokens:\n (finalMessage.usage as any).cache_read_input_tokens ?? 0,\n cacheWriteTokens:\n (finalMessage.usage as any).cache_creation_input_tokens ?? 0,\n };\n }\n\n yield { type: \"assistant-content\", parts: assistantContent };\n\n // Emit stop reason\n const stopReason = finalMessage.stop_reason ?? \"end_turn\";\n yield {\n type: \"stop\",\n reason:\n stopReason === \"tool_use\"\n ? \"tool_use\"\n : stopReason === \"max_tokens\"\n ? \"max_tokens\"\n : \"end_turn\",\n };\n } catch (err: any) {\n yield {\n type: \"stop\",\n reason: \"error\",\n error: err?.message ?? String(err),\n };\n throw err;\n }\n }\n}\n\n/**\n * Create an AnthropicEngine instance.\n * Falls back to the deployment Anthropic key if no key is provided.\n */\nexport function createAnthropicEngine(\n config: Record<string, unknown> = {},\n): AgentEngine {\n const apiKey =\n (config.apiKey as string | undefined) ??\n readDeployCredentialEnv(\"ANTHROPIC_API_KEY\") ??\n \"\";\n if (!apiKey) {\n // Return a \"missing key\" engine that immediately errors\n return {\n name: \"anthropic\",\n label: \"Claude (Anthropic SDK)\",\n defaultModel: ANTHROPIC_DEFAULT_MODEL,\n supportedModels: ANTHROPIC_SUPPORTED_MODELS,\n capabilities: ANTHROPIC_CAPABILITIES,\n async *stream() {\n yield {\n type: \"stop\" as const,\n reason: \"error\" as const,\n error: LLM_MISSING_CREDENTIALS_MESSAGE,\n errorCode: LLM_MISSING_CREDENTIALS_ERROR_CODE,\n };\n },\n };\n }\n return new AnthropicEngine(apiKey);\n}\n"]}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { AgentEngine, EngineCapabilities } from "./types.js";
|
|
16
16
|
export declare const BUILDER_CAPABILITIES: EngineCapabilities;
|
|
17
|
-
export declare const BUILDER_SUPPORTED_MODELS: readonly ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5", "gpt-5-4", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gemini-3-1-pro", "gemini-3-0-flash", "gemini-3-1-flash-lite", "grok-code-fast", "qwen3-coder", "kimi-k2-5", "deepseek-v3-1", "z-ai-glm-4-5", "z-ai-glm-5-1"];
|
|
18
|
-
export declare const BUILDER_DEFAULT_MODEL
|
|
17
|
+
export declare const BUILDER_SUPPORTED_MODELS: readonly ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5", string, "gpt-5-4", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gemini-3-1-pro", "gemini-3-0-flash", "gemini-3-1-flash-lite", "grok-code-fast", "qwen3-coder", "kimi-k2-5", "deepseek-v3-1", "z-ai-glm-4-5", "z-ai-glm-5-1"];
|
|
18
|
+
export declare const BUILDER_DEFAULT_MODEL: string;
|
|
19
19
|
export declare function createBuilderEngine(_config?: Record<string, unknown>): AgentEngine;
|
|
20
20
|
//# sourceMappingURL=builder-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/builder-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"builder-engine.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/builder-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAoBpB,eAAO,MAAM,oBAAoB,EAAE,kBAUlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,8RAAuC,CAAC;AAK7E,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAghBvE,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,WAAW,CAEb"}
|
|
@@ -16,6 +16,7 @@ import { engineMessagesToAnthropic, engineToolsToAnthropic, } from "./translate-
|
|
|
16
16
|
import { resolveBuilderAuthHeader, resolveBuilderCredential, getBuilderGatewayBaseUrl, } from "../../server/credential-provider.js";
|
|
17
17
|
import { normalizeReasoningEffortForModel, } from "../../shared/reasoning-effort.js";
|
|
18
18
|
import { LLM_MISSING_CREDENTIALS_ERROR_CODE, LLM_MISSING_CREDENTIALS_MESSAGE, } from "./credential-errors.js";
|
|
19
|
+
import { BUILDER_MODEL_CONFIG } from "../model-config.js";
|
|
19
20
|
export const BUILDER_CAPABILITIES = {
|
|
20
21
|
thinking: true,
|
|
21
22
|
// TODO: flip to true once we forward `cache_control` blocks through to
|
|
@@ -27,29 +28,10 @@ export const BUILDER_CAPABILITIES = {
|
|
|
27
28
|
computerUse: false,
|
|
28
29
|
parallelToolCalls: true,
|
|
29
30
|
};
|
|
30
|
-
export const BUILDER_SUPPORTED_MODELS =
|
|
31
|
-
"claude-opus-4-7",
|
|
32
|
-
"claude-sonnet-4-6",
|
|
33
|
-
"claude-haiku-4-5",
|
|
34
|
-
"gpt-5-4",
|
|
35
|
-
"gpt-5-4-mini",
|
|
36
|
-
"gpt-5-1-codex-mini",
|
|
37
|
-
"gemini-3-1-pro",
|
|
38
|
-
"gemini-3-0-flash",
|
|
39
|
-
"gemini-3-1-flash-lite",
|
|
40
|
-
"grok-code-fast",
|
|
41
|
-
"qwen3-coder",
|
|
42
|
-
"kimi-k2-5",
|
|
43
|
-
"deepseek-v3-1",
|
|
44
|
-
"z-ai-glm-4-5",
|
|
45
|
-
"z-ai-glm-5-1",
|
|
46
|
-
];
|
|
31
|
+
export const BUILDER_SUPPORTED_MODELS = BUILDER_MODEL_CONFIG.supportedModels;
|
|
47
32
|
const DEFAULT_BUILDER_GATEWAY_TIMEOUT_MS = 45_000;
|
|
48
33
|
const MAX_BUILDER_GATEWAY_TIMEOUT_MS = 55_000;
|
|
49
|
-
|
|
50
|
-
// new model release is a one-line bump.
|
|
51
|
-
import { DEFAULT_MODEL } from "../default-model.js";
|
|
52
|
-
export const BUILDER_DEFAULT_MODEL = DEFAULT_MODEL;
|
|
34
|
+
export const BUILDER_DEFAULT_MODEL = BUILDER_MODEL_CONFIG.defaultModel;
|
|
53
35
|
/**
|
|
54
36
|
* Bucket an Anthropic `thinking.budgetTokens` value into the gateway's
|
|
55
37
|
* legacy three-level `reasoning_effort` enum.
|