@elizaos/plugin-vercel-ai-gateway 2.0.0-alpha.2 → 2.0.0-alpha.4

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../index.ts", "../../init.ts", "../../types/index.ts", "../../utils/config.ts", "../../providers/client.ts", "../../models/embedding.ts", "../../models/image.ts", "../../models/object.ts", "../../models/text.ts"],
4
- "sourcesContent": ["import type {\n GenerateTextParams,\n IAgentRuntime,\n ImageDescriptionParams,\n ImageGenerationParams,\n JsonValue,\n ObjectGenerationParams,\n Plugin,\n TestCase,\n TestSuite,\n TextEmbeddingParams,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { type GatewayPluginConfig, initializeGateway } from \"./init\";\nimport {\n handleImageDescription,\n handleImageGeneration,\n handleObjectLarge,\n handleObjectSmall,\n handleTextEmbedding,\n handleTextLarge,\n handleTextSmall,\n} from \"./models\";\nimport type { ImageDescriptionResult, ImageGenerationResult } from \"./types\";\nimport { getApiKeyOptional, getBaseUrl } from \"./utils/config\";\n\nexport { GatewayClient } from \"./providers/client\";\n\nconst pluginTests = [\n {\n name: \"gateway_plugin_tests\",\n tests: [\n {\n name: \"gateway_test_api_key_validation\",\n fn: async (runtime: IAgentRuntime) => {\n const apiKey = getApiKeyOptional(runtime);\n if (!apiKey) {\n throw new Error(\n \"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is not configured\"\n );\n }\n logger.info(\"[Gateway Test] API key is configured\");\n },\n },\n {\n name: \"gateway_test_api_connectivity\",\n fn: async (runtime: IAgentRuntime) => {\n const baseUrl = getBaseUrl(runtime);\n const apiKey = getApiKeyOptional(runtime);\n\n if (!apiKey) {\n throw new Error(\"API key is required for connectivity test\");\n }\n\n const response = await fetch(`${baseUrl}/models`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!response.ok) {\n throw new Error(\n `API connectivity test failed: ${response.status} ${response.statusText}`\n );\n }\n\n const data = (await response.json()) as { data?: Array<Record<string, never>> };\n logger.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);\n },\n },\n {\n name: \"gateway_test_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"Say hello in exactly 5 words.\",\n });\n\n if (typeof text !== \"string\" || text.length === 0) {\n throw new Error(\"TEXT_SMALL should return non-empty string\");\n }\n\n logger.info(`[Gateway Test] TEXT_SMALL generated: \"${text.substring(0, 50)}...\"`);\n },\n },\n {\n name: \"gateway_test_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"Explain quantum computing in 2 sentences.\",\n });\n\n if (typeof text !== \"string\" || text.length === 0) {\n throw new Error(\"TEXT_LARGE should return non-empty string\");\n }\n\n logger.info(`[Gateway Test] TEXT_LARGE generated: \"${text.substring(0, 50)}...\"`);\n },\n },\n {\n name: \"gateway_test_text_embedding\",\n fn: async (runtime: IAgentRuntime) => {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: \"Hello, world!\",\n });\n\n if (!Array.isArray(embedding) || embedding.length === 0) {\n throw new Error(\"Embedding should return a non-empty array\");\n }\n\n logger.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);\n },\n },\n {\n name: \"gateway_test_object_generation\",\n fn: async (runtime: IAgentRuntime) => {\n const result = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt:\n \"Return a JSON object with exactly these fields: name (string), age (number), active (boolean)\",\n });\n\n if (!result || typeof result !== \"object\") {\n throw new Error(\"Object generation should return an object\");\n }\n\n logger.info(\n `[Gateway Test] Object generated: ${JSON.stringify(result).substring(0, 100)}`\n );\n },\n },\n {\n name: \"gateway_test_streaming\",\n fn: async (runtime: IAgentRuntime) => {\n const chunks: string[] = [];\n\n const result = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"Count from 1 to 5, one number per line.\",\n stream: true,\n onStreamChunk: (chunk: string) => {\n chunks.push(chunk);\n },\n });\n\n if (typeof result !== \"string\" || result.length === 0) {\n throw new Error(\"Streaming should return non-empty result\");\n }\n\n if (chunks.length === 0) {\n throw new Error(\"No streaming chunks received\");\n }\n\n logger.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);\n },\n },\n ] as TestCase[],\n },\n] as TestSuite[];\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nexport const gatewayPlugin: Plugin = {\n name: \"gateway\",\n description: \"Vercel AI Gateway integration for text, image, audio, and embedding models\",\n\n config: {\n AI_GATEWAY_API_KEY: env.AI_GATEWAY_API_KEY ?? null,\n AIGATEWAY_API_KEY: env.AIGATEWAY_API_KEY ?? null,\n VERCEL_OIDC_TOKEN: env.VERCEL_OIDC_TOKEN ?? null,\n AI_GATEWAY_BASE_URL: env.AI_GATEWAY_BASE_URL ?? null,\n AI_GATEWAY_SMALL_MODEL: env.AI_GATEWAY_SMALL_MODEL ?? null,\n AI_GATEWAY_LARGE_MODEL: env.AI_GATEWAY_LARGE_MODEL ?? null,\n AI_GATEWAY_EMBEDDING_MODEL: env.AI_GATEWAY_EMBEDDING_MODEL ?? null,\n AI_GATEWAY_EMBEDDING_DIMENSIONS: env.AI_GATEWAY_EMBEDDING_DIMENSIONS ?? null,\n AI_GATEWAY_IMAGE_MODEL: env.AI_GATEWAY_IMAGE_MODEL ?? null,\n },\n\n async init(config: Record<string, string>, runtime: IAgentRuntime): Promise<void> {\n initializeGateway(config as GatewayPluginConfig, runtime);\n },\n\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n return handleTextEmbedding(runtime, params);\n },\n\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextSmall(runtime, params);\n },\n\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextLarge(runtime, params);\n },\n\n [ModelType.IMAGE]: async (\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n ): Promise<ImageGenerationResult[]> => {\n return handleImageGeneration(runtime, params);\n },\n\n [ModelType.IMAGE_DESCRIPTION]: async (\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n ): Promise<ImageDescriptionResult> => {\n return handleImageDescription(runtime, params);\n },\n\n [ModelType.OBJECT_SMALL]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, JsonValue>> => {\n return handleObjectSmall(runtime, params);\n },\n\n [ModelType.OBJECT_LARGE]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, JsonValue>> => {\n return handleObjectLarge(runtime, params);\n },\n },\n\n tests: pluginTests,\n};\n\nexport default gatewayPlugin;\n", "import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { getApiKeyOptional } from \"./utils/config\";\n\nexport interface GatewayPluginConfig {\n AI_GATEWAY_API_KEY?: string;\n AIGATEWAY_API_KEY?: string;\n VERCEL_OIDC_TOKEN?: string;\n AI_GATEWAY_BASE_URL?: string;\n AI_GATEWAY_SMALL_MODEL?: string;\n AI_GATEWAY_LARGE_MODEL?: string;\n AI_GATEWAY_EMBEDDING_MODEL?: string;\n AI_GATEWAY_EMBEDDING_DIMENSIONS?: string;\n AI_GATEWAY_IMAGE_MODEL?: string;\n AI_GATEWAY_TIMEOUT_MS?: string;\n}\n\nexport function initializeGateway(\n _config: GatewayPluginConfig | undefined,\n runtime: IAgentRuntime\n): void {\n const apiKey = getApiKeyOptional(runtime);\n\n if (apiKey) {\n logger.info(\"[Gateway] Vercel AI Gateway plugin initialized\");\n } else {\n logger.warn(\n \"[Gateway] No API key found. Set AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN.\"\n );\n }\n}\n", "export interface GatewayConfig {\n apiKey: string;\n baseUrl: string;\n smallModel: string;\n largeModel: string;\n embeddingModel: string;\n embeddingDimensions: number;\n imageModel: string;\n timeoutMs: number;\n}\n\nexport const DEFAULT_CONFIG: Omit<GatewayConfig, \"apiKey\"> = {\n baseUrl: \"https://ai-gateway.vercel.sh/v1\",\n smallModel: \"gpt-5-mini\",\n largeModel: \"gpt-5\",\n embeddingModel: \"text-embedding-3-small\",\n embeddingDimensions: 1536,\n imageModel: \"dall-e-3\",\n timeoutMs: 60000,\n};\n\nexport interface TextGenerationParams {\n prompt: string;\n system?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stopSequences?: string[];\n stream?: boolean;\n onStreamChunk?: (chunk: string) => void;\n}\n\nexport interface EmbeddingParams {\n text: string;\n model?: string;\n dimensions?: number;\n}\n\nexport interface ObjectGenerationParams {\n prompt: string;\n schema?: Record<string, unknown>;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\nexport type ImageSize = \"256x256\" | \"512x512\" | \"1024x1024\" | \"1792x1024\" | \"1024x1792\";\n\nexport type ImageQuality = \"standard\" | \"hd\";\n\nexport type ImageStyle = \"vivid\" | \"natural\";\n\nexport interface ImageGenerationParams {\n prompt: string;\n model?: string;\n n?: number;\n size?: ImageSize;\n quality?: ImageQuality;\n style?: ImageStyle;\n}\n\nexport interface ImageDescriptionParams {\n imageUrl: string;\n prompt?: string;\n model?: string;\n maxTokens?: number;\n}\n\nexport interface ImageGenerationResult {\n url: string;\n revisedPrompt?: string;\n}\n\nexport interface ImageDescriptionResult {\n title: string;\n description: string;\n}\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport type MessageRole = \"system\" | \"user\" | \"assistant\";\n\nexport interface ChatMessage {\n role: MessageRole;\n content: string | null;\n}\n\nexport interface ChatCompletionChoice {\n index: number;\n message: ChatMessage;\n finishReason: string | null;\n}\n\nexport interface ChatCompletionResponse {\n id: string;\n object: \"chat.completion\";\n created: number;\n model: string;\n choices: ChatCompletionChoice[];\n usage?: TokenUsage;\n}\n\nexport interface EmbeddingData {\n embedding: number[];\n index: number;\n}\n\nexport interface EmbeddingResponse {\n object: \"list\";\n data: EmbeddingData[];\n model: string;\n usage: TokenUsage;\n}\n\nexport interface ImageResponseData {\n url: string;\n revised_prompt?: string;\n}\n\nexport interface ImageGenerationResponse {\n created: number;\n data: ImageResponseData[];\n}\n\nexport class GatewayError extends Error {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"GatewayError\";\n this.statusCode = statusCode;\n }\n}\n", "import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { GatewayConfig } from \"../types\";\nimport { DEFAULT_CONFIG } from \"../types\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(runtime: IAgentRuntime | undefined, key: string): string | undefined {\n if (runtime) {\n const value = runtime.getSetting(key);\n if (value) return String(value);\n }\n return getEnvValue(key);\n}\n\nexport function getApiKey(runtime?: IAgentRuntime): string {\n const apiKey =\n getSetting(runtime, \"AI_GATEWAY_API_KEY\") ||\n getSetting(runtime, \"AIGATEWAY_API_KEY\") ||\n getSetting(runtime, \"VERCEL_OIDC_TOKEN\");\n\n if (!apiKey) {\n throw new Error(\"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is required\");\n }\n\n return apiKey;\n}\n\nexport function getApiKeyOptional(runtime?: IAgentRuntime): string | undefined {\n return (\n getSetting(runtime, \"AI_GATEWAY_API_KEY\") ||\n getSetting(runtime, \"AIGATEWAY_API_KEY\") ||\n getSetting(runtime, \"VERCEL_OIDC_TOKEN\")\n );\n}\n\nexport function getBaseUrl(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_BASE_URL\") || DEFAULT_CONFIG.baseUrl;\n}\n\nexport function getSmallModel(runtime?: IAgentRuntime): string {\n return (\n getSetting(runtime, \"AI_GATEWAY_SMALL_MODEL\") ||\n getSetting(runtime, \"SMALL_MODEL\") ||\n DEFAULT_CONFIG.smallModel\n );\n}\n\nexport function getLargeModel(runtime?: IAgentRuntime): string {\n return (\n getSetting(runtime, \"AI_GATEWAY_LARGE_MODEL\") ||\n getSetting(runtime, \"LARGE_MODEL\") ||\n DEFAULT_CONFIG.largeModel\n );\n}\n\nexport function getEmbeddingModel(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_EMBEDDING_MODEL\") || DEFAULT_CONFIG.embeddingModel;\n}\n\nexport function getEmbeddingDimensions(runtime?: IAgentRuntime): number {\n const dims = getSetting(runtime, \"AI_GATEWAY_EMBEDDING_DIMENSIONS\");\n if (dims) {\n const parsed = parseInt(dims, 10);\n if (!Number.isNaN(parsed) && parsed > 0) return parsed;\n }\n return DEFAULT_CONFIG.embeddingDimensions;\n}\n\nexport function getImageModel(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_IMAGE_MODEL\") || DEFAULT_CONFIG.imageModel;\n}\n\nexport function getTimeoutMs(runtime?: IAgentRuntime): number {\n const timeout = getSetting(runtime, \"AI_GATEWAY_TIMEOUT_MS\");\n if (timeout) {\n const parsed = parseInt(timeout, 10);\n if (!Number.isNaN(parsed) && parsed > 0) return parsed;\n }\n return DEFAULT_CONFIG.timeoutMs;\n}\n\nexport function buildConfig(runtime?: IAgentRuntime): GatewayConfig {\n return {\n apiKey: getApiKey(runtime),\n baseUrl: getBaseUrl(runtime),\n smallModel: getSmallModel(runtime),\n largeModel: getLargeModel(runtime),\n embeddingModel: getEmbeddingModel(runtime),\n embeddingDimensions: getEmbeddingDimensions(runtime),\n imageModel: getImageModel(runtime),\n timeoutMs: getTimeoutMs(runtime),\n };\n}\n\nexport function getAuthHeader(runtime?: IAgentRuntime): Record<string, string> {\n const apiKey = getApiKey(runtime);\n return {\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\nconst NO_TEMPERATURE_MODELS = new Set([\n \"o1\",\n \"o1-preview\",\n \"o1-mini\",\n \"o3\",\n \"o3-mini\",\n \"gpt-5\",\n \"gpt-5-mini\",\n]);\n\nexport function modelSupportsTemperature(model: string): boolean {\n const modelLower = model.toLowerCase();\n for (const noTempModel of NO_TEMPERATURE_MODELS) {\n if (modelLower.includes(noTempModel)) {\n return false;\n }\n }\n return true;\n}\n", "import type {\n ChatCompletionResponse,\n EmbeddingParams,\n EmbeddingResponse,\n GatewayConfig,\n ImageDescriptionParams,\n ImageDescriptionResult,\n ImageGenerationParams,\n ImageGenerationResponse,\n ImageGenerationResult,\n TextGenerationParams,\n} from \"../types\";\nimport { GatewayError } from \"../types\";\nimport { modelSupportsTemperature } from \"../utils/config\";\n\nexport class GatewayClient {\n private readonly config: GatewayConfig;\n\n constructor(config: GatewayConfig) {\n this.config = config;\n }\n\n private url(endpoint: string): string {\n const base = this.config.baseUrl.replace(/\\/$/, \"\");\n return `${base}${endpoint}`;\n }\n\n private async request<T>(endpoint: string, options: RequestInit): Promise<T> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);\n\n try {\n const response = await fetch(this.url(endpoint), {\n ...options,\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n let message: string;\n try {\n const errorData = (await response.json()) as {\n error?: { message?: string };\n };\n message = errorData?.error?.message || response.statusText;\n } catch {\n message = response.statusText;\n }\n throw new GatewayError(\n `Gateway API error (${response.status}): ${message}`,\n response.status\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new GatewayError(\"Request timeout\");\n }\n throw new GatewayError(\n `Network error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async generateText(params: TextGenerationParams): Promise<string> {\n const model = params.model || this.config.largeModel;\n\n const messages: Array<{ role: string; content: string }> = [];\n if (params.system) {\n messages.push({ role: \"system\", content: params.system });\n }\n messages.push({ role: \"user\", content: params.prompt });\n\n const body: Record<\n string,\n string | number | boolean | string[] | Array<{ role: string; content: string }>\n > = {\n model,\n messages,\n };\n\n if (modelSupportsTemperature(model)) {\n if (params.temperature !== undefined) {\n body.temperature = params.temperature;\n }\n if (params.frequencyPenalty !== undefined) {\n body.frequency_penalty = params.frequencyPenalty;\n }\n if (params.presencePenalty !== undefined) {\n body.presence_penalty = params.presencePenalty;\n }\n if (params.stopSequences !== undefined) {\n body.stop = params.stopSequences;\n }\n if (params.maxTokens !== undefined) {\n body.max_tokens = params.maxTokens;\n }\n } else {\n if (params.maxTokens !== undefined) {\n body.max_completion_tokens = params.maxTokens;\n }\n }\n\n const response = await this.request<ChatCompletionResponse>(\"/chat/completions\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.choices || response.choices.length === 0) {\n throw new GatewayError(\"API returned no choices\");\n }\n\n const content = response.choices[0].message.content;\n if (content === null) {\n throw new GatewayError(\"API returned empty content\");\n }\n\n return content;\n }\n\n async *streamText(params: TextGenerationParams): AsyncGenerator<string, void, void> {\n const model = params.model || this.config.largeModel;\n\n const messages: Array<{ role: string; content: string }> = [];\n if (params.system) {\n messages.push({ role: \"system\", content: params.system });\n }\n messages.push({ role: \"user\", content: params.prompt });\n\n const body: Record<\n string,\n string | number | boolean | Array<{ role: string; content: string }>\n > = {\n model,\n messages,\n stream: true,\n };\n\n if (modelSupportsTemperature(model)) {\n if (params.temperature !== undefined) {\n body.temperature = params.temperature;\n }\n if (params.maxTokens !== undefined) {\n body.max_tokens = params.maxTokens;\n }\n } else {\n if (params.maxTokens !== undefined) {\n body.max_completion_tokens = params.maxTokens;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);\n\n try {\n const response = await fetch(this.url(\"/chat/completions\"), {\n method: \"POST\",\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new GatewayError(\n `Gateway API error (${response.status}): ${response.statusText}`,\n response.status\n );\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new GatewayError(\"No response body\");\n }\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const data = line.slice(6);\n if (data === \"[DONE]\") return;\n\n try {\n const chunk = JSON.parse(data) as {\n choices?: Array<{ delta?: { content?: string } }>;\n };\n const content = chunk.choices?.[0]?.delta?.content;\n if (content) {\n yield content;\n }\n } catch {}\n }\n }\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async createEmbedding(params: EmbeddingParams): Promise<number[]> {\n const model = params.model || this.config.embeddingModel;\n const dimensions = params.dimensions || this.config.embeddingDimensions;\n\n const body: Record<string, unknown> = {\n model,\n input: params.text,\n };\n\n if (dimensions) {\n body.dimensions = dimensions;\n }\n\n const response = await this.request<EmbeddingResponse>(\"/embeddings\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.data || response.data.length === 0) {\n throw new GatewayError(\"API returned empty embedding data\");\n }\n\n return response.data[0].embedding;\n }\n\n // =========================================================================\n // Image Generation\n // =========================================================================\n\n /**\n * Generate images.\n */\n async generateImage(params: ImageGenerationParams): Promise<ImageGenerationResult[]> {\n const model = params.model || this.config.imageModel;\n\n const body: Record<string, string | number | undefined> = {\n model,\n prompt: params.prompt,\n };\n\n if (params.n !== undefined) body.n = params.n;\n if (params.size !== undefined) body.size = params.size;\n if (params.quality !== undefined) body.quality = params.quality;\n if (params.style !== undefined) body.style = params.style;\n\n const response = await this.request<ImageGenerationResponse>(\"/images/generations\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n return response.data.map((item) => ({\n url: item.url,\n revisedPrompt: item.revised_prompt,\n }));\n }\n\n // =========================================================================\n // Image Description\n // =========================================================================\n\n /**\n * Describe/analyze an image using vision capabilities.\n */\n async describeImage(params: ImageDescriptionParams): Promise<ImageDescriptionResult> {\n const model = params.model || \"gpt-5-mini\";\n const prompt =\n params.prompt || \"Please analyze this image and provide a title and detailed description.\";\n const maxTokens = params.maxTokens || 8192;\n\n const body = {\n model,\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n { type: \"image_url\", image_url: { url: params.imageUrl } },\n ],\n },\n ],\n max_tokens: maxTokens,\n };\n\n const response = await this.request<ChatCompletionResponse>(\"/chat/completions\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.choices || response.choices.length === 0) {\n throw new GatewayError(\"API returned no choices for image description\");\n }\n\n const content = response.choices[0].message.content;\n if (content === null) {\n throw new GatewayError(\"API returned empty image description\");\n }\n\n let title = \"Image Analysis\";\n let description = content;\n\n const titleMatch = /title[:\\s]+(.+?)(?:\\n|$)/i.exec(content);\n if (titleMatch) {\n title = titleMatch[1].trim();\n description = content.replace(/title[:\\s]+.+?(?:\\n|$)/i, \"\").trim();\n }\n\n return { title, description };\n }\n\n async generateObject(params: {\n prompt: string;\n model?: string;\n temperature?: number;\n }): Promise<Record<string, unknown>> {\n const model = params.model || this.config.smallModel;\n const prompt = `Respond with only valid JSON. ${params.prompt}`;\n\n const response = await this.generateText({\n prompt,\n model,\n temperature: params.temperature,\n });\n\n let cleaned = response.trim();\n if (cleaned.startsWith(\"```json\")) {\n cleaned = cleaned.slice(7);\n }\n if (cleaned.startsWith(\"```\")) {\n cleaned = cleaned.slice(3);\n }\n if (cleaned.endsWith(\"```\")) {\n cleaned = cleaned.slice(0, -3);\n }\n\n try {\n return JSON.parse(cleaned.trim()) as Record<string, unknown>;\n } catch {\n throw new GatewayError(`Failed to parse JSON response: ${cleaned}`);\n }\n }\n}\n", "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getEmbeddingDimensions, getEmbeddingModel } from \"../utils/config\";\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n let text: string;\n if (params === null) {\n text = \"test\";\n } else if (typeof params === \"string\") {\n text = params;\n } else {\n text = params.text;\n }\n\n const model = getEmbeddingModel(runtime);\n const dimensions = getEmbeddingDimensions(runtime);\n\n return client.createEmbedding({\n text,\n model,\n dimensions,\n });\n}\n", "import type {\n ImageDescriptionParams as CoreImageDescParams,\n ImageGenerationParams as CoreImageParams,\n IAgentRuntime,\n} from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport type {\n ImageDescriptionResult,\n ImageGenerationResult,\n ImageQuality,\n ImageSize,\n ImageStyle,\n} from \"../types\";\nimport { buildConfig, getImageModel } from \"../utils/config\";\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: CoreImageParams\n): Promise<ImageGenerationResult[]> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getImageModel(runtime);\n\n const extendedParams = params as { quality?: string; style?: string };\n return client.generateImage({\n prompt: params.prompt,\n model,\n n: params.count,\n size: params.size as ImageSize | undefined,\n quality: extendedParams.quality as ImageQuality | undefined,\n style: extendedParams.style as ImageStyle | undefined,\n });\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: CoreImageDescParams | string\n): Promise<ImageDescriptionResult> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n let imageUrl: string;\n let prompt: string | undefined;\n\n if (typeof params === \"string\") {\n imageUrl = params;\n } else {\n imageUrl = params.imageUrl;\n prompt = params.prompt;\n }\n\n return client.describeImage({\n imageUrl,\n prompt,\n });\n}\n", "import type { IAgentRuntime, JsonValue, ObjectGenerationParams } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getLargeModel, getSmallModel } from \"../utils/config\";\n\nexport async function handleObjectSmall(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getSmallModel(runtime);\n\n return (await client.generateObject({\n prompt: params.prompt,\n model,\n temperature: params.temperature,\n })) as Record<string, JsonValue>;\n}\n\nexport async function handleObjectLarge(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getLargeModel(runtime);\n\n return (await client.generateObject({\n prompt: params.prompt,\n model,\n temperature: params.temperature,\n })) as Record<string, JsonValue>;\n}\n", "import type { GenerateTextParams, IAgentRuntime } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getLargeModel, getSmallModel } from \"../utils/config\";\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getSmallModel(runtime);\n\n if (params.stream && params.onStreamChunk) {\n const chunks: string[] = [];\n for await (const chunk of client.streamText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n stopSequences: params.stopSequences,\n })) {\n chunks.push(chunk);\n params.onStreamChunk(chunk);\n }\n return chunks.join(\"\");\n }\n\n return client.generateText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n}\n\n/**\n * Handle TEXT_LARGE model requests.\n */\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getLargeModel(runtime);\n\n if (params.stream && params.onStreamChunk) {\n const chunks: string[] = [];\n for await (const chunk of client.streamText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n stopSequences: params.stopSequences,\n })) {\n chunks.push(chunk);\n params.onStreamChunk(chunk);\n }\n return chunks.join(\"\");\n }\n\n return client.generateText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n}\n"],
5
- "mappings": "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",
6
- "names": ["logger", "logger"]
3
+ "sources": ["../../index.ts", "../../init.ts", "../../types/index.ts", "../../utils/config.ts", "../../models/embedding.ts", "../../providers/client.ts", "../../models/image.ts", "../../models/object.ts", "../../models/text.ts"],
4
+ "sourcesContent": ["import type {\n GenerateTextParams,\n IAgentRuntime,\n ImageDescriptionParams,\n ImageGenerationParams,\n JsonValue,\n ObjectGenerationParams,\n Plugin,\n TestCase,\n TestSuite,\n TextEmbeddingParams,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { type GatewayPluginConfig, initializeGateway } from \"./init\";\nimport {\n handleImageDescription,\n handleImageGeneration,\n handleObjectLarge,\n handleObjectSmall,\n handleTextEmbedding,\n handleTextLarge,\n handleTextSmall,\n} from \"./models\";\nimport type { ImageDescriptionResult, ImageGenerationResult } from \"./types\";\nimport { getApiKeyOptional, getBaseUrl } from \"./utils/config\";\n\nexport { GatewayClient } from \"./providers/client\";\n\nconst pluginTests = [\n {\n name: \"gateway_plugin_tests\",\n tests: [\n {\n name: \"gateway_test_api_key_validation\",\n fn: async (runtime: IAgentRuntime) => {\n const apiKey = getApiKeyOptional(runtime);\n if (!apiKey) {\n throw new Error(\n \"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is not configured\"\n );\n }\n logger.info(\"[Gateway Test] API key is configured\");\n },\n },\n {\n name: \"gateway_test_api_connectivity\",\n fn: async (runtime: IAgentRuntime) => {\n const baseUrl = getBaseUrl(runtime);\n const apiKey = getApiKeyOptional(runtime);\n\n if (!apiKey) {\n throw new Error(\"API key is required for connectivity test\");\n }\n\n const response = await fetch(`${baseUrl}/models`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n\n if (!response.ok) {\n throw new Error(\n `API connectivity test failed: ${response.status} ${response.statusText}`\n );\n }\n\n const data = (await response.json()) as { data?: Array<Record<string, never>> };\n logger.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);\n },\n },\n {\n name: \"gateway_test_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"Say hello in exactly 5 words.\",\n });\n\n if (typeof text !== \"string\" || text.length === 0) {\n throw new Error(\"TEXT_SMALL should return non-empty string\");\n }\n\n logger.info(`[Gateway Test] TEXT_SMALL generated: \"${text.substring(0, 50)}...\"`);\n },\n },\n {\n name: \"gateway_test_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"Explain quantum computing in 2 sentences.\",\n });\n\n if (typeof text !== \"string\" || text.length === 0) {\n throw new Error(\"TEXT_LARGE should return non-empty string\");\n }\n\n logger.info(`[Gateway Test] TEXT_LARGE generated: \"${text.substring(0, 50)}...\"`);\n },\n },\n {\n name: \"gateway_test_text_embedding\",\n fn: async (runtime: IAgentRuntime) => {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: \"Hello, world!\",\n });\n\n if (!Array.isArray(embedding) || embedding.length === 0) {\n throw new Error(\"Embedding should return a non-empty array\");\n }\n\n logger.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);\n },\n },\n {\n name: \"gateway_test_object_generation\",\n fn: async (runtime: IAgentRuntime) => {\n const result = await runtime.useModel(ModelType.OBJECT_SMALL, {\n prompt:\n \"Return a JSON object with exactly these fields: name (string), age (number), active (boolean)\",\n });\n\n if (!result || typeof result !== \"object\") {\n throw new Error(\"Object generation should return an object\");\n }\n\n logger.info(\n `[Gateway Test] Object generated: ${JSON.stringify(result).substring(0, 100)}`\n );\n },\n },\n {\n name: \"gateway_test_streaming\",\n fn: async (runtime: IAgentRuntime) => {\n const chunks: string[] = [];\n\n const result = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"Count from 1 to 5, one number per line.\",\n stream: true,\n onStreamChunk: (chunk: string) => {\n chunks.push(chunk);\n },\n });\n\n if (typeof result !== \"string\" || result.length === 0) {\n throw new Error(\"Streaming should return non-empty result\");\n }\n\n if (chunks.length === 0) {\n throw new Error(\"No streaming chunks received\");\n }\n\n logger.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);\n },\n },\n ] as TestCase[],\n },\n] as TestSuite[];\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nexport const gatewayPlugin: Plugin = {\n name: \"gateway\",\n description: \"Vercel AI Gateway integration for text, image, audio, and embedding models\",\n\n config: {\n AI_GATEWAY_API_KEY: env.AI_GATEWAY_API_KEY ?? null,\n AIGATEWAY_API_KEY: env.AIGATEWAY_API_KEY ?? null,\n VERCEL_OIDC_TOKEN: env.VERCEL_OIDC_TOKEN ?? null,\n AI_GATEWAY_BASE_URL: env.AI_GATEWAY_BASE_URL ?? null,\n AI_GATEWAY_SMALL_MODEL: env.AI_GATEWAY_SMALL_MODEL ?? null,\n AI_GATEWAY_LARGE_MODEL: env.AI_GATEWAY_LARGE_MODEL ?? null,\n AI_GATEWAY_EMBEDDING_MODEL: env.AI_GATEWAY_EMBEDDING_MODEL ?? null,\n AI_GATEWAY_EMBEDDING_DIMENSIONS: env.AI_GATEWAY_EMBEDDING_DIMENSIONS ?? null,\n AI_GATEWAY_IMAGE_MODEL: env.AI_GATEWAY_IMAGE_MODEL ?? null,\n },\n\n async init(config: Record<string, string>, runtime: IAgentRuntime): Promise<void> {\n initializeGateway(config as GatewayPluginConfig, runtime);\n },\n\n models: {\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ): Promise<number[]> => {\n return handleTextEmbedding(runtime, params);\n },\n\n [ModelType.TEXT_SMALL]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextSmall(runtime, params);\n },\n\n [ModelType.TEXT_LARGE]: async (\n runtime: IAgentRuntime,\n params: GenerateTextParams\n ): Promise<string> => {\n return handleTextLarge(runtime, params);\n },\n\n [ModelType.IMAGE]: async (\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n ): Promise<ImageGenerationResult[]> => {\n return handleImageGeneration(runtime, params);\n },\n\n [ModelType.IMAGE_DESCRIPTION]: async (\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n ): Promise<ImageDescriptionResult> => {\n return handleImageDescription(runtime, params);\n },\n\n [ModelType.OBJECT_SMALL]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, JsonValue>> => {\n return handleObjectSmall(runtime, params);\n },\n\n [ModelType.OBJECT_LARGE]: async (\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n ): Promise<Record<string, JsonValue>> => {\n return handleObjectLarge(runtime, params);\n },\n },\n\n tests: pluginTests,\n};\n\nexport default gatewayPlugin;\n", "import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { getApiKeyOptional } from \"./utils/config\";\n\nexport interface GatewayPluginConfig {\n AI_GATEWAY_API_KEY?: string;\n AIGATEWAY_API_KEY?: string;\n VERCEL_OIDC_TOKEN?: string;\n AI_GATEWAY_BASE_URL?: string;\n AI_GATEWAY_SMALL_MODEL?: string;\n AI_GATEWAY_LARGE_MODEL?: string;\n AI_GATEWAY_EMBEDDING_MODEL?: string;\n AI_GATEWAY_EMBEDDING_DIMENSIONS?: string;\n AI_GATEWAY_IMAGE_MODEL?: string;\n AI_GATEWAY_TIMEOUT_MS?: string;\n}\n\nexport function initializeGateway(\n _config: GatewayPluginConfig | undefined,\n runtime: IAgentRuntime\n): void {\n const apiKey = getApiKeyOptional(runtime);\n\n if (apiKey) {\n logger.info(\"[Gateway] Vercel AI Gateway plugin initialized\");\n } else {\n logger.warn(\n \"[Gateway] No API key found. Set AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN.\"\n );\n }\n}\n", "export interface GatewayConfig {\n apiKey: string;\n baseUrl: string;\n smallModel: string;\n largeModel: string;\n embeddingModel: string;\n embeddingDimensions: number;\n imageModel: string;\n timeoutMs: number;\n}\n\nexport const DEFAULT_CONFIG: Omit<GatewayConfig, \"apiKey\"> = {\n baseUrl: \"https://ai-gateway.vercel.sh/v1\",\n smallModel: \"gpt-5-mini\",\n largeModel: \"gpt-5\",\n embeddingModel: \"text-embedding-3-small\",\n embeddingDimensions: 1536,\n imageModel: \"dall-e-3\",\n timeoutMs: 60000,\n};\n\nexport interface TextGenerationParams {\n prompt: string;\n system?: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stopSequences?: string[];\n stream?: boolean;\n onStreamChunk?: (chunk: string) => void;\n}\n\nexport interface EmbeddingParams {\n text: string;\n model?: string;\n dimensions?: number;\n}\n\nexport interface ObjectGenerationParams {\n prompt: string;\n schema?: Record<string, unknown>;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\nexport type ImageSize = \"256x256\" | \"512x512\" | \"1024x1024\" | \"1792x1024\" | \"1024x1792\";\n\nexport type ImageQuality = \"standard\" | \"hd\";\n\nexport type ImageStyle = \"vivid\" | \"natural\";\n\nexport interface ImageGenerationParams {\n prompt: string;\n model?: string;\n n?: number;\n size?: ImageSize;\n quality?: ImageQuality;\n style?: ImageStyle;\n}\n\nexport interface ImageDescriptionParams {\n imageUrl: string;\n prompt?: string;\n model?: string;\n maxTokens?: number;\n}\n\nexport interface ImageGenerationResult {\n url: string;\n revisedPrompt?: string;\n}\n\nexport interface ImageDescriptionResult {\n title: string;\n description: string;\n}\n\nexport interface TokenUsage {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n}\n\nexport type MessageRole = \"system\" | \"user\" | \"assistant\";\n\nexport interface ChatMessage {\n role: MessageRole;\n content: string | null;\n}\n\nexport interface ChatCompletionChoice {\n index: number;\n message: ChatMessage;\n finishReason: string | null;\n}\n\nexport interface ChatCompletionResponse {\n id: string;\n object: \"chat.completion\";\n created: number;\n model: string;\n choices: ChatCompletionChoice[];\n usage?: TokenUsage;\n}\n\nexport interface EmbeddingData {\n embedding: number[];\n index: number;\n}\n\nexport interface EmbeddingResponse {\n object: \"list\";\n data: EmbeddingData[];\n model: string;\n usage: TokenUsage;\n}\n\nexport interface ImageResponseData {\n url: string;\n revised_prompt?: string;\n}\n\nexport interface ImageGenerationResponse {\n created: number;\n data: ImageResponseData[];\n}\n\nexport class GatewayError extends Error {\n statusCode?: number;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"GatewayError\";\n this.statusCode = statusCode;\n }\n}\n", "import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { GatewayConfig } from \"../types\";\nimport { DEFAULT_CONFIG } from \"../types\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(runtime: IAgentRuntime | undefined, key: string): string | undefined {\n if (runtime) {\n const value = runtime.getSetting(key);\n if (value) return String(value);\n }\n return getEnvValue(key);\n}\n\nexport function getApiKey(runtime?: IAgentRuntime): string {\n const apiKey =\n getSetting(runtime, \"AI_GATEWAY_API_KEY\") ||\n getSetting(runtime, \"AIGATEWAY_API_KEY\") ||\n getSetting(runtime, \"VERCEL_OIDC_TOKEN\");\n\n if (!apiKey) {\n throw new Error(\"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is required\");\n }\n\n return apiKey;\n}\n\nexport function getApiKeyOptional(runtime?: IAgentRuntime): string | undefined {\n return (\n getSetting(runtime, \"AI_GATEWAY_API_KEY\") ||\n getSetting(runtime, \"AIGATEWAY_API_KEY\") ||\n getSetting(runtime, \"VERCEL_OIDC_TOKEN\")\n );\n}\n\nexport function getBaseUrl(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_BASE_URL\") || DEFAULT_CONFIG.baseUrl;\n}\n\nexport function getSmallModel(runtime?: IAgentRuntime): string {\n return (\n getSetting(runtime, \"AI_GATEWAY_SMALL_MODEL\") ||\n getSetting(runtime, \"SMALL_MODEL\") ||\n DEFAULT_CONFIG.smallModel\n );\n}\n\nexport function getLargeModel(runtime?: IAgentRuntime): string {\n return (\n getSetting(runtime, \"AI_GATEWAY_LARGE_MODEL\") ||\n getSetting(runtime, \"LARGE_MODEL\") ||\n DEFAULT_CONFIG.largeModel\n );\n}\n\nexport function getEmbeddingModel(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_EMBEDDING_MODEL\") || DEFAULT_CONFIG.embeddingModel;\n}\n\nexport function getEmbeddingDimensions(runtime?: IAgentRuntime): number {\n const dims = getSetting(runtime, \"AI_GATEWAY_EMBEDDING_DIMENSIONS\");\n if (dims) {\n const parsed = parseInt(dims, 10);\n if (!Number.isNaN(parsed) && parsed > 0) return parsed;\n }\n return DEFAULT_CONFIG.embeddingDimensions;\n}\n\nexport function getImageModel(runtime?: IAgentRuntime): string {\n return getSetting(runtime, \"AI_GATEWAY_IMAGE_MODEL\") || DEFAULT_CONFIG.imageModel;\n}\n\nexport function getTimeoutMs(runtime?: IAgentRuntime): number {\n const timeout = getSetting(runtime, \"AI_GATEWAY_TIMEOUT_MS\");\n if (timeout) {\n const parsed = parseInt(timeout, 10);\n if (!Number.isNaN(parsed) && parsed > 0) return parsed;\n }\n return DEFAULT_CONFIG.timeoutMs;\n}\n\nexport function buildConfig(runtime?: IAgentRuntime): GatewayConfig {\n return {\n apiKey: getApiKey(runtime),\n baseUrl: getBaseUrl(runtime),\n smallModel: getSmallModel(runtime),\n largeModel: getLargeModel(runtime),\n embeddingModel: getEmbeddingModel(runtime),\n embeddingDimensions: getEmbeddingDimensions(runtime),\n imageModel: getImageModel(runtime),\n timeoutMs: getTimeoutMs(runtime),\n };\n}\n\nexport function getAuthHeader(runtime?: IAgentRuntime): Record<string, string> {\n const apiKey = getApiKey(runtime);\n return {\n Authorization: `Bearer ${apiKey}`,\n };\n}\n\nconst NO_TEMPERATURE_MODELS = new Set([\n \"o1\",\n \"o1-preview\",\n \"o1-mini\",\n \"o3\",\n \"o3-mini\",\n \"gpt-5\",\n \"gpt-5-mini\",\n]);\n\nexport function modelSupportsTemperature(model: string): boolean {\n const modelLower = model.toLowerCase();\n for (const noTempModel of NO_TEMPERATURE_MODELS) {\n if (modelLower.includes(noTempModel)) {\n return false;\n }\n }\n return true;\n}\n", "import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { logger, MAX_EMBEDDING_TOKENS } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getEmbeddingDimensions, getEmbeddingModel } from \"../utils/config\";\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n let text: string;\n if (params === null) {\n text = \"test\";\n } else if (typeof params === \"string\") {\n text = params;\n } else {\n text = params.text;\n }\n\n // Truncate to stay within embedding model token limits\n const maxChars = MAX_EMBEDDING_TOKENS * 4; // ~4 chars per token\n if (text.length > maxChars) {\n logger.warn(\n `[Vercel] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~${MAX_EMBEDDING_TOKENS} tokens`\n );\n text = text.slice(0, maxChars);\n }\n\n const model = getEmbeddingModel(runtime);\n const dimensions = getEmbeddingDimensions(runtime);\n\n return client.createEmbedding({\n text,\n model,\n dimensions,\n });\n}\n", "import type {\n ChatCompletionResponse,\n EmbeddingParams,\n EmbeddingResponse,\n GatewayConfig,\n ImageDescriptionParams,\n ImageDescriptionResult,\n ImageGenerationParams,\n ImageGenerationResponse,\n ImageGenerationResult,\n TextGenerationParams,\n} from \"../types\";\nimport { GatewayError } from \"../types\";\nimport { modelSupportsTemperature } from \"../utils/config\";\n\nexport class GatewayClient {\n private readonly config: GatewayConfig;\n\n constructor(config: GatewayConfig) {\n this.config = config;\n }\n\n private url(endpoint: string): string {\n const base = this.config.baseUrl.replace(/\\/$/, \"\");\n return `${base}${endpoint}`;\n }\n\n private async request<T>(endpoint: string, options: RequestInit): Promise<T> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);\n\n try {\n const response = await fetch(this.url(endpoint), {\n ...options,\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n let message: string;\n try {\n const errorData = (await response.json()) as {\n error?: { message?: string };\n };\n message = errorData?.error?.message || response.statusText;\n } catch {\n message = response.statusText;\n }\n throw new GatewayError(\n `Gateway API error (${response.status}): ${message}`,\n response.status\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new GatewayError(\"Request timeout\");\n }\n throw new GatewayError(\n `Network error: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async generateText(params: TextGenerationParams): Promise<string> {\n const model = params.model || this.config.largeModel;\n\n const messages: Array<{ role: string; content: string }> = [];\n if (params.system) {\n messages.push({ role: \"system\", content: params.system });\n }\n messages.push({ role: \"user\", content: params.prompt });\n\n const body: Record<\n string,\n string | number | boolean | string[] | Array<{ role: string; content: string }>\n > = {\n model,\n messages,\n };\n\n if (modelSupportsTemperature(model)) {\n if (params.temperature !== undefined) {\n body.temperature = params.temperature;\n }\n if (params.frequencyPenalty !== undefined) {\n body.frequency_penalty = params.frequencyPenalty;\n }\n if (params.presencePenalty !== undefined) {\n body.presence_penalty = params.presencePenalty;\n }\n if (params.stopSequences !== undefined) {\n body.stop = params.stopSequences;\n }\n if (params.maxTokens !== undefined) {\n body.max_tokens = params.maxTokens;\n }\n } else {\n if (params.maxTokens !== undefined) {\n body.max_completion_tokens = params.maxTokens;\n }\n }\n\n const response = await this.request<ChatCompletionResponse>(\"/chat/completions\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.choices || response.choices.length === 0) {\n throw new GatewayError(\"API returned no choices\");\n }\n\n const content = response.choices[0].message.content;\n if (content === null) {\n throw new GatewayError(\"API returned empty content\");\n }\n\n return content;\n }\n\n async *streamText(params: TextGenerationParams): AsyncGenerator<string, void, void> {\n const model = params.model || this.config.largeModel;\n\n const messages: Array<{ role: string; content: string }> = [];\n if (params.system) {\n messages.push({ role: \"system\", content: params.system });\n }\n messages.push({ role: \"user\", content: params.prompt });\n\n const body: Record<\n string,\n string | number | boolean | Array<{ role: string; content: string }>\n > = {\n model,\n messages,\n stream: true,\n };\n\n if (modelSupportsTemperature(model)) {\n if (params.temperature !== undefined) {\n body.temperature = params.temperature;\n }\n if (params.maxTokens !== undefined) {\n body.max_tokens = params.maxTokens;\n }\n } else {\n if (params.maxTokens !== undefined) {\n body.max_completion_tokens = params.maxTokens;\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);\n\n try {\n const response = await fetch(this.url(\"/chat/completions\"), {\n method: \"POST\",\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new GatewayError(\n `Gateway API error (${response.status}): ${response.statusText}`,\n response.status\n );\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new GatewayError(\"No response body\");\n }\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const data = line.slice(6);\n if (data === \"[DONE]\") return;\n\n try {\n const chunk = JSON.parse(data) as {\n choices?: Array<{ delta?: { content?: string } }>;\n };\n const content = chunk.choices?.[0]?.delta?.content;\n if (content) {\n yield content;\n }\n } catch {}\n }\n }\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n async createEmbedding(params: EmbeddingParams): Promise<number[]> {\n const model = params.model || this.config.embeddingModel;\n const dimensions = params.dimensions || this.config.embeddingDimensions;\n\n const body: Record<string, unknown> = {\n model,\n input: params.text,\n };\n\n if (dimensions) {\n body.dimensions = dimensions;\n }\n\n const response = await this.request<EmbeddingResponse>(\"/embeddings\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.data || response.data.length === 0) {\n throw new GatewayError(\"API returned empty embedding data\");\n }\n\n return response.data[0].embedding;\n }\n\n // =========================================================================\n // Image Generation\n // =========================================================================\n\n /**\n * Generate images.\n */\n async generateImage(params: ImageGenerationParams): Promise<ImageGenerationResult[]> {\n const model = params.model || this.config.imageModel;\n\n const body: Record<string, string | number | undefined> = {\n model,\n prompt: params.prompt,\n };\n\n if (params.n !== undefined) body.n = params.n;\n if (params.size !== undefined) body.size = params.size;\n if (params.quality !== undefined) body.quality = params.quality;\n if (params.style !== undefined) body.style = params.style;\n\n const response = await this.request<ImageGenerationResponse>(\"/images/generations\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n return response.data.map((item) => ({\n url: item.url,\n revisedPrompt: item.revised_prompt,\n }));\n }\n\n // =========================================================================\n // Image Description\n // =========================================================================\n\n /**\n * Describe/analyze an image using vision capabilities.\n */\n async describeImage(params: ImageDescriptionParams): Promise<ImageDescriptionResult> {\n const model = params.model || \"gpt-5-mini\";\n const prompt =\n params.prompt || \"Please analyze this image and provide a title and detailed description.\";\n const maxTokens = params.maxTokens || 8192;\n\n const body = {\n model,\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n { type: \"image_url\", image_url: { url: params.imageUrl } },\n ],\n },\n ],\n max_tokens: maxTokens,\n };\n\n const response = await this.request<ChatCompletionResponse>(\"/chat/completions\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n\n if (!response.choices || response.choices.length === 0) {\n throw new GatewayError(\"API returned no choices for image description\");\n }\n\n const content = response.choices[0].message.content;\n if (content === null) {\n throw new GatewayError(\"API returned empty image description\");\n }\n\n let title = \"Image Analysis\";\n let description = content;\n\n const titleMatch = /title[:\\s]+(.+?)(?:\\n|$)/i.exec(content);\n if (titleMatch) {\n title = titleMatch[1].trim();\n description = content.replace(/title[:\\s]+.+?(?:\\n|$)/i, \"\").trim();\n }\n\n return { title, description };\n }\n\n async generateObject(params: {\n prompt: string;\n model?: string;\n temperature?: number;\n }): Promise<Record<string, unknown>> {\n const model = params.model || this.config.smallModel;\n const prompt = `Respond with only valid JSON. ${params.prompt}`;\n\n const response = await this.generateText({\n prompt,\n model,\n temperature: params.temperature,\n });\n\n let cleaned = response.trim();\n if (cleaned.startsWith(\"```json\")) {\n cleaned = cleaned.slice(7);\n }\n if (cleaned.startsWith(\"```\")) {\n cleaned = cleaned.slice(3);\n }\n if (cleaned.endsWith(\"```\")) {\n cleaned = cleaned.slice(0, -3);\n }\n\n try {\n return JSON.parse(cleaned.trim()) as Record<string, unknown>;\n } catch {\n throw new GatewayError(`Failed to parse JSON response: ${cleaned}`);\n }\n }\n}\n", "import type {\n ImageDescriptionParams as CoreImageDescParams,\n ImageGenerationParams as CoreImageParams,\n IAgentRuntime,\n} from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport type {\n ImageDescriptionResult,\n ImageGenerationResult,\n ImageQuality,\n ImageSize,\n ImageStyle,\n} from \"../types\";\nimport { buildConfig, getImageModel } from \"../utils/config\";\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: CoreImageParams\n): Promise<ImageGenerationResult[]> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getImageModel(runtime);\n\n const extendedParams = params as { quality?: string; style?: string };\n return client.generateImage({\n prompt: params.prompt,\n model,\n n: params.count,\n size: params.size as ImageSize | undefined,\n quality: extendedParams.quality as ImageQuality | undefined,\n style: extendedParams.style as ImageStyle | undefined,\n });\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: CoreImageDescParams | string\n): Promise<ImageDescriptionResult> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n let imageUrl: string;\n let prompt: string | undefined;\n\n if (typeof params === \"string\") {\n imageUrl = params;\n } else {\n imageUrl = params.imageUrl;\n prompt = params.prompt;\n }\n\n return client.describeImage({\n imageUrl,\n prompt,\n });\n}\n", "import type { IAgentRuntime, JsonValue, ObjectGenerationParams } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getLargeModel, getSmallModel } from \"../utils/config\";\n\nexport async function handleObjectSmall(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getSmallModel(runtime);\n\n return (await client.generateObject({\n prompt: params.prompt,\n model,\n temperature: params.temperature,\n })) as Record<string, JsonValue>;\n}\n\nexport async function handleObjectLarge(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getLargeModel(runtime);\n\n return (await client.generateObject({\n prompt: params.prompt,\n model,\n temperature: params.temperature,\n })) as Record<string, JsonValue>;\n}\n", "import type { GenerateTextParams, IAgentRuntime } from \"@elizaos/core\";\nimport { GatewayClient } from \"../providers/client\";\nimport { buildConfig, getLargeModel, getSmallModel } from \"../utils/config\";\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getSmallModel(runtime);\n\n if (params.stream && params.onStreamChunk) {\n const chunks: string[] = [];\n for await (const chunk of client.streamText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n stopSequences: params.stopSequences,\n })) {\n chunks.push(chunk);\n params.onStreamChunk(chunk);\n }\n return chunks.join(\"\");\n }\n\n return client.generateText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n}\n\n/**\n * Handle TEXT_LARGE model requests.\n */\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string> {\n const config = buildConfig(runtime);\n const client = new GatewayClient(config);\n\n const model = getLargeModel(runtime);\n\n if (params.stream && params.onStreamChunk) {\n const chunks: string[] = [];\n for await (const chunk of client.streamText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n stopSequences: params.stopSequences,\n })) {\n chunks.push(chunk);\n params.onStreamChunk(chunk);\n }\n return chunks.join(\"\");\n }\n\n return client.generateText({\n prompt: params.prompt,\n system: runtime.character?.system,\n model,\n maxTokens: params.maxTokens,\n temperature: params.temperature,\n frequencyPenalty: params.frequencyPenalty,\n presencePenalty: params.presencePenalty,\n stopSequences: params.stopSequences,\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["logger", "logger", "logger", "logger"]
7
7
  }
@@ -26,7 +26,7 @@ __export(index_browser_exports, {
26
26
  module.exports = __toCommonJS(index_browser_exports);
27
27
 
28
28
  // index.ts
29
- var import_core2 = require("@elizaos/core");
29
+ var import_core3 = require("@elizaos/core");
30
30
 
31
31
  // init.ts
32
32
  var import_core = require("@elizaos/core");
@@ -149,6 +149,9 @@ function initializeGateway(_config, runtime) {
149
149
  }
150
150
  }
151
151
 
152
+ // models/embedding.ts
153
+ var import_core2 = require("@elizaos/core");
154
+
152
155
  // providers/client.ts
153
156
  var GatewayClient = class {
154
157
  config;
@@ -440,6 +443,13 @@ async function handleTextEmbedding(runtime, params) {
440
443
  } else {
441
444
  text = params.text;
442
445
  }
446
+ const maxChars = import_core2.MAX_EMBEDDING_TOKENS * 4;
447
+ if (text.length > maxChars) {
448
+ import_core2.logger.warn(
449
+ `[Vercel] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~${import_core2.MAX_EMBEDDING_TOKENS} tokens`
450
+ );
451
+ text = text.slice(0, maxChars);
452
+ }
443
453
  const model = getEmbeddingModel(runtime);
444
454
  const dimensions = getEmbeddingDimensions(runtime);
445
455
  return client.createEmbedding({
@@ -579,7 +589,7 @@ var pluginTests = [
579
589
  "AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is not configured"
580
590
  );
581
591
  }
582
- import_core2.logger.info("[Gateway Test] API key is configured");
592
+ import_core3.logger.info("[Gateway Test] API key is configured");
583
593
  }
584
594
  },
585
595
  {
@@ -599,55 +609,55 @@ var pluginTests = [
599
609
  );
600
610
  }
601
611
  const data = await response.json();
602
- import_core2.logger.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);
612
+ import_core3.logger.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);
603
613
  }
604
614
  },
605
615
  {
606
616
  name: "gateway_test_text_small",
607
617
  fn: async (runtime) => {
608
- const text = await runtime.useModel(import_core2.ModelType.TEXT_SMALL, {
618
+ const text = await runtime.useModel(import_core3.ModelType.TEXT_SMALL, {
609
619
  prompt: "Say hello in exactly 5 words."
610
620
  });
611
621
  if (typeof text !== "string" || text.length === 0) {
612
622
  throw new Error("TEXT_SMALL should return non-empty string");
613
623
  }
614
- import_core2.logger.info(`[Gateway Test] TEXT_SMALL generated: "${text.substring(0, 50)}..."`);
624
+ import_core3.logger.info(`[Gateway Test] TEXT_SMALL generated: "${text.substring(0, 50)}..."`);
615
625
  }
616
626
  },
617
627
  {
618
628
  name: "gateway_test_text_large",
619
629
  fn: async (runtime) => {
620
- const text = await runtime.useModel(import_core2.ModelType.TEXT_LARGE, {
630
+ const text = await runtime.useModel(import_core3.ModelType.TEXT_LARGE, {
621
631
  prompt: "Explain quantum computing in 2 sentences."
622
632
  });
623
633
  if (typeof text !== "string" || text.length === 0) {
624
634
  throw new Error("TEXT_LARGE should return non-empty string");
625
635
  }
626
- import_core2.logger.info(`[Gateway Test] TEXT_LARGE generated: "${text.substring(0, 50)}..."`);
636
+ import_core3.logger.info(`[Gateway Test] TEXT_LARGE generated: "${text.substring(0, 50)}..."`);
627
637
  }
628
638
  },
629
639
  {
630
640
  name: "gateway_test_text_embedding",
631
641
  fn: async (runtime) => {
632
- const embedding = await runtime.useModel(import_core2.ModelType.TEXT_EMBEDDING, {
642
+ const embedding = await runtime.useModel(import_core3.ModelType.TEXT_EMBEDDING, {
633
643
  text: "Hello, world!"
634
644
  });
635
645
  if (!Array.isArray(embedding) || embedding.length === 0) {
636
646
  throw new Error("Embedding should return a non-empty array");
637
647
  }
638
- import_core2.logger.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);
648
+ import_core3.logger.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);
639
649
  }
640
650
  },
641
651
  {
642
652
  name: "gateway_test_object_generation",
643
653
  fn: async (runtime) => {
644
- const result = await runtime.useModel(import_core2.ModelType.OBJECT_SMALL, {
654
+ const result = await runtime.useModel(import_core3.ModelType.OBJECT_SMALL, {
645
655
  prompt: "Return a JSON object with exactly these fields: name (string), age (number), active (boolean)"
646
656
  });
647
657
  if (!result || typeof result !== "object") {
648
658
  throw new Error("Object generation should return an object");
649
659
  }
650
- import_core2.logger.info(
660
+ import_core3.logger.info(
651
661
  `[Gateway Test] Object generated: ${JSON.stringify(result).substring(0, 100)}`
652
662
  );
653
663
  }
@@ -656,7 +666,7 @@ var pluginTests = [
656
666
  name: "gateway_test_streaming",
657
667
  fn: async (runtime) => {
658
668
  const chunks = [];
659
- const result = await runtime.useModel(import_core2.ModelType.TEXT_LARGE, {
669
+ const result = await runtime.useModel(import_core3.ModelType.TEXT_LARGE, {
660
670
  prompt: "Count from 1 to 5, one number per line.",
661
671
  stream: true,
662
672
  onStreamChunk: (chunk) => {
@@ -669,7 +679,7 @@ var pluginTests = [
669
679
  if (chunks.length === 0) {
670
680
  throw new Error("No streaming chunks received");
671
681
  }
672
- import_core2.logger.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);
682
+ import_core3.logger.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);
673
683
  }
674
684
  }
675
685
  ]
@@ -700,25 +710,25 @@ var gatewayPlugin = {
700
710
  initializeGateway(config, runtime);
701
711
  },
702
712
  models: {
703
- [import_core2.ModelType.TEXT_EMBEDDING]: async (runtime, params) => {
713
+ [import_core3.ModelType.TEXT_EMBEDDING]: async (runtime, params) => {
704
714
  return handleTextEmbedding(runtime, params);
705
715
  },
706
- [import_core2.ModelType.TEXT_SMALL]: async (runtime, params) => {
716
+ [import_core3.ModelType.TEXT_SMALL]: async (runtime, params) => {
707
717
  return handleTextSmall(runtime, params);
708
718
  },
709
- [import_core2.ModelType.TEXT_LARGE]: async (runtime, params) => {
719
+ [import_core3.ModelType.TEXT_LARGE]: async (runtime, params) => {
710
720
  return handleTextLarge(runtime, params);
711
721
  },
712
- [import_core2.ModelType.IMAGE]: async (runtime, params) => {
722
+ [import_core3.ModelType.IMAGE]: async (runtime, params) => {
713
723
  return handleImageGeneration(runtime, params);
714
724
  },
715
- [import_core2.ModelType.IMAGE_DESCRIPTION]: async (runtime, params) => {
725
+ [import_core3.ModelType.IMAGE_DESCRIPTION]: async (runtime, params) => {
716
726
  return handleImageDescription(runtime, params);
717
727
  },
718
- [import_core2.ModelType.OBJECT_SMALL]: async (runtime, params) => {
728
+ [import_core3.ModelType.OBJECT_SMALL]: async (runtime, params) => {
719
729
  return handleObjectSmall(runtime, params);
720
730
  },
721
- [import_core2.ModelType.OBJECT_LARGE]: async (runtime, params) => {
731
+ [import_core3.ModelType.OBJECT_LARGE]: async (runtime, params) => {
722
732
  return handleObjectLarge(runtime, params);
723
733
  }
724
734
  },