@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.
- package/dist/browser/index.browser.js +18 -8
- package/dist/browser/index.browser.js.map +4 -4
- package/dist/browser/index.node.js +18 -8
- package/dist/browser/index.node.js.map +4 -4
- package/dist/cjs/index.browser.cjs +30 -20
- package/dist/cjs/index.browser.cjs.map +4 -4
- package/dist/cjs/index.node.cjs +30 -20
- package/dist/cjs/index.node.cjs.map +4 -4
- package/dist/node/index.browser.js +18 -8
- package/dist/node/index.browser.js.map +4 -4
- package/dist/node/index.node.js +18 -8
- package/dist/node/index.node.js.map +4 -4
- package/package.json +13 -3
- package/LICENSE +0 -21
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// index.ts
|
|
2
|
-
import { logger as
|
|
2
|
+
import { logger as logger3, ModelType } from "@elizaos/core";
|
|
3
3
|
|
|
4
4
|
// init.ts
|
|
5
5
|
import { logger } from "@elizaos/core";
|
|
@@ -122,6 +122,9 @@ function initializeGateway(_config, runtime) {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
// models/embedding.ts
|
|
126
|
+
import { logger as logger2, MAX_EMBEDDING_TOKENS } from "@elizaos/core";
|
|
127
|
+
|
|
125
128
|
// providers/client.ts
|
|
126
129
|
var GatewayClient = class {
|
|
127
130
|
config;
|
|
@@ -413,6 +416,13 @@ async function handleTextEmbedding(runtime, params) {
|
|
|
413
416
|
} else {
|
|
414
417
|
text = params.text;
|
|
415
418
|
}
|
|
419
|
+
const maxChars = MAX_EMBEDDING_TOKENS * 4;
|
|
420
|
+
if (text.length > maxChars) {
|
|
421
|
+
logger2.warn(
|
|
422
|
+
`[Vercel] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~${MAX_EMBEDDING_TOKENS} tokens`
|
|
423
|
+
);
|
|
424
|
+
text = text.slice(0, maxChars);
|
|
425
|
+
}
|
|
416
426
|
const model = getEmbeddingModel(runtime);
|
|
417
427
|
const dimensions = getEmbeddingDimensions(runtime);
|
|
418
428
|
return client.createEmbedding({
|
|
@@ -552,7 +562,7 @@ var pluginTests = [
|
|
|
552
562
|
"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is not configured"
|
|
553
563
|
);
|
|
554
564
|
}
|
|
555
|
-
|
|
565
|
+
logger3.info("[Gateway Test] API key is configured");
|
|
556
566
|
}
|
|
557
567
|
},
|
|
558
568
|
{
|
|
@@ -572,7 +582,7 @@ var pluginTests = [
|
|
|
572
582
|
);
|
|
573
583
|
}
|
|
574
584
|
const data = await response.json();
|
|
575
|
-
|
|
585
|
+
logger3.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);
|
|
576
586
|
}
|
|
577
587
|
},
|
|
578
588
|
{
|
|
@@ -584,7 +594,7 @@ var pluginTests = [
|
|
|
584
594
|
if (typeof text !== "string" || text.length === 0) {
|
|
585
595
|
throw new Error("TEXT_SMALL should return non-empty string");
|
|
586
596
|
}
|
|
587
|
-
|
|
597
|
+
logger3.info(`[Gateway Test] TEXT_SMALL generated: "${text.substring(0, 50)}..."`);
|
|
588
598
|
}
|
|
589
599
|
},
|
|
590
600
|
{
|
|
@@ -596,7 +606,7 @@ var pluginTests = [
|
|
|
596
606
|
if (typeof text !== "string" || text.length === 0) {
|
|
597
607
|
throw new Error("TEXT_LARGE should return non-empty string");
|
|
598
608
|
}
|
|
599
|
-
|
|
609
|
+
logger3.info(`[Gateway Test] TEXT_LARGE generated: "${text.substring(0, 50)}..."`);
|
|
600
610
|
}
|
|
601
611
|
},
|
|
602
612
|
{
|
|
@@ -608,7 +618,7 @@ var pluginTests = [
|
|
|
608
618
|
if (!Array.isArray(embedding) || embedding.length === 0) {
|
|
609
619
|
throw new Error("Embedding should return a non-empty array");
|
|
610
620
|
}
|
|
611
|
-
|
|
621
|
+
logger3.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);
|
|
612
622
|
}
|
|
613
623
|
},
|
|
614
624
|
{
|
|
@@ -620,7 +630,7 @@ var pluginTests = [
|
|
|
620
630
|
if (!result || typeof result !== "object") {
|
|
621
631
|
throw new Error("Object generation should return an object");
|
|
622
632
|
}
|
|
623
|
-
|
|
633
|
+
logger3.info(
|
|
624
634
|
`[Gateway Test] Object generated: ${JSON.stringify(result).substring(0, 100)}`
|
|
625
635
|
);
|
|
626
636
|
}
|
|
@@ -642,7 +652,7 @@ var pluginTests = [
|
|
|
642
652
|
if (chunks.length === 0) {
|
|
643
653
|
throw new Error("No streaming chunks received");
|
|
644
654
|
}
|
|
645
|
-
|
|
655
|
+
logger3.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);
|
|
646
656
|
}
|
|
647
657
|
}
|
|
648
658
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../index.ts", "../../init.ts", "../../types/index.ts", "../../utils/config.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
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// index.ts
|
|
2
|
-
import { logger as
|
|
2
|
+
import { logger as logger3, ModelType } from "@elizaos/core";
|
|
3
3
|
|
|
4
4
|
// init.ts
|
|
5
5
|
import { logger } from "@elizaos/core";
|
|
@@ -122,6 +122,9 @@ function initializeGateway(_config, runtime) {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
// models/embedding.ts
|
|
126
|
+
import { logger as logger2, MAX_EMBEDDING_TOKENS } from "@elizaos/core";
|
|
127
|
+
|
|
125
128
|
// providers/client.ts
|
|
126
129
|
var GatewayClient = class {
|
|
127
130
|
config;
|
|
@@ -413,6 +416,13 @@ async function handleTextEmbedding(runtime, params) {
|
|
|
413
416
|
} else {
|
|
414
417
|
text = params.text;
|
|
415
418
|
}
|
|
419
|
+
const maxChars = MAX_EMBEDDING_TOKENS * 4;
|
|
420
|
+
if (text.length > maxChars) {
|
|
421
|
+
logger2.warn(
|
|
422
|
+
`[Vercel] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~${MAX_EMBEDDING_TOKENS} tokens`
|
|
423
|
+
);
|
|
424
|
+
text = text.slice(0, maxChars);
|
|
425
|
+
}
|
|
416
426
|
const model = getEmbeddingModel(runtime);
|
|
417
427
|
const dimensions = getEmbeddingDimensions(runtime);
|
|
418
428
|
return client.createEmbedding({
|
|
@@ -552,7 +562,7 @@ var pluginTests = [
|
|
|
552
562
|
"AI_GATEWAY_API_KEY, AIGATEWAY_API_KEY, or VERCEL_OIDC_TOKEN is not configured"
|
|
553
563
|
);
|
|
554
564
|
}
|
|
555
|
-
|
|
565
|
+
logger3.info("[Gateway Test] API key is configured");
|
|
556
566
|
}
|
|
557
567
|
},
|
|
558
568
|
{
|
|
@@ -572,7 +582,7 @@ var pluginTests = [
|
|
|
572
582
|
);
|
|
573
583
|
}
|
|
574
584
|
const data = await response.json();
|
|
575
|
-
|
|
585
|
+
logger3.info(`[Gateway Test] API connected. ${data.data?.length ?? 0} models available.`);
|
|
576
586
|
}
|
|
577
587
|
},
|
|
578
588
|
{
|
|
@@ -584,7 +594,7 @@ var pluginTests = [
|
|
|
584
594
|
if (typeof text !== "string" || text.length === 0) {
|
|
585
595
|
throw new Error("TEXT_SMALL should return non-empty string");
|
|
586
596
|
}
|
|
587
|
-
|
|
597
|
+
logger3.info(`[Gateway Test] TEXT_SMALL generated: "${text.substring(0, 50)}..."`);
|
|
588
598
|
}
|
|
589
599
|
},
|
|
590
600
|
{
|
|
@@ -596,7 +606,7 @@ var pluginTests = [
|
|
|
596
606
|
if (typeof text !== "string" || text.length === 0) {
|
|
597
607
|
throw new Error("TEXT_LARGE should return non-empty string");
|
|
598
608
|
}
|
|
599
|
-
|
|
609
|
+
logger3.info(`[Gateway Test] TEXT_LARGE generated: "${text.substring(0, 50)}..."`);
|
|
600
610
|
}
|
|
601
611
|
},
|
|
602
612
|
{
|
|
@@ -608,7 +618,7 @@ var pluginTests = [
|
|
|
608
618
|
if (!Array.isArray(embedding) || embedding.length === 0) {
|
|
609
619
|
throw new Error("Embedding should return a non-empty array");
|
|
610
620
|
}
|
|
611
|
-
|
|
621
|
+
logger3.info(`[Gateway Test] Generated embedding with ${embedding.length} dimensions`);
|
|
612
622
|
}
|
|
613
623
|
},
|
|
614
624
|
{
|
|
@@ -620,7 +630,7 @@ var pluginTests = [
|
|
|
620
630
|
if (!result || typeof result !== "object") {
|
|
621
631
|
throw new Error("Object generation should return an object");
|
|
622
632
|
}
|
|
623
|
-
|
|
633
|
+
logger3.info(
|
|
624
634
|
`[Gateway Test] Object generated: ${JSON.stringify(result).substring(0, 100)}`
|
|
625
635
|
);
|
|
626
636
|
}
|
|
@@ -642,7 +652,7 @@ var pluginTests = [
|
|
|
642
652
|
if (chunks.length === 0) {
|
|
643
653
|
throw new Error("No streaming chunks received");
|
|
644
654
|
}
|
|
645
|
-
|
|
655
|
+
logger3.info(`[Gateway Test] Streaming test: ${chunks.length} chunks received`);
|
|
646
656
|
}
|
|
647
657
|
}
|
|
648
658
|
]
|