diff --git a/examples/example-bedrock.ts b/examples/example-bedrock.ts new file mode 100644 index 000000000..0e53411a5 --- /dev/null +++ b/examples/example-bedrock.ts @@ -0,0 +1,101 @@ +import { Stagehand } from "@browserbasehq/stagehand"; +import { z } from "zod/v3"; + +/** + * AWS Bedrock Integration Example for Stagehand + * + * This example demonstrates how to use Stagehand with AWS Bedrock models. + * Anthropic models work best for advanced features like structured extraction + * and observation, while OpenAI models work well for navigation and basic operations. + * + * SETUP: + * + * 1. Enable model access in AWS Bedrock Console: + * - Visit: https://console.aws.amazon.com/bedrock/ + * - Go to "Model access" → "Enable model access" + * - Enable desired models (e.g., Anthropic Claude, OpenAI models) + * - Wait for approval + * + * 2. Authentication (choose one): + * + * Option A - Bearer Token: + * ``` + * AWS_BEARER_TOKEN_BEDROCK=bedrock-api-key-[your-base64-token] + * ``` + * + * Option B - Standard AWS Credentials: + * ``` + * AWS_ACCESS_KEY_ID=your-access-key + * AWS_SECRET_ACCESS_KEY=your-secret-key + * ``` + * + * 3. Set region and model: + * ``` + * AWS_REGION=us-east-1 + * ``` + * + * RECOMMENDED MODELS: + * - anthropic.claude-3-5-sonnet-20240620-v1:0 (best for extraction/observation) + * - anthropic.claude-3-haiku-20240307-v1:0 (faster, good for basic tasks) + * - openai.gpt-oss-120b-1:0 (good for navigation and simple operations) + */ + +async function runBedrockExample() { + // Initialize Stagehand with AWS Bedrock + const stagehand = new Stagehand({ + env: "BROWSERBASE", + modelName: "bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0", + modelClientOptions: { + region: "us-west-2", // Will use environment variables if not specified + }, + }); + + try { + await stagehand.init(); + const page = stagehand.page; + + console.log("🚀 Stagehand initialized with AWS Bedrock"); + + // Navigate to a website + await page.goto("https://example.com"); + console.log("📄 Navigated to example.com"); + + // Perform actions on the page + await page.act("click the link"); + console.log("🎯 Clicked the 'More information...' link"); + + // Extract structured data + const pageInfo = await page.extract({ + instruction: "Extract the page title and text", + schema: z.object({ + title: z.string(), + text: z.string(), + }), + }); + + console.log("📊 Extracted data:", pageInfo); + + // Observe elements on the page + const elements = await page.observe(); + console.log(`👀 Found ${elements.length} interactive elements`); + + console.log("✅ AWS Bedrock example completed successfully!"); + } catch (error) { + console.error("❌ Error:", error); + + // Common troubleshooting hints + if (error.message?.includes("access")) { + console.error("💡 Check model access in AWS Bedrock Console"); + } else if ( + error.message?.includes("credentials") || + error.message?.includes("authentication") + ) { + console.error("💡 Verify your AWS credentials are set correctly"); + } + } finally { + await stagehand.close(); + } +} + +// Run the example +runBedrockExample(); diff --git a/lib/StagehandPage.ts b/lib/StagehandPage.ts index b67921e26..dccfd7241 100644 --- a/lib/StagehandPage.ts +++ b/lib/StagehandPage.ts @@ -747,6 +747,7 @@ ${scriptContent} \ const result = await this.api.act({ ...observeResult, frameId: this.rootFrameId, + modelClientOptions: this.stagehand["modelClientOptions"], }); this.stagehand.addToHistory("act", observeResult, result); return result; @@ -783,6 +784,7 @@ ${scriptContent} \ frameId: this.rootFrameId, modelClientOptions: modelClientOptions || this.stagehand["modelClientOptions"], + modelName: modelName || this.stagehand["modelName"], }; const result = await this.api.act(opts); this.stagehand.addToHistory("act", actionOrOptions, result); @@ -844,7 +846,10 @@ ${scriptContent} \ if (!instructionOrOptions) { let result: ExtractResult; if (this.api) { - result = await this.api.extract({ frameId: this.rootFrameId }); + result = await this.api.extract({ + frameId: this.rootFrameId, + modelClientOptions: this.stagehand["modelClientOptions"], + }); } else { result = await this.extractHandler.extract(); } @@ -882,6 +887,7 @@ ${scriptContent} \ frameId: this.rootFrameId, modelClientOptions: modelClientOptions || this.stagehand["modelClientOptions"], + modelName: modelName || this.stagehand["modelName"], }; const result = await this.api.extract(opts); this.stagehand.addToHistory("extract", instructionOrOptions, result); @@ -991,6 +997,7 @@ ${scriptContent} \ frameId: this.rootFrameId, modelClientOptions: modelClientOptions || this.stagehand["modelClientOptions"], + modelName: modelName || this.stagehand["modelName"], }; const result = await this.api.observe(opts); this.stagehand.addToHistory("observe", instructionOrOptions, result); diff --git a/lib/api.ts b/lib/api.ts index 5da712913..f4551272c 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -48,7 +48,6 @@ export class StagehandAPI { async init({ modelName, - modelApiKey, domSettleTimeoutMs, verbose, debugDom, @@ -59,11 +58,6 @@ export class StagehandAPI { browserbaseSessionCreateParams, browserbaseSessionID, }: StartSessionParams): Promise { - if (!modelApiKey) { - throw new StagehandAPIError("modelApiKey is required"); - } - this.modelApiKey = modelApiKey; - const region = browserbaseSessionCreateParams?.region; if (region && region !== "us-west-2") { return { sessionId: browserbaseSessionID ?? null, available: false }; @@ -191,6 +185,12 @@ export class StagehandAPI { const queryString = urlParams.toString(); const url = `/sessions/${this.sessionId}/${method}${queryString ? `?${queryString}` : ""}`; + this.logger({ + category: "execute", + message: `Executing ${method} with args: ${JSON.stringify(args)}`, + level: 2, + }); + const response = await this.request(url, { method: "POST", body: JSON.stringify(args), diff --git a/lib/handlers/stagehandAgentHandler.ts b/lib/handlers/stagehandAgentHandler.ts index 1dc49c68f..98b5ffbee 100644 --- a/lib/handlers/stagehandAgentHandler.ts +++ b/lib/handlers/stagehandAgentHandler.ts @@ -1,17 +1,15 @@ import { + ActToolResult, AgentAction, AgentExecuteOptions, AgentResult, - ActToolResult, } from "@/types/agent"; import { LogLine } from "@/types/log"; -import { LLMClient } from "../llm/LLMClient"; -import { CoreMessage, wrapLanguageModel } from "ai"; -import { LanguageModel } from "ai"; -import { processMessages } from "../agent/utils/messageProcessing"; +import { CoreMessage, LanguageModel, ToolSet, wrapLanguageModel } from "ai"; import { createAgentTools } from "../agent/tools"; -import { ToolSet } from "ai"; +import { processMessages } from "../agent/utils/messageProcessing"; import { Stagehand } from "../index"; +import { LLMClient } from "../llm/LLMClient"; export class StagehandAgentHandler { private stagehand: Stagehand; @@ -280,7 +278,7 @@ STRATEGY: - Keep actions atomic and verify outcomes before proceeding. For each action, provide clear reasoning about why you're taking that step. -Today's date is ${new Date().toLocaleDateString()}. You're currently on the website: ${this.stagehand.page.url}.`; +Today's date is ${new Date().toLocaleDateString()}. You're currently on the website: ${this.stagehand.page.url()}.`; } private createTools() { diff --git a/lib/index.ts b/lib/index.ts index 10eecee98..725d537ec 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -45,7 +45,11 @@ import { StagehandAgentHandler } from "./handlers/stagehandAgentHandler"; import { StagehandLogger } from "./logger"; import { connectToMCPServer } from "./mcp/connection"; import { resolveTools } from "./mcp/utils"; -import { isRunningInBun, loadApiKeyFromEnv } from "./utils"; +import { + isRunningInBun, + loadApiKeyFromEnv, + loadBedrockClientOptions, +} from "./utils"; dotenv.config({ path: ".env" }); @@ -588,28 +592,41 @@ export class Stagehand { if (!modelClientOptions?.apiKey) { // If no API key is provided, try to load it from the environment if (LLMProvider.getModelProvider(this.modelName) === "aisdk") { - modelApiKey = loadApiKeyFromEnv( - this.modelName.split("/")[0], - this.logger, - ); + const provider = this.modelName.split("/")[0]; + + // Special handling for Amazon Bedrock's complex authentication + if (provider === "bedrock") { + const bedrockOptions = loadBedrockClientOptions( + this.logger, + modelClientOptions, + ); + this.modelClientOptions = { + ...modelClientOptions, + ...bedrockOptions, + }; + } else { + // Standard single API key handling for other AISDK providers + modelApiKey = loadApiKeyFromEnv(provider, this.logger); + this.modelClientOptions = { + ...modelClientOptions, + apiKey: modelApiKey, + }; + } } else { // Temporary add for legacy providers modelApiKey = LLMProvider.getModelProvider(this.modelName) === "openai" - ? process.env.OPENAI_API_KEY || - this.llmClient?.clientOptions?.apiKey + ? process.env.OPENAI_API_KEY : LLMProvider.getModelProvider(this.modelName) === "anthropic" - ? process.env.ANTHROPIC_API_KEY || - this.llmClient?.clientOptions?.apiKey + ? process.env.ANTHROPIC_API_KEY : LLMProvider.getModelProvider(this.modelName) === "google" - ? process.env.GOOGLE_API_KEY || - this.llmClient?.clientOptions?.apiKey + ? process.env.GOOGLE_API_KEY : undefined; + this.modelClientOptions = { + ...modelClientOptions, + apiKey: modelApiKey, + }; } - this.modelClientOptions = { - ...modelClientOptions, - apiKey: modelApiKey, - }; } else { this.modelClientOptions = modelClientOptions; } @@ -757,7 +774,7 @@ export class Stagehand { logger: this.logger, }); - const modelApiKey = this.modelClientOptions?.apiKey; + const modelApiKey = this.modelClientOptions?.apiKey as string; const { sessionId, available } = await this.apiClient.init({ modelName: this.modelName, modelApiKey: modelApiKey, @@ -914,11 +931,13 @@ export class Stagehand { ) => Promise; setScreenshotCollector?: (collector: unknown) => void; } { - this.log({ - category: "agent", - message: "Creating agent instance", - level: 1, - }); + if (!this.usingAPI) { + this.log({ + category: "agent", + message: "Creating agent instance", + level: 1, + }); + } let agentHandler: StagehandAgentHandler | CuaAgentHandler | undefined; if (options?.integrations && !this.experimental) { throw new StagehandError( @@ -989,7 +1008,10 @@ export class Stagehand { } if (!options.options) { - options.options = {}; + options.options = this.modelClientOptions as Record< + string, + unknown + >; } if (options.provider) { if (options.provider === "anthropic") { diff --git a/lib/llm/AnthropicClient.ts b/lib/llm/AnthropicClient.ts index 27d8f4c7c..0b1f5c3b8 100644 --- a/lib/llm/AnthropicClient.ts +++ b/lib/llm/AnthropicClient.ts @@ -1,3 +1,4 @@ +import { CreateChatCompletionResponseError } from "@/types/stagehandErrors"; import Anthropic, { ClientOptions } from "@anthropic-ai/sdk"; import { ImageBlockParam, @@ -14,14 +15,13 @@ import { LLMClient, LLMResponse, } from "./LLMClient"; -import { CreateChatCompletionResponseError } from "@/types/stagehandErrors"; export class AnthropicClient extends LLMClient { public type = "anthropic" as const; private client: Anthropic; private cache: LLMCache | undefined; private enableCaching: boolean; - public clientOptions: ClientOptions; + public clientOptions?: ClientOptions; constructor({ enableCaching = false, diff --git a/lib/llm/CerebrasClient.ts b/lib/llm/CerebrasClient.ts index 4b12c0380..7fba80108 100644 --- a/lib/llm/CerebrasClient.ts +++ b/lib/llm/CerebrasClient.ts @@ -1,5 +1,5 @@ -import OpenAI from "openai"; -import type { ClientOptions } from "openai"; +import { CreateChatCompletionResponseError } from "@/types/stagehandErrors"; +import OpenAI, { type ClientOptions } from "openai"; import { zodToJsonSchema } from "zod-to-json-schema"; import { LogLine } from "../../types/log"; import { AvailableModel } from "../../types/model"; @@ -10,14 +10,13 @@ import { LLMClient, LLMResponse, } from "./LLMClient"; -import { CreateChatCompletionResponseError } from "@/types/stagehandErrors"; export class CerebrasClient extends LLMClient { public type = "cerebras" as const; private client: OpenAI; private cache: LLMCache | undefined; private enableCaching: boolean; - public clientOptions: ClientOptions; + public clientOptions?: ClientOptions; public hasVision = false; constructor({ diff --git a/lib/llm/GoogleClient.ts b/lib/llm/GoogleClient.ts index 5460bea73..61872f165 100644 --- a/lib/llm/GoogleClient.ts +++ b/lib/llm/GoogleClient.ts @@ -83,7 +83,7 @@ export class GoogleClient extends LLMClient { clientOptions.apiKey = loadApiKeyFromEnv("google_legacy", logger); } this.clientOptions = clientOptions; - this.client = new GoogleGenAI({ apiKey: clientOptions.apiKey }); + this.client = new GoogleGenAI({ apiKey: clientOptions.apiKey as string }); this.cache = cache; this.enableCaching = enableCaching; this.modelName = modelName; diff --git a/lib/llm/LLMClient.ts b/lib/llm/LLMClient.ts index 6aad613b9..650d37d44 100644 --- a/lib/llm/LLMClient.ts +++ b/lib/llm/LLMClient.ts @@ -13,7 +13,7 @@ import { } from "ai"; import { ZodType } from "zod/v3"; import { LogLine } from "../../types/log"; -import { AvailableModel, ClientOptions } from "../../types/model"; +import { AvailableModel } from "../../types/model"; export interface ChatMessage { role: "system" | "user" | "assistant"; @@ -101,7 +101,6 @@ export abstract class LLMClient { public type: "openai" | "anthropic" | "cerebras" | "groq" | (string & {}); public modelName: AvailableModel | (string & {}); public hasVision: boolean; - public clientOptions: ClientOptions; public userProvidedInstructions?: string; constructor(modelName: AvailableModel, userProvidedInstructions?: string) { diff --git a/lib/llm/LLMProvider.ts b/lib/llm/LLMProvider.ts index f99d6edf8..e93495f9e 100644 --- a/lib/llm/LLMProvider.ts +++ b/lib/llm/LLMProvider.ts @@ -1,8 +1,22 @@ +import { AISDKCustomProvider, AISDKProvider } from "@/types/llm"; import { UnsupportedAISDKModelProviderError, UnsupportedModelError, UnsupportedModelProviderError, } from "@/types/stagehandErrors"; +import { anthropic, createAnthropic } from "@ai-sdk/anthropic"; +import { azure, createAzure } from "@ai-sdk/azure"; +import { bedrock, createAmazonBedrock } from "@ai-sdk/amazon-bedrock"; +import { cerebras, createCerebras } from "@ai-sdk/cerebras"; +import { createDeepSeek, deepseek } from "@ai-sdk/deepseek"; +import { createGoogleGenerativeAI, google } from "@ai-sdk/google"; +import { createGroq, groq } from "@ai-sdk/groq"; +import { createMistral, mistral } from "@ai-sdk/mistral"; +import { createOpenAI, openai } from "@ai-sdk/openai"; +import { createPerplexity, perplexity } from "@ai-sdk/perplexity"; +import { createTogetherAI, togetherai } from "@ai-sdk/togetherai"; +import { createXai, xai } from "@ai-sdk/xai"; +import { ollama } from "ollama-ai-provider"; import { LogLine } from "../../types/log"; import { AvailableModel, @@ -17,19 +31,6 @@ import { GoogleClient } from "./GoogleClient"; import { GroqClient } from "./GroqClient"; import { LLMClient } from "./LLMClient"; import { OpenAIClient } from "./OpenAIClient"; -import { openai, createOpenAI } from "@ai-sdk/openai"; -import { anthropic, createAnthropic } from "@ai-sdk/anthropic"; -import { google, createGoogleGenerativeAI } from "@ai-sdk/google"; -import { xai, createXai } from "@ai-sdk/xai"; -import { azure, createAzure } from "@ai-sdk/azure"; -import { groq, createGroq } from "@ai-sdk/groq"; -import { cerebras, createCerebras } from "@ai-sdk/cerebras"; -import { togetherai, createTogetherAI } from "@ai-sdk/togetherai"; -import { mistral, createMistral } from "@ai-sdk/mistral"; -import { deepseek, createDeepSeek } from "@ai-sdk/deepseek"; -import { perplexity, createPerplexity } from "@ai-sdk/perplexity"; -import { ollama } from "ollama-ai-provider"; -import { AISDKProvider, AISDKCustomProvider } from "@/types/llm"; const AISDKProviders: Record = { openai, @@ -38,6 +39,7 @@ const AISDKProviders: Record = { xai, azure, groq, + bedrock, cerebras, togetherai, mistral, @@ -52,6 +54,7 @@ const AISDKProvidersWithAPIKey: Record = { xai: createXai, azure: createAzure, groq: createGroq, + bedrock: createAmazonBedrock, cerebras: createCerebras, togetherai: createTogetherAI, mistral: createMistral, @@ -97,10 +100,9 @@ const modelToProviderMap: { [key in AvailableModel]: ModelProvider } = { export function getAISDKLanguageModel( subProvider: string, subModelName: string, - apiKey?: string, - baseURL?: string, + modelClientOptions?: Record, ) { - if (apiKey) { + if (modelClientOptions && Object.keys(modelClientOptions).length > 0) { const creator = AISDKProvidersWithAPIKey[subProvider]; if (!creator) { throw new UnsupportedAISDKModelProviderError( @@ -108,12 +110,9 @@ export function getAISDKLanguageModel( Object.keys(AISDKProvidersWithAPIKey), ); } - // Create the provider instance with the API key and baseURL if provided - const providerConfig: { apiKey: string; baseURL?: string } = { apiKey }; - if (baseURL) { - providerConfig.baseURL = baseURL; - } - const provider = creator(providerConfig); + + // Create the provider instance with the custom configuration options + const provider = creator(modelClientOptions as Record); // Get the specific model from the provider return provider(subModelName); } else { @@ -170,8 +169,7 @@ export class LLMProvider { const languageModel = getAISDKLanguageModel( subProvider, subModelName, - clientOptions?.apiKey, - clientOptions?.baseURL, + clientOptions as Record, ); return new AISdkClient({ diff --git a/lib/llm/OpenAIClient.ts b/lib/llm/OpenAIClient.ts index 008215bd2..58dd2308e 100644 --- a/lib/llm/OpenAIClient.ts +++ b/lib/llm/OpenAIClient.ts @@ -1,3 +1,8 @@ +import { + CreateChatCompletionResponseError, + StagehandError, + ZodSchemaValidationError, +} from "@/types/stagehandErrors"; import OpenAI, { ClientOptions } from "openai"; import { zodResponseFormat } from "openai/helpers/zod"; import { @@ -21,11 +26,6 @@ import { LLMClient, LLMResponse, } from "./LLMClient"; -import { - CreateChatCompletionResponseError, - StagehandError, - ZodSchemaValidationError, -} from "@/types/stagehandErrors"; export class OpenAIClient extends LLMClient { public type = "openai" as const; diff --git a/lib/utils.ts b/lib/utils.ts index c1104f70c..6ec533b22 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -4,7 +4,7 @@ import { Schema, Type } from "@google/genai"; import { ZodFirstPartyTypeKind as Kind, z, ZodTypeAny } from "zod/v3"; import { ObserveResult, Page } from "."; import { LogLine } from "../types/log"; -import { ModelProvider } from "../types/model"; +import { ClientOptions, ModelProvider } from "../types/model"; import { ZodPathSegments } from "../types/stagehand"; export function validateZodSchema(schema: z.ZodTypeAny, data: unknown) { @@ -452,6 +452,7 @@ export const providerEnvVarMap: Partial< perplexity: "PERPLEXITY_API_KEY", azure: "AZURE_API_KEY", xai: "XAI_API_KEY", + bedrock: "AWS_BEARER_TOKEN_BEDROCK", google_legacy: "GOOGLE_API_KEY", }; @@ -493,6 +494,153 @@ export function loadApiKeyFromEnv( return undefined; } +/** + * Loads Amazon Bedrock client configuration from modelClientOptions and environment variables. + * Supports both AWS credentials and AWS Bedrock API key authentication. + * Credential precedence: modelClientOptions first, then environment variables. + * @param logger Logger function for info/error messages + * @param modelClientOptions Model client options that may contain AWS credentials (accessKeyId, secretAccessKey, sessionToken, bearerToken) and region + * @returns Bedrock client options object or undefined if no authentication method is available + */ +export function loadBedrockClientOptions( + logger: (logLine: LogLine) => void, + modelClientOptions: ClientOptions = {}, +): Record | undefined { + // Authentication precedence: + // 1. modelClientOptions values first + // 2. Standard AWS credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) + // 3. AWS Bedrock bearer token (AWS_BEARER_TOKEN_BEDROCK) + + const modelClientOptionsRecord = modelClientOptions as Record< + string, + unknown + >; + + // Check if region is already set in modelClientOptions + let region = modelClientOptionsRecord?.region as string; + + if (!region) { + region = process.env.AWS_DEFAULT_REGION || process.env.AWS_REGION; + + if (!region) { + region = "us-west-2"; + logger({ + category: "init", + message: "No region was set for Bedrock, defaulting to us-west-2", + level: 1, + }); + } + } + + // Method 1: Check for standard AWS credentials - prioritize modelClientOptions + const accessKeyId = + (modelClientOptionsRecord?.accessKeyId as string) || + process.env.AWS_ACCESS_KEY_ID; + const secretAccessKey = + (modelClientOptionsRecord?.secretAccessKey as string) || + process.env.AWS_SECRET_ACCESS_KEY; + const sessionToken = + (modelClientOptionsRecord?.sessionToken as string) || + process.env.AWS_SESSION_TOKEN; + + if (accessKeyId && secretAccessKey) { + logger({ + category: "init", + message: "Using AWS credentials for Bedrock authentication", + level: 1, + }); + + const config: Record = { + accessKeyId, + secretAccessKey, + region, + }; + + // Add session token if present (for temporary credentials) + if (sessionToken && sessionToken.length > 0) { + config.sessionToken = sessionToken; + } + + return config; + } + + // Method 2: Handle AWS Bedrock bearer token - prioritize modelClientOptions + const bearerToken = + (modelClientOptionsRecord?.bearerToken as string) || + process.env.AWS_BEARER_TOKEN_BEDROCK; + if (bearerToken && bearerToken.length > 0) { + logger({ + category: "init", + message: "Using AWS Bedrock bearer token authentication", + level: 1, + }); + + try { + // Extract region and credentials from the bearer token + const base64Token = bearerToken.replace(/^bedrock-api-key-/, ""); + const decodedUrl = Buffer.from(base64Token, "base64").toString("utf-8"); + + // Add https:// protocol if missing + const fullUrl = decodedUrl.startsWith("http") + ? decodedUrl + : `https://${decodedUrl}`; + const url = new URL(fullUrl); + const params = url.searchParams; + + const credential = params.get("X-Amz-Credential"); + const securityToken = params.get("X-Amz-Security-Token"); + + if (credential && securityToken) { + const credentialParts = credential.split("/"); + if (credentialParts.length >= 4) { + const tokenAccessKeyId = credentialParts[0]; + const tokenRegion = credentialParts[2]; + const decodedSessionToken = decodeURIComponent(securityToken); + + // Use both direct credentials and credential provider for compatibility + const config: Record = { + region: tokenRegion || region, + accessKeyId: tokenAccessKeyId, + secretAccessKey: "dummy-secret-key", // Bearer tokens handle auth differently, but SDK requires this + sessionToken: decodedSessionToken, + credentialProvider: async () => ({ + accessKeyId: tokenAccessKeyId, + secretAccessKey: "dummy-secret-key", + sessionToken: decodedSessionToken, + }), + }; + + return config; + } + } + + // If parsing fails, return minimal config and let AWS SDK handle it + return { + region, + }; + } catch (error) { + logger({ + category: "init", + message: `Error loading AWS Bedrock client options: ${error}`, + level: 0, + }); + return { + region, + }; + } + } + + // No authentication method found + logger({ + category: "init", + message: + "No Amazon Bedrock authentication credentials found. Please provide credentials via modelClientOptions (accessKeyId/secretAccessKey or bearerToken) or environment variables (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY or AWS_BEARER_TOKEN_BEDROCK)", + level: 0, + }); + + return undefined; +} + export function trimTrailingTextNode( path: string | undefined, ): string | undefined { diff --git a/package.json b/package.json index 226b708a3..267b5e333 100644 --- a/package.json +++ b/package.json @@ -86,11 +86,10 @@ "pino-pretty": "^13.0.0", "playwright": "^1.52.0", "ws": "^8.18.0", - "zod-to-json-schema": "^3.23.5" - }, - "optionalDependencies": { + "zod-to-json-schema": "^3.23.5", "@ai-sdk/anthropic": "^1.2.6", "@ai-sdk/azure": "^1.3.19", + "@ai-sdk/amazon-bedrock": "^1.0.0", "@ai-sdk/cerebras": "^0.2.6", "@ai-sdk/deepseek": "^0.2.13", "@ai-sdk/google": "^1.2.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbd994598..a891cdf40 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,42 @@ importers: .: dependencies: + '@ai-sdk/amazon-bedrock': + specifier: ^1.0.0 + version: 1.1.6(zod@3.25.67) + '@ai-sdk/anthropic': + specifier: ^1.2.6 + version: 1.2.12(zod@3.25.67) + '@ai-sdk/azure': + specifier: ^1.3.19 + version: 1.3.25(zod@3.25.67) + '@ai-sdk/cerebras': + specifier: ^0.2.6 + version: 0.2.16(zod@3.25.67) + '@ai-sdk/deepseek': + specifier: ^0.2.13 + version: 0.2.16(zod@3.25.67) + '@ai-sdk/google': + specifier: ^1.2.6 + version: 1.2.22(zod@3.25.67) + '@ai-sdk/groq': + specifier: ^1.2.4 + version: 1.2.9(zod@3.25.67) + '@ai-sdk/mistral': + specifier: ^1.2.7 + version: 1.2.8(zod@3.25.67) + '@ai-sdk/openai': + specifier: ^1.0.14 + version: 1.3.24(zod@3.25.67) + '@ai-sdk/perplexity': + specifier: ^1.1.7 + version: 1.1.9(zod@3.25.67) + '@ai-sdk/togetherai': + specifier: ^0.2.6 + version: 0.2.16(zod@3.25.67) + '@ai-sdk/xai': + specifier: ^1.2.15 + version: 1.2.18(zod@3.25.67) '@anthropic-ai/sdk': specifier: 0.39.0 version: 0.39.0 @@ -35,6 +71,9 @@ importers: fetch-cookie: specifier: ^3.1.0 version: 3.1.0 + ollama-ai-provider: + specifier: ^1.2.0 + version: 1.2.0(zod@3.25.67) openai: specifier: ^4.87.1 version: 4.104.0(ws@8.18.3)(zod@3.25.67) @@ -56,43 +95,6 @@ importers: zod-to-json-schema: specifier: ^3.23.5 version: 3.24.6(zod@3.25.67) - optionalDependencies: - '@ai-sdk/anthropic': - specifier: ^1.2.6 - version: 1.2.12(zod@3.25.67) - '@ai-sdk/azure': - specifier: ^1.3.19 - version: 1.3.25(zod@3.25.67) - '@ai-sdk/cerebras': - specifier: ^0.2.6 - version: 0.2.16(zod@3.25.67) - '@ai-sdk/deepseek': - specifier: ^0.2.13 - version: 0.2.16(zod@3.25.67) - '@ai-sdk/google': - specifier: ^1.2.6 - version: 1.2.22(zod@3.25.67) - '@ai-sdk/groq': - specifier: ^1.2.4 - version: 1.2.9(zod@3.25.67) - '@ai-sdk/mistral': - specifier: ^1.2.7 - version: 1.2.8(zod@3.25.67) - '@ai-sdk/openai': - specifier: ^1.0.14 - version: 1.3.24(zod@3.25.67) - '@ai-sdk/perplexity': - specifier: ^1.1.7 - version: 1.1.9(zod@3.25.67) - '@ai-sdk/togetherai': - specifier: ^0.2.6 - version: 0.2.16(zod@3.25.67) - '@ai-sdk/xai': - specifier: ^1.2.15 - version: 1.2.18(zod@3.25.67) - ollama-ai-provider: - specifier: ^1.2.0 - version: 1.2.0(zod@3.25.67) devDependencies: '@changesets/changelog-github': specifier: ^0.5.0 @@ -135,7 +137,7 @@ importers: version: 0.0.64 braintrust: specifier: ^0.0.171 - version: 0.0.171(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) + version: 0.0.171(@aws-sdk/credential-provider-web-identity@3.896.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) chalk: specifier: ^5.4.1 version: 5.6.2 @@ -227,6 +229,12 @@ importers: packages: + '@ai-sdk/amazon-bedrock@1.1.6': + resolution: {integrity: sha512-h6SJWpku+i8OsSz0A4RT2g2uD+3E0SUgWHsWRIpxmPNgM1DnH6lgSby5sxqAZDY5xJyJtRFW5vB9G3GEBjHy/g==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + '@ai-sdk/anthropic@1.2.12': resolution: {integrity: sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==} engines: {node: '>=18'} @@ -296,6 +304,15 @@ packages: zod: optional: true + '@ai-sdk/provider-utils@2.1.6': + resolution: {integrity: sha512-Pfyaj0QZS22qyVn5Iz7IXcJ8nKIKlu2MeSAdKJzTwkAks7zdLaKVB+396Rqcp1bfQnxl7vaduQVMQiXUrgK8Gw==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + '@ai-sdk/provider-utils@2.2.8': resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} engines: {node: '>=18'} @@ -310,6 +327,10 @@ packages: resolution: {integrity: sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==} engines: {node: '>=18'} + '@ai-sdk/provider@1.0.7': + resolution: {integrity: sha512-q1PJEZ0qD9rVR+8JFEd01/QM++csMT5UVwYXSN2u54BrVw/D8TZLTeg2FEfKK00DgAx0UtWd8XOhhwITP9BT5g==} + engines: {node: '>=18'} + '@ai-sdk/provider@1.1.3': resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} engines: {node: '>=18'} @@ -418,6 +439,139 @@ packages: '@asyncapi/specs@6.10.0': resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-bedrock-runtime@3.896.0': + resolution: {integrity: sha512-3fmVdAh/6PzGK6lgpY/kAvxN9WwTwhOvkR1NfaUKT1khWGiZrHZfSMw3QXEkuWifbmv1M5krVYVHn5ki/dWYJg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.896.0': + resolution: {integrity: sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.896.0': + resolution: {integrity: sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.896.0': + resolution: {integrity: sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.896.0': + resolution: {integrity: sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.896.0': + resolution: {integrity: sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.896.0': + resolution: {integrity: sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.896.0': + resolution: {integrity: sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.896.0': + resolution: {integrity: sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.896.0': + resolution: {integrity: sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/eventstream-handler-node@3.893.0': + resolution: {integrity: sha512-5BrpRYhYBUefbY2cXm0NQtrLnmre6923l2/Ep/233V6p6yjQVlG6Wd2IXG7Dw6aXW0KyJ8P9QzjP5BzPZpLjqQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-eventstream@3.893.0': + resolution: {integrity: sha512-fdjiXQ/4rKdSN/KvQMwIOwBFaptuE6xiHCvFNT4cv9PIKjvbsw08E4x0wI3WkHdl9Xd/OrwERZ7LofWbESIcBg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.893.0': + resolution: {integrity: sha512-qL5xYRt80ahDfj9nDYLhpCNkDinEXvjLe/Qen/Y/u12+djrR2MB4DRa6mzBCkLkdXDtf0WAoW2EZsNCfGrmOEQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.893.0': + resolution: {integrity: sha512-ZqzMecjju5zkBquSIfVfCORI/3Mge21nUY4nWaGQy+NUXehqCGG4W7AiVpiHGOcY2cGJa7xeEkYcr2E2U9U0AA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.893.0': + resolution: {integrity: sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.896.0': + resolution: {integrity: sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-websocket@3.893.0': + resolution: {integrity: sha512-IZ8fWTbe509mrQW/G221WV/XPepxXngb0xxuBEzlyVTkkiTcsyD445M/zK2DxrokNQAPHPmWQmA9KjysP7gQCA==} + engines: {node: '>= 14.0.0'} + + '@aws-sdk/nested-clients@3.896.0': + resolution: {integrity: sha512-KaHALB6DIXScJL/ExmonADr3jtTV6dpOHoEeTRSskJ/aW+rhZo7kH8SLmrwOT/qX8d5tza17YyR/oRkIKY6Eaw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.893.0': + resolution: {integrity: sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.896.0': + resolution: {integrity: sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.893.0': + resolution: {integrity: sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.895.0': + resolution: {integrity: sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-format-url@3.893.0': + resolution: {integrity: sha512-VmAvcedZfQlekiSFJ9y/+YjuCFT3b/vXImbkqjYoD4gbsDjmKm5lxo/w1p9ch0s602obRPLMkh9H20YgXnmwEA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.893.0': + resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.893.0': + resolution: {integrity: sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w==} + + '@aws-sdk/util-user-agent-node@3.896.0': + resolution: {integrity: sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.894.0': + resolution: {integrity: sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA==} + engines: {node: '>=18.0.0'} + + '@aws/lambda-invoke-store@0.0.1': + resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==} + engines: {node: '>=18.0.0'} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1780,6 +1934,198 @@ packages: resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} engines: {node: '>=12'} + '@smithy/abort-controller@4.1.1': + resolution: {integrity: sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.2.2': + resolution: {integrity: sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.12.0': + resolution: {integrity: sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.1.2': + resolution: {integrity: sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.1.1': + resolution: {integrity: sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.1.1': + resolution: {integrity: sha512-Q9QWdAzRaIuVkefupRPRFAasaG/droBqn1feiMnmLa+LLEUG45pqX1+FurHFmlqiCfobB3nUlgoJfeXZsr7MPA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.2.1': + resolution: {integrity: sha512-oSUkF9zDN9zcOUBMtxp8RewJlh71E9NoHWU8jE3hU9JMYCsmW4assVTpgic/iS3/dM317j6hO5x18cc3XrfvEw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.1.1': + resolution: {integrity: sha512-tn6vulwf/ScY0vjhzptSJuDJJqlhNtUjkxJ4wiv9E3SPoEqTEKbaq6bfqRO7nvhTG29ALICRcvfFheOUPl8KNA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.1.1': + resolution: {integrity: sha512-uLOAiM/Dmgh2CbEXQx+6/ssK7fbzFhd+LjdyFxXid5ZBCbLHTFHLdD/QbXw5aEDsLxQhgzDxLLsZhsftAYwHJA==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.2.1': + resolution: {integrity: sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.1.1': + resolution: {integrity: sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.1.1': + resolution: {integrity: sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.1.0': + resolution: {integrity: sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.1.1': + resolution: {integrity: sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.2.4': + resolution: {integrity: sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.3.0': + resolution: {integrity: sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.1.1': + resolution: {integrity: sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.1.1': + resolution: {integrity: sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.2.2': + resolution: {integrity: sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.2.1': + resolution: {integrity: sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.1.1': + resolution: {integrity: sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.2.1': + resolution: {integrity: sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.1.1': + resolution: {integrity: sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.1.1': + resolution: {integrity: sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.1.2': + resolution: {integrity: sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.2.0': + resolution: {integrity: sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.2.1': + resolution: {integrity: sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.6.4': + resolution: {integrity: sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.5.0': + resolution: {integrity: sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.1.1': + resolution: {integrity: sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.1.0': + resolution: {integrity: sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.1.0': + resolution: {integrity: sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.1.0': + resolution: {integrity: sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.1.0': + resolution: {integrity: sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.1.0': + resolution: {integrity: sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.1.4': + resolution: {integrity: sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.1.4': + resolution: {integrity: sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.1.2': + resolution: {integrity: sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.1.0': + resolution: {integrity: sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.1.1': + resolution: {integrity: sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.1.2': + resolution: {integrity: sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.3.2': + resolution: {integrity: sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.1.0': + resolution: {integrity: sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.1.0': + resolution: {integrity: sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==} + engines: {node: '>=18.0.0'} + + '@smithy/uuid@1.0.0': + resolution: {integrity: sha512-OlA/yZHh0ekYFnbUkmYBDQPE6fGfdrvgz39ktp8Xf+FA6BfxLejPTMDOG0Nfk5/rDySAz1dRbFf24zaAFYVXlQ==} + engines: {node: '>=18.0.0'} + '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -2401,6 +2747,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.12.1: + resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -3194,6 +3543,10 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} + hasBin: true + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -5430,6 +5783,9 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + style-to-js@1.1.17: resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} @@ -5981,12 +6337,20 @@ packages: snapshots: + '@ai-sdk/amazon-bedrock@1.1.6(zod@3.25.67)': + dependencies: + '@ai-sdk/provider': 1.0.7 + '@ai-sdk/provider-utils': 2.1.6(zod@3.25.67) + '@aws-sdk/client-bedrock-runtime': 3.896.0 + zod: 3.25.67 + transitivePeerDependencies: + - aws-crt + '@ai-sdk/anthropic@1.2.12(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/azure@1.3.25(zod@3.25.67)': dependencies: @@ -5994,7 +6358,6 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/cerebras@0.2.16(zod@3.25.67)': dependencies: @@ -6002,7 +6365,6 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/deepseek@0.2.16(zod@3.25.67)': dependencies: @@ -6010,49 +6372,42 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/google@1.2.22(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/groq@1.2.9(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/mistral@1.2.8(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/openai-compatible@0.2.16(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/openai@1.3.24(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/perplexity@1.1.9(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/provider-utils@1.0.22(zod@3.25.67)': dependencies: @@ -6063,6 +6418,15 @@ snapshots: optionalDependencies: zod: 3.25.67 + '@ai-sdk/provider-utils@2.1.6(zod@3.25.67)': + dependencies: + '@ai-sdk/provider': 1.0.7 + eventsource-parser: 3.0.6 + nanoid: 3.3.11 + secure-json-parse: 2.7.0 + optionalDependencies: + zod: 3.25.67 + '@ai-sdk/provider-utils@2.2.8(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 @@ -6078,6 +6442,10 @@ snapshots: dependencies: json-schema: 0.4.0 + '@ai-sdk/provider@1.0.7': + dependencies: + json-schema: 0.4.0 + '@ai-sdk/provider@1.1.3': dependencies: json-schema: 0.4.0 @@ -6125,7 +6493,6 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@ai-sdk/ui-utils@0.0.50(zod@3.25.67)': dependencies: @@ -6160,7 +6527,6 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - optional: true '@alcalzone/ansi-tokenize@0.2.0': dependencies: @@ -6220,6 +6586,409 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.893.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-locate-window': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.893.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-runtime@3.896.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.896.0 + '@aws-sdk/credential-provider-node': 3.896.0 + '@aws-sdk/eventstream-handler-node': 3.893.0 + '@aws-sdk/middleware-eventstream': 3.893.0 + '@aws-sdk/middleware-host-header': 3.893.0 + '@aws-sdk/middleware-logger': 3.893.0 + '@aws-sdk/middleware-recursion-detection': 3.893.0 + '@aws-sdk/middleware-user-agent': 3.896.0 + '@aws-sdk/middleware-websocket': 3.893.0 + '@aws-sdk/region-config-resolver': 3.893.0 + '@aws-sdk/token-providers': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-endpoints': 3.895.0 + '@aws-sdk/util-user-agent-browser': 3.893.0 + '@aws-sdk/util-user-agent-node': 3.896.0 + '@smithy/config-resolver': 4.2.2 + '@smithy/core': 3.12.0 + '@smithy/eventstream-serde-browser': 4.1.1 + '@smithy/eventstream-serde-config-resolver': 4.2.1 + '@smithy/eventstream-serde-node': 4.1.1 + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/hash-node': 4.1.1 + '@smithy/invalid-dependency': 4.1.1 + '@smithy/middleware-content-length': 4.1.1 + '@smithy/middleware-endpoint': 4.2.4 + '@smithy/middleware-retry': 4.3.0 + '@smithy/middleware-serde': 4.1.1 + '@smithy/middleware-stack': 4.1.1 + '@smithy/node-config-provider': 4.2.2 + '@smithy/node-http-handler': 4.2.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.4 + '@smithy/util-defaults-mode-node': 4.1.4 + '@smithy/util-endpoints': 3.1.2 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-retry': 4.1.2 + '@smithy/util-stream': 4.3.2 + '@smithy/util-utf8': 4.1.0 + '@smithy/uuid': 1.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.896.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.896.0 + '@aws-sdk/middleware-host-header': 3.893.0 + '@aws-sdk/middleware-logger': 3.893.0 + '@aws-sdk/middleware-recursion-detection': 3.893.0 + '@aws-sdk/middleware-user-agent': 3.896.0 + '@aws-sdk/region-config-resolver': 3.893.0 + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-endpoints': 3.895.0 + '@aws-sdk/util-user-agent-browser': 3.893.0 + '@aws-sdk/util-user-agent-node': 3.896.0 + '@smithy/config-resolver': 4.2.2 + '@smithy/core': 3.12.0 + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/hash-node': 4.1.1 + '@smithy/invalid-dependency': 4.1.1 + '@smithy/middleware-content-length': 4.1.1 + '@smithy/middleware-endpoint': 4.2.4 + '@smithy/middleware-retry': 4.3.0 + '@smithy/middleware-serde': 4.1.1 + '@smithy/middleware-stack': 4.1.1 + '@smithy/node-config-provider': 4.2.2 + '@smithy/node-http-handler': 4.2.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.4 + '@smithy/util-defaults-mode-node': 4.1.4 + '@smithy/util-endpoints': 3.1.2 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-retry': 4.1.2 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.896.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@aws-sdk/xml-builder': 3.894.0 + '@smithy/core': 3.12.0 + '@smithy/node-config-provider': 4.2.2 + '@smithy/property-provider': 4.1.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/signature-v4': 5.2.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/property-provider': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/node-http-handler': 4.2.1 + '@smithy/property-provider': 4.1.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/util-stream': 4.3.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/credential-provider-env': 3.896.0 + '@aws-sdk/credential-provider-http': 3.896.0 + '@aws-sdk/credential-provider-process': 3.896.0 + '@aws-sdk/credential-provider-sso': 3.896.0 + '@aws-sdk/credential-provider-web-identity': 3.896.0 + '@aws-sdk/nested-clients': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/credential-provider-imds': 4.1.2 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.896.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.896.0 + '@aws-sdk/credential-provider-http': 3.896.0 + '@aws-sdk/credential-provider-ini': 3.896.0 + '@aws-sdk/credential-provider-process': 3.896.0 + '@aws-sdk/credential-provider-sso': 3.896.0 + '@aws-sdk/credential-provider-web-identity': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/credential-provider-imds': 4.1.2 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.896.0': + dependencies: + '@aws-sdk/client-sso': 3.896.0 + '@aws-sdk/core': 3.896.0 + '@aws-sdk/token-providers': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/nested-clients': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/eventstream-handler-node@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/eventstream-codec': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-eventstream@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@aws/lambda-invoke-store': 0.0.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-endpoints': 3.895.0 + '@smithy/core': 3.12.0 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-websocket@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-format-url': 3.893.0 + '@smithy/eventstream-codec': 4.1.1 + '@smithy/eventstream-serde-browser': 4.1.1 + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/signature-v4': 5.2.1 + '@smithy/types': 4.5.0 + '@smithy/util-hex-encoding': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.896.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.896.0 + '@aws-sdk/middleware-host-header': 3.893.0 + '@aws-sdk/middleware-logger': 3.893.0 + '@aws-sdk/middleware-recursion-detection': 3.893.0 + '@aws-sdk/middleware-user-agent': 3.896.0 + '@aws-sdk/region-config-resolver': 3.893.0 + '@aws-sdk/types': 3.893.0 + '@aws-sdk/util-endpoints': 3.895.0 + '@aws-sdk/util-user-agent-browser': 3.893.0 + '@aws-sdk/util-user-agent-node': 3.896.0 + '@smithy/config-resolver': 4.2.2 + '@smithy/core': 3.12.0 + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/hash-node': 4.1.1 + '@smithy/invalid-dependency': 4.1.1 + '@smithy/middleware-content-length': 4.1.1 + '@smithy/middleware-endpoint': 4.2.4 + '@smithy/middleware-retry': 4.3.0 + '@smithy/middleware-serde': 4.1.1 + '@smithy/middleware-stack': 4.1.1 + '@smithy/node-config-provider': 4.2.2 + '@smithy/node-http-handler': 4.2.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-body-length-node': 4.1.0 + '@smithy/util-defaults-mode-browser': 4.1.4 + '@smithy/util-defaults-mode-node': 4.1.4 + '@smithy/util-endpoints': 3.1.2 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-retry': 4.1.2 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/node-config-provider': 4.2.2 + '@smithy/types': 4.5.0 + '@smithy/util-config-provider': 4.1.0 + '@smithy/util-middleware': 4.1.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.896.0': + dependencies: + '@aws-sdk/core': 3.896.0 + '@aws-sdk/nested-clients': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.893.0': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.895.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + '@smithy/util-endpoints': 3.1.2 + tslib: 2.8.1 + + '@aws-sdk/util-format-url@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/querystring-builder': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.893.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.893.0': + dependencies: + '@aws-sdk/types': 3.893.0 + '@smithy/types': 4.5.0 + bowser: 2.12.1 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.896.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.896.0 + '@aws-sdk/types': 3.893.0 + '@smithy/node-config-provider': 4.2.2 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.894.0': + dependencies: + '@smithy/types': 4.5.0 + fast-xml-parser: 5.2.5 + tslib: 2.8.1 + + '@aws/lambda-invoke-store@0.0.1': {} + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -7687,6 +8456,310 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 + '@smithy/abort-controller@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.2.2': + dependencies: + '@smithy/node-config-provider': 4.2.2 + '@smithy/types': 4.5.0 + '@smithy/util-config-provider': 4.1.0 + '@smithy/util-middleware': 4.1.1 + tslib: 2.8.1 + + '@smithy/core@3.12.0': + dependencies: + '@smithy/middleware-serde': 4.1.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-body-length-browser': 4.1.0 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-stream': 4.3.2 + '@smithy/util-utf8': 4.1.0 + '@smithy/uuid': 1.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.1.2': + dependencies: + '@smithy/node-config-provider': 4.2.2 + '@smithy/property-provider': 4.1.1 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.1.1': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.5.0 + '@smithy/util-hex-encoding': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.1.1': + dependencies: + '@smithy/eventstream-serde-universal': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.2.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.1.1': + dependencies: + '@smithy/eventstream-serde-universal': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.1.1': + dependencies: + '@smithy/eventstream-codec': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.2.1': + dependencies: + '@smithy/protocol-http': 5.2.1 + '@smithy/querystring-builder': 4.1.1 + '@smithy/types': 4.5.0 + '@smithy/util-base64': 4.1.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.1.1': + dependencies: + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.2.4': + dependencies: + '@smithy/core': 3.12.0 + '@smithy/middleware-serde': 4.1.1 + '@smithy/node-config-provider': 4.2.2 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + '@smithy/url-parser': 4.1.1 + '@smithy/util-middleware': 4.1.1 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.3.0': + dependencies: + '@smithy/node-config-provider': 4.2.2 + '@smithy/protocol-http': 5.2.1 + '@smithy/service-error-classification': 4.1.2 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-retry': 4.1.2 + '@smithy/uuid': 1.0.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.1.1': + dependencies: + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.2.2': + dependencies: + '@smithy/property-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.2.0 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.2.1': + dependencies: + '@smithy/abort-controller': 4.1.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/querystring-builder': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.2.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + '@smithy/util-uri-escape': 4.1.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.1.2': + dependencies: + '@smithy/types': 4.5.0 + + '@smithy/shared-ini-file-loader@4.2.0': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.2.1': + dependencies: + '@smithy/is-array-buffer': 4.1.0 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + '@smithy/util-hex-encoding': 4.1.0 + '@smithy/util-middleware': 4.1.1 + '@smithy/util-uri-escape': 4.1.0 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.6.4': + dependencies: + '@smithy/core': 3.12.0 + '@smithy/middleware-endpoint': 4.2.4 + '@smithy/middleware-stack': 4.1.1 + '@smithy/protocol-http': 5.2.1 + '@smithy/types': 4.5.0 + '@smithy/util-stream': 4.3.2 + tslib: 2.8.1 + + '@smithy/types@4.5.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.1.1': + dependencies: + '@smithy/querystring-parser': 4.1.1 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.1.0': + dependencies: + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.1.0': + dependencies: + '@smithy/is-array-buffer': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.1.4': + dependencies: + '@smithy/property-provider': 4.1.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + bowser: 2.12.1 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.1.4': + dependencies: + '@smithy/config-resolver': 4.2.2 + '@smithy/credential-provider-imds': 4.1.2 + '@smithy/node-config-provider': 4.2.2 + '@smithy/property-provider': 4.1.1 + '@smithy/smithy-client': 4.6.4 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.1.2': + dependencies: + '@smithy/node-config-provider': 4.2.2 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.1.1': + dependencies: + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.1.2': + dependencies: + '@smithy/service-error-classification': 4.1.2 + '@smithy/types': 4.5.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.3.2': + dependencies: + '@smithy/fetch-http-handler': 5.2.1 + '@smithy/node-http-handler': 4.2.1 + '@smithy/types': 4.5.0 + '@smithy/util-base64': 4.1.0 + '@smithy/util-buffer-from': 4.1.0 + '@smithy/util-hex-encoding': 4.1.0 + '@smithy/util-utf8': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.1.0': + dependencies: + '@smithy/util-buffer-from': 4.1.0 + tslib: 2.8.1 + + '@smithy/uuid@1.0.0': + dependencies: + tslib: 2.8.1 + '@socket.io/component-emitter@3.1.2': {} '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': @@ -8078,7 +9151,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vercel/functions@1.6.0': {} + '@vercel/functions@1.6.0(@aws-sdk/credential-provider-web-identity@3.896.0)': + optionalDependencies: + '@aws-sdk/credential-provider-web-identity': 3.896.0 '@vue/compiler-core@3.5.21': dependencies: @@ -8444,6 +9519,8 @@ snapshots: boolbase@1.0.0: {} + bowser@2.12.1: {} + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -8457,12 +9534,12 @@ snapshots: dependencies: fill-range: 7.1.1 - braintrust@0.0.171(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67): + braintrust@0.0.171(@aws-sdk/credential-provider-web-identity@3.896.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67): dependencies: '@ai-sdk/provider': 0.0.11 '@braintrust/core': 0.0.67 '@next/env': 14.2.32 - '@vercel/functions': 1.6.0 + '@vercel/functions': 1.6.0(@aws-sdk/credential-provider-web-identity@3.896.0) ai: 3.4.33(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) argparse: 2.0.1 chalk: 4.1.2 @@ -9446,6 +10523,10 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-parser@5.2.5: + dependencies: + strnum: 2.1.1 + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -11180,7 +12261,6 @@ snapshots: partial-json: 0.1.7 optionalDependencies: zod: 3.25.67 - optional: true on-exit-leak-free@2.1.2: {} @@ -11389,8 +12469,7 @@ snapshots: parseurl@1.3.3: {} - partial-json@0.1.7: - optional: true + partial-json@0.1.7: {} patch-console@2.0.0: {} @@ -12390,6 +13469,8 @@ snapshots: strip-json-comments@5.0.3: {} + strnum@2.1.1: {} + style-to-js@1.1.17: dependencies: style-to-object: 1.0.9 diff --git a/types/llm.ts b/types/llm.ts index 2a78d8ec9..c9afae39d 100644 --- a/types/llm.ts +++ b/types/llm.ts @@ -9,6 +9,6 @@ export interface LLMTool { export type AISDKProvider = (modelName: string) => LanguageModel; // Represents a function that takes options (like apiKey) and returns an AISDKProvider -export type AISDKCustomProvider = (options: { - apiKey: string; -}) => AISDKProvider; +export type AISDKCustomProvider = ( + options: Record, +) => AISDKProvider; diff --git a/types/model.ts b/types/model.ts index beb960a17..18bbde2da 100644 --- a/types/model.ts +++ b/types/model.ts @@ -44,7 +44,10 @@ export type ModelProvider = | "google" | "aisdk"; -export type ClientOptions = OpenAIClientOptions | AnthropicClientOptions; +export type ClientOptions = + | Record + | OpenAIClientOptions + | AnthropicClientOptions; export interface AnthropicJsonSchemaObject { definitions?: {