@elizaos/plugin-openrouter 2.0.3-beta.5 → 2.0.3-beta.7
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 +1053 -0
- package/dist/browser/index.browser.js.map +19 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.node.cjs +1083 -0
- package/dist/cjs/index.node.cjs.map +19 -0
- package/dist/index.d.ts +5 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.node.js +1053 -0
- package/dist/node/index.node.js.map +19 -0
- package/package.json +6 -5
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../plugin.ts", "../../init.ts", "../../utils/config.ts", "../../models/audio.ts", "../../utils/events.ts", "../../models/embedding.ts", "../../models/image.ts", "../../providers/openrouter.ts", "../../models/text.ts", "../../index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import {\n type GenerateTextParams,\n type IAgentRuntime,\n type ImageDescriptionParams,\n type ImageGenerationParams,\n logger,\n ModelType,\n type Plugin,\n type ProcessEnvLike,\n type TextEmbeddingParams,\n type TranscriptionParams,\n} from \"@elizaos/core\";\n\nimport { initializeOpenRouter } from \"./init\";\nimport { handleTranscription } from \"./models/audio\";\nimport { handleTextEmbedding } from \"./models/embedding\";\nimport { handleImageDescription, handleImageGeneration } from \"./models/image\";\nimport {\n handleActionPlanner,\n handleResponseHandler,\n handleTextLarge,\n handleTextMedium,\n handleTextMega,\n handleTextNano,\n handleTextSmall,\n} from \"./models/text\";\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\" || !process.env) {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\nconst TEXT_NANO_MODEL_TYPE = ModelType.TEXT_NANO as string;\nconst TEXT_MEDIUM_MODEL_TYPE = ModelType.TEXT_MEDIUM as string;\nconst TEXT_MEGA_MODEL_TYPE = ModelType.TEXT_MEGA as string;\nconst RESPONSE_HANDLER_MODEL_TYPE = ModelType.RESPONSE_HANDLER as string;\nconst ACTION_PLANNER_MODEL_TYPE = ModelType.ACTION_PLANNER as string;\n\nexport const openrouterPlugin: Plugin = {\n name: \"openrouter\",\n description: \"OpenRouter multi-model AI gateway plugin\",\n autoEnable: {\n envKeys: [\"OPENROUTER_API_KEY\"],\n },\n\n config: {\n OPENROUTER_API_KEY: env.OPENROUTER_API_KEY ?? null,\n OPENROUTER_BASE_URL: env.OPENROUTER_BASE_URL ?? null,\n OPENROUTER_NANO_MODEL: env.OPENROUTER_NANO_MODEL ?? null,\n OPENROUTER_MEDIUM_MODEL: env.OPENROUTER_MEDIUM_MODEL ?? null,\n OPENROUTER_SMALL_MODEL: env.OPENROUTER_SMALL_MODEL ?? null,\n OPENROUTER_LARGE_MODEL: env.OPENROUTER_LARGE_MODEL ?? null,\n OPENROUTER_MEGA_MODEL: env.OPENROUTER_MEGA_MODEL ?? null,\n OPENROUTER_RESPONSE_HANDLER_MODEL: env.OPENROUTER_RESPONSE_HANDLER_MODEL ?? null,\n OPENROUTER_SHOULD_RESPOND_MODEL: env.OPENROUTER_SHOULD_RESPOND_MODEL ?? null,\n OPENROUTER_ACTION_PLANNER_MODEL: env.OPENROUTER_ACTION_PLANNER_MODEL ?? null,\n OPENROUTER_PLANNER_MODEL: env.OPENROUTER_PLANNER_MODEL ?? null,\n OPENROUTER_IMAGE_MODEL: env.OPENROUTER_IMAGE_MODEL ?? null,\n OPENROUTER_IMAGE_GENERATION_MODEL: env.OPENROUTER_IMAGE_GENERATION_MODEL ?? null,\n OPENROUTER_EMBEDDING_MODEL: env.OPENROUTER_EMBEDDING_MODEL ?? null,\n OPENROUTER_TRANSCRIPTION_MODEL: env.OPENROUTER_TRANSCRIPTION_MODEL ?? null,\n OPENROUTER_EMBEDDING_DIMENSIONS: env.OPENROUTER_EMBEDDING_DIMENSIONS ?? null,\n OPENROUTER_AUTO_CLEANUP_IMAGES: env.OPENROUTER_AUTO_CLEANUP_IMAGES ?? null,\n NANO_MODEL: env.NANO_MODEL ?? null,\n MEDIUM_MODEL: env.MEDIUM_MODEL ?? null,\n SMALL_MODEL: env.SMALL_MODEL ?? null,\n LARGE_MODEL: env.LARGE_MODEL ?? null,\n MEGA_MODEL: env.MEGA_MODEL ?? null,\n RESPONSE_HANDLER_MODEL: env.RESPONSE_HANDLER_MODEL ?? null,\n SHOULD_RESPOND_MODEL: env.SHOULD_RESPOND_MODEL ?? null,\n ACTION_PLANNER_MODEL: env.ACTION_PLANNER_MODEL ?? null,\n PLANNER_MODEL: env.PLANNER_MODEL ?? null,\n IMAGE_MODEL: env.IMAGE_MODEL ?? null,\n IMAGE_GENERATION_MODEL: env.IMAGE_GENERATION_MODEL ?? null,\n EMBEDDING_MODEL: env.EMBEDDING_MODEL ?? null,\n TRANSCRIPTION_MODEL: env.TRANSCRIPTION_MODEL ?? null,\n EMBEDDING_DIMENSIONS: env.EMBEDDING_DIMENSIONS ?? null,\n },\n\n async init(config: Record<string, unknown>, runtime: IAgentRuntime) {\n initializeOpenRouter(config, runtime);\n },\n\n models: {\n [TEXT_NANO_MODEL_TYPE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleTextNano(runtime, params);\n },\n\n [ModelType.TEXT_SMALL]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleTextSmall(runtime, params);\n },\n\n [TEXT_MEDIUM_MODEL_TYPE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleTextMedium(runtime, params);\n },\n\n [ModelType.TEXT_LARGE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleTextLarge(runtime, params);\n },\n\n [TEXT_MEGA_MODEL_TYPE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleTextMega(runtime, params);\n },\n\n [RESPONSE_HANDLER_MODEL_TYPE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleResponseHandler(runtime, params);\n },\n\n [ACTION_PLANNER_MODEL_TYPE]: async (runtime: IAgentRuntime, params: GenerateTextParams) => {\n return handleActionPlanner(runtime, params);\n },\n\n [ModelType.IMAGE_DESCRIPTION]: async (\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n ) => {\n return handleImageDescription(runtime, params);\n },\n\n [ModelType.IMAGE]: async (runtime: IAgentRuntime, params: ImageGenerationParams) => {\n const result = await handleImageGeneration(runtime, params);\n return [{ url: result.imageUrl }];\n },\n\n [ModelType.TEXT_EMBEDDING]: async (\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n ) => {\n return handleTextEmbedding(runtime, params);\n },\n\n [ModelType.TRANSCRIPTION]: async (\n runtime: IAgentRuntime,\n params: TranscriptionParams | Buffer | Blob | File | string\n ) => {\n return handleTranscription(runtime, params);\n },\n },\n\n tests: [\n {\n name: \"openrouter_plugin_tests\",\n tests: [\n {\n name: \"openrouter_test_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const text = await runModel(ModelType.TEXT_SMALL, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_small\");\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_small: ${message}`);\n throw error;\n }\n },\n },\n {\n name: \"openrouter_test_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const text = await runModel(ModelType.TEXT_LARGE, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_large\");\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_large: ${message}`);\n throw error;\n }\n },\n },\n {\n name: \"openrouter_test_structured_output_via_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const result = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"Create a simple JSON object with a message field saying hello\",\n responseSchema: {\n type: \"object\",\n properties: { message: { type: \"string\" } },\n required: [\"message\"],\n },\n });\n logger.log({ result }, \"Generated structured output via TEXT_LARGE\");\n if (!result) {\n throw new Error(\"Failed to generate structured output\");\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_structured_output_via_text_large: ${message}`);\n throw error;\n }\n },\n },\n {\n name: \"openrouter_test_text_embedding\",\n fn: async (runtime: IAgentRuntime) => {\n try {\n const runModel = runtime.useModel.bind(runtime);\n const embedding = await runModel(ModelType.TEXT_EMBEDDING, {\n text: \"Hello, world!\",\n });\n logger.log({ embedding }, \"embedding\");\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in test_text_embedding: ${message}`);\n throw error;\n }\n },\n },\n ],\n },\n ],\n};\n\nexport default openrouterPlugin;\n",
|
|
6
|
+
"import { type IAgentRuntime, logger } from \"@elizaos/core\";\nimport { getApiKey, getBaseURL } from \"./utils/config\";\n\n(globalThis as Record<string, unknown>).AI_SDK_LOG_WARNINGS ??= false;\n\nexport function initializeOpenRouter(\n _config: Record<string, unknown>,\n runtime: IAgentRuntime\n): void {\n (async () => {\n try {\n const isBrowser =\n typeof globalThis !== \"undefined\" && (globalThis as Record<string, unknown>).document;\n if (isBrowser) {\n return;\n }\n\n if (!getApiKey(runtime)) {\n logger.warn(\n \"OPENROUTER_API_KEY is not set in environment - OpenRouter functionality will be limited\"\n );\n return;\n }\n\n const baseURL = getBaseURL(runtime);\n const response = await fetch(`${baseURL}/models`, {\n headers: { Authorization: `Bearer ${getApiKey(runtime)}` },\n });\n\n if (!response.ok) {\n logger.warn(`OpenRouter API key validation failed: ${response.statusText}`);\n } else {\n logger.log(\"OpenRouter API key validated successfully\");\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.warn(`Error validating OpenRouter API key: ${message}`);\n }\n })();\n}\n",
|
|
7
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\n\nexport const DEFAULT_BASE_URL = \"https://openrouter.ai/api/v1\";\nexport const DEFAULT_SMALL_MODEL = \"google/gemini-2.5-flash-lite\";\nexport const DEFAULT_LARGE_MODEL = \"google/gemini-2.5-flash\";\nexport const DEFAULT_IMAGE_MODEL = \"x-ai/grok-2-vision-1212\";\nexport const DEFAULT_IMAGE_GENERATION_MODEL = \"google/gemini-2.5-flash-image-preview\";\nexport const DEFAULT_EMBEDDING_MODEL = \"openai/text-embedding-3-small\";\nexport const DEFAULT_TRANSCRIPTION_MODEL = \"openai/whisper-large-v3\";\nexport const DEFAULT_EMBEDDING_DIMENSIONS = 1536;\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\" || !process.env) {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = getSetting(runtime, \"OPENROUTER_BROWSER_BASE_URL\");\n if (\n typeof globalThis !== \"undefined\" &&\n (globalThis as Record<string, unknown>).document &&\n browserURL\n ) {\n return browserURL;\n }\n return getSetting(runtime, \"OPENROUTER_BASE_URL\", DEFAULT_BASE_URL) || DEFAULT_BASE_URL;\n}\n\nexport function getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, \"OPENROUTER_API_KEY\");\n}\n\nexport function getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_SMALL_MODEL\") ??\n getSetting(runtime, \"SMALL_MODEL\", DEFAULT_SMALL_MODEL) ??\n DEFAULT_SMALL_MODEL\n );\n}\n\nexport function getNanoModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_NANO_MODEL\") ??\n getSetting(runtime, \"NANO_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_MEDIUM_MODEL\") ??\n getSetting(runtime, \"MEDIUM_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_LARGE_MODEL\") ??\n getSetting(runtime, \"LARGE_MODEL\", DEFAULT_LARGE_MODEL) ??\n DEFAULT_LARGE_MODEL\n );\n}\n\nexport function getMegaModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_MEGA_MODEL\") ??\n getSetting(runtime, \"MEGA_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"OPENROUTER_SHOULD_RESPOND_MODEL\") ??\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ??\n getNanoModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"OPENROUTER_PLANNER_MODEL\") ??\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"PLANNER_MODEL\") ??\n getMediumModel(runtime)\n );\n}\n\nexport function getImageModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_IMAGE_MODEL\") ??\n getSetting(runtime, \"IMAGE_MODEL\", DEFAULT_IMAGE_MODEL) ??\n DEFAULT_IMAGE_MODEL\n );\n}\n\nexport function getImageGenerationModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_IMAGE_GENERATION_MODEL\") ??\n getSetting(runtime, \"IMAGE_GENERATION_MODEL\", DEFAULT_IMAGE_GENERATION_MODEL) ??\n DEFAULT_IMAGE_GENERATION_MODEL\n );\n}\n\nexport function getEmbeddingModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_EMBEDDING_MODEL\") ??\n getSetting(runtime, \"EMBEDDING_MODEL\", DEFAULT_EMBEDDING_MODEL) ??\n DEFAULT_EMBEDDING_MODEL\n );\n}\n\nexport function getTranscriptionModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"OPENROUTER_TRANSCRIPTION_MODEL\") ??\n getSetting(runtime, \"TRANSCRIPTION_MODEL\", DEFAULT_TRANSCRIPTION_MODEL) ??\n DEFAULT_TRANSCRIPTION_MODEL\n );\n}\n\nexport function getEmbeddingDimensions(runtime: IAgentRuntime): number {\n const setting =\n getSetting(runtime, \"OPENROUTER_EMBEDDING_DIMENSIONS\") ??\n getSetting(runtime, \"EMBEDDING_DIMENSIONS\");\n return setting ? parseInt(setting, 10) : DEFAULT_EMBEDDING_DIMENSIONS;\n}\n\nexport function shouldAutoCleanupImages(runtime: IAgentRuntime): boolean {\n const setting = getSetting(runtime, \"OPENROUTER_AUTO_CLEANUP_IMAGES\", \"false\");\n return setting?.toLowerCase() === \"true\";\n}\n",
|
|
8
|
+
"import type { TranscriptionParams as CoreTranscriptionParams, IAgentRuntime } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\n\nimport { getApiKey, getBaseURL, getTranscriptionModel } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\n\ntype AudioInput = Blob | File | Buffer;\n\ninterface OpenRouterTranscriptionParams {\n audio: AudioInput;\n format?: string;\n language?: string;\n mimeType?: string;\n model?: string;\n temperature?: number;\n}\n\ntype TranscriptionInput =\n | AudioInput\n | CoreTranscriptionParams\n | OpenRouterTranscriptionParams\n | string;\n\ninterface OpenRouterTranscriptionResponse {\n text?: string;\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n };\n}\n\nfunction isBlobOrFile(value: unknown): value is Blob | File {\n if (typeof Blob !== \"undefined\" && value instanceof Blob) return true;\n return typeof File !== \"undefined\" && value instanceof File;\n}\n\nfunction isBuffer(value: unknown): value is Buffer {\n return typeof Buffer !== \"undefined\" && Buffer.isBuffer(value);\n}\n\nfunction isCoreTranscriptionParams(value: unknown): value is CoreTranscriptionParams {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"audioUrl\" in value &&\n typeof (value as CoreTranscriptionParams).audioUrl === \"string\"\n );\n}\n\nfunction isOpenRouterTranscriptionParams(value: unknown): value is OpenRouterTranscriptionParams {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"audio\" in value &&\n (isBlobOrFile((value as OpenRouterTranscriptionParams).audio) ||\n isBuffer((value as OpenRouterTranscriptionParams).audio))\n );\n}\n\nfunction audioFormatFromMimeType(mimeType: string | undefined): string | null {\n if (!mimeType?.startsWith(\"audio/\")) return null;\n const subtype = mimeType.slice(\"audio/\".length).split(\";\")[0]?.trim();\n if (!subtype) return null;\n if (subtype === \"mpeg\") return \"mp3\";\n if (subtype === \"x-wav\") return \"wav\";\n return subtype;\n}\n\nfunction audioFormatFromUrl(url: string): string | null {\n const pathname = new URL(url).pathname;\n const match = pathname.match(/\\.([a-z0-9]+)$/i);\n return match?.[1]?.toLowerCase() ?? null;\n}\n\nfunction detectBufferFormat(buffer: Buffer): string {\n if (buffer.length >= 12 && buffer.toString(\"ascii\", 0, 4) === \"RIFF\") {\n return \"wav\";\n }\n if (buffer.length >= 4 && buffer.toString(\"ascii\", 0, 4) === \"OggS\") {\n return \"ogg\";\n }\n if (buffer.length >= 4 && buffer.toString(\"ascii\", 0, 4) === \"fLaC\") {\n return \"flac\";\n }\n if (buffer.length >= 3 && buffer.toString(\"ascii\", 0, 3) === \"ID3\") {\n return \"mp3\";\n }\n if (buffer.length >= 2 && buffer[0] === 0xff && ((buffer[1] ?? 0) & 0xe0) === 0xe0) {\n return \"mp3\";\n }\n return \"webm\";\n}\n\nfunction validateAudioUrl(url: string): string {\n const parsed = new URL(url);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"TRANSCRIPTION audioUrl must use http or https\");\n }\n return parsed.toString();\n}\n\nasync function fetchAudioFromUrl(url: string): Promise<{\n base64: string;\n format: string;\n}> {\n const audioUrl = validateAudioUrl(url);\n // @trajectory-allow Fetches caller-provided audio bytes; no model inference happens here.\n const response = await fetch(audioUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch audio from URL: ${audioUrl}`);\n }\n const bytes = Buffer.from(await response.arrayBuffer());\n return {\n base64: bytes.toString(\"base64\"),\n format:\n audioFormatFromMimeType(response.headers.get(\"content-type\") ?? undefined) ??\n audioFormatFromUrl(audioUrl) ??\n detectBufferFormat(bytes),\n };\n}\n\nasync function encodeAudio(input: AudioInput): Promise<{\n base64: string;\n format: string;\n}> {\n if (isBuffer(input)) {\n return {\n base64: input.toString(\"base64\"),\n format: detectBufferFormat(input),\n };\n }\n\n const bytes = Buffer.from(await input.arrayBuffer());\n return {\n base64: bytes.toString(\"base64\"),\n format:\n audioFormatFromMimeType(input.type) ??\n (typeof File !== \"undefined\" && input instanceof File\n ? audioFormatFromUrl(`https://local/${input.name}`)\n : null) ??\n detectBufferFormat(bytes),\n };\n}\n\nasync function normalizeTranscriptionInput(input: TranscriptionInput): Promise<{\n audio: { data: string; format: string };\n language?: string;\n model?: string;\n temperature?: number;\n}> {\n if (typeof input === \"string\") {\n const audio = await fetchAudioFromUrl(input);\n return { audio: { data: audio.base64, format: audio.format } };\n }\n if (isBlobOrFile(input) || isBuffer(input)) {\n const audio = await encodeAudio(input);\n return { audio: { data: audio.base64, format: audio.format } };\n }\n if (isCoreTranscriptionParams(input)) {\n const audio = await fetchAudioFromUrl(input.audioUrl);\n return { audio: { data: audio.base64, format: audio.format } };\n }\n if (isOpenRouterTranscriptionParams(input)) {\n const audio = await encodeAudio(input.audio);\n return {\n audio: {\n data: audio.base64,\n format: input.format ?? audioFormatFromMimeType(input.mimeType) ?? audio.format,\n },\n ...(input.language ? { language: input.language } : {}),\n ...(input.model ? { model: input.model } : {}),\n ...(input.temperature !== undefined ? { temperature: input.temperature } : {}),\n };\n }\n\n throw new Error(\"TRANSCRIPTION expects Buffer, Blob, File, URL string, or TranscriptionParams\");\n}\n\nexport async function handleTranscription(\n runtime: IAgentRuntime,\n input: TranscriptionInput\n): Promise<string> {\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n throw new Error(\"OPENROUTER_API_KEY is not set\");\n }\n\n const normalized = await normalizeTranscriptionInput(input);\n const modelName = normalized.model ?? getTranscriptionModel(runtime);\n const baseURL = getBaseURL(runtime);\n\n logger.debug(`[OpenRouter] Using TRANSCRIPTION model: ${modelName}`);\n\n // @trajectory-allow Audio bytes are caller-provided transcription input, not generated text.\n const response = await fetch(`${baseURL}/audio/transcriptions`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n model: modelName,\n input_audio: normalized.audio,\n ...(normalized.language ? { language: normalized.language } : {}),\n ...(normalized.temperature !== undefined ? { temperature: normalized.temperature } : {}),\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => \"Unknown error\");\n throw new Error(\n `OpenRouter transcription failed: ${response.status} ${response.statusText} - ${errorText}`\n );\n }\n\n const result = (await response.json()) as OpenRouterTranscriptionResponse;\n if (typeof result.text !== \"string\") {\n throw new Error(\"OpenRouter transcription response did not include text\");\n }\n\n if (result.usage) {\n emitModelUsageEvent(\n runtime,\n ModelType.TRANSCRIPTION,\n \"audio transcription\",\n {\n inputTokens: result.usage.input_tokens ?? 0,\n outputTokens: result.usage.output_tokens ?? 0,\n totalTokens: result.usage.total_tokens ?? 0,\n },\n modelName\n );\n }\n\n return result.text;\n}\n",
|
|
9
|
+
"import type { EventPayload, IAgentRuntime, ModelTypeName } from \"@elizaos/core\";\nimport { EventType } from \"@elizaos/core\";\n\ninterface AIUsage {\n inputTokens?: number;\n outputTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n}\n\nexport type NormalizedModelUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n};\n\nexport function emitModelUsageEvent(\n runtime: IAgentRuntime,\n modelType: ModelTypeName,\n _prompt: string,\n usage: AIUsage,\n modelName?: string,\n modelLabel?: string\n): NormalizedModelUsage {\n const inputTokens = usage.inputTokens ?? usage.promptTokens ?? 0;\n const outputTokens = usage.outputTokens ?? usage.completionTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n const model = modelName?.trim() || modelLabel?.trim() || String(modelType);\n\n runtime.emitEvent(EventType.MODEL_USED, {\n runtime,\n source: \"openrouter\",\n provider: \"openrouter\",\n type: modelType,\n model,\n modelName: model,\n modelLabel: modelLabel ?? String(modelType),\n tokens: {\n prompt: inputTokens,\n completion: outputTokens,\n total: totalTokens,\n },\n } as EventPayload);\n\n return {\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens,\n };\n}\n",
|
|
10
|
+
"import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { logger, ModelType, VECTOR_DIMS } from \"@elizaos/core\";\n\nimport { getApiKey, getBaseURL, getEmbeddingModel, getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const embeddingModelName = getEmbeddingModel(runtime);\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"OPENROUTER_EMBEDDING_DIMENSIONS\") ??\n getSetting(runtime, \"EMBEDDING_DIMENSIONS\") ??\n \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n if (params === null) {\n const testVector = Array(embeddingDimension).fill(0) as number[];\n testVector[0] = 0.1;\n return testVector;\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && typeof params.text === \"string\") {\n text = params.text;\n } else {\n const errorMsg = \"Invalid input format for embedding\";\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n if (!text.trim()) {\n const errorMsg = \"Empty text for embedding\";\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n // Truncate to stay within embedding model token limits (~4 chars per token)\n const maxChars = 8_000 * 4;\n if (text.length > maxChars) {\n logger.warn(\n `[OpenRouter] Embedding input too long (~${Math.ceil(text.length / 4)} tokens), truncating to ~8000 tokens`\n );\n text = text.slice(0, maxChars);\n }\n\n const apiKey = getApiKey(runtime);\n if (!apiKey) {\n const errorMsg = \"OPENROUTER_API_KEY is not set\";\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n const baseURL = getBaseURL(runtime);\n\n try {\n // @trajectory-allow Embeddings return numeric retrieval vectors, not generative LLM text.\n const response = await fetch(`${baseURL}/embeddings`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n \"HTTP-Referer\": getSetting(runtime, \"OPENROUTER_HTTP_REFERER\") || \"\",\n \"X-Title\": getSetting(runtime, \"OPENROUTER_X_TITLE\") || \"ElizaOS\",\n },\n body: JSON.stringify({\n model: embeddingModelName,\n input: text,\n }),\n });\n\n if (!response.ok) {\n logger.error(`OpenRouter API error: ${response.status} - ${response.statusText}`);\n throw new Error(`OpenRouter API error: ${response.status} - ${response.statusText}`);\n }\n\n const data = (await response.json()) as {\n data?: Array<{ embedding?: number[] }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n const embedding = data.data?.[0]?.embedding;\n if (!embedding) {\n logger.error(\"API returned invalid structure\");\n throw new Error(\"API returned invalid structure\");\n }\n\n if (!Array.isArray(embedding) || embedding.length !== embeddingDimension) {\n const errorMsg = `Embedding length ${embedding.length} does not match configured dimension ${embeddingDimension}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, text, usage, embeddingModelName);\n }\n\n return embedding;\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error generating embedding: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n}\n",
|
|
11
|
+
"import type {\n IAgentRuntime,\n ImageDescriptionParams,\n ImageDescriptionResult,\n ImageGenerationParams,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { generateText, type LanguageModel } from \"ai\";\n\nimport { createOpenRouterProvider } from \"../providers\";\nimport { getImageGenerationModel, getImageModel } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\n\nconst DEFAULT_IMAGE_DESCRIPTION_PROMPT =\n \"Analyze this image and respond with:\\nTitle: <short title>\\nDescription: <detailed description>\";\n\nfunction parseTitle(content: string): string {\n const titleMatch = content.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n if (titleMatch?.[1]) {\n return titleMatch[1].trim();\n }\n\n const firstLine = content\n .split(\"\\n\")\n .map((line) => line.trim())\n .find((line) => line.length > 0);\n\n return firstLine ? firstLine.slice(0, 100) : \"Image Analysis\";\n}\n\nfunction parseDescription(content: string): string {\n const withoutTitle = content.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, \"\").trim();\n const withoutDescriptionLabel = withoutTitle.replace(/^description[:\\s]+/i, \"\").trim();\n return withoutDescriptionLabel.length > 0 ? withoutDescriptionLabel : content.trim();\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n): Promise<ImageDescriptionResult> {\n const openrouter = createOpenRouterProvider(runtime);\n const modelName = getImageModel(runtime);\n\n const imageUrl = typeof params === \"string\" ? params : params.imageUrl;\n const prompt =\n typeof params === \"string\"\n ? DEFAULT_IMAGE_DESCRIPTION_PROMPT\n : (params.prompt ?? DEFAULT_IMAGE_DESCRIPTION_PROMPT);\n\n if (!imageUrl || imageUrl.trim().length === 0) {\n throw new Error(\"[OpenRouter] IMAGE_DESCRIPTION requires a valid image URL.\");\n }\n\n try {\n const generateParams = {\n model: openrouter.chat(modelName) as LanguageModel,\n messages: [\n {\n role: \"user\" as const,\n content: [\n { type: \"text\" as const, text: prompt },\n { type: \"image\" as const, image: imageUrl },\n ],\n },\n ],\n };\n\n const response = await generateText(generateParams);\n\n if (response.usage) {\n emitModelUsageEvent(runtime, ModelType.IMAGE_DESCRIPTION, prompt, response.usage, modelName);\n }\n\n return {\n title: parseTitle(response.text),\n description: parseDescription(response.text),\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error describing image: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n}\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n): Promise<{ imageUrl: string; caption?: string }> {\n const openrouter = createOpenRouterProvider(runtime);\n const modelName = getImageGenerationModel(runtime);\n const prompt = params.prompt?.trim();\n\n if (!prompt) {\n throw new Error(\"[OpenRouter] IMAGE generation requires a non-empty prompt.\");\n }\n\n try {\n const generateParams = {\n model: openrouter.chat(modelName) as LanguageModel,\n prompt: `Generate an image: ${prompt}`,\n };\n\n const response = await generateText(generateParams);\n\n if (response.usage) {\n emitModelUsageEvent(runtime, ModelType.IMAGE, params.prompt, response.usage, modelName);\n }\n\n return {\n imageUrl: response.text,\n caption: prompt,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error generating image: ${message}`);\n throw error instanceof Error ? error : new Error(message);\n }\n}\n",
|
|
12
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { createOpenRouter } from \"@openrouter/ai-sdk-provider\";\nimport { getApiKey, getBaseURL } from \"../utils/config\";\n\nexport function createOpenRouterProvider(runtime: IAgentRuntime) {\n const apiKey = getApiKey(runtime);\n const isBrowser =\n typeof globalThis !== \"undefined\" && (globalThis as Record<string, unknown>).document;\n const baseURL = getBaseURL(runtime);\n\n return createOpenRouter({\n apiKey: isBrowser ? undefined : apiKey,\n baseURL,\n });\n}\n",
|
|
13
|
+
"import type {\n GenerateTextParams,\n IAgentRuntime,\n ModelTypeName,\n TextStreamResult,\n} from \"@elizaos/core\";\nimport {\n buildCanonicalSystemPrompt,\n dropDuplicateLeadingSystemMessage,\n ModelType,\n resolveEffectiveSystemPrompt,\n} from \"@elizaos/core\";\nimport {\n generateText,\n type JSONSchema7,\n jsonSchema,\n type LanguageModel,\n type ModelMessage,\n streamText,\n type ToolChoice,\n type ToolSet,\n type UserContent,\n} from \"ai\";\n\nimport { createOpenRouterProvider } from \"../providers\";\nimport {\n getActionPlannerModel,\n getLargeModel,\n getMediumModel,\n getMegaModel,\n getNanoModel,\n getResponseHandlerModel,\n getSmallModel,\n} from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\n\nconst RESPONSES_ROUTED_PREFIXES = [\"openai/\", \"anthropic/\"] as const;\nconst NO_SAMPLING_MODEL_PATTERNS = [\"o1\", \"o3\", \"o4\", \"gpt-5\", \"gpt-5-mini\"] as const;\nconst TEXT_NANO_MODEL_TYPE = ModelType.TEXT_NANO as ModelTypeName;\nconst TEXT_MEDIUM_MODEL_TYPE = ModelType.TEXT_MEDIUM as ModelTypeName;\nconst TEXT_MEGA_MODEL_TYPE = ModelType.TEXT_MEGA as ModelTypeName;\nconst RESPONSE_HANDLER_MODEL_TYPE = ModelType.RESPONSE_HANDLER as ModelTypeName;\nconst ACTION_PLANNER_MODEL_TYPE = ModelType.ACTION_PLANNER as ModelTypeName;\ntype ChatAttachment = {\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n};\n\ninterface OpenRouterPromptCacheOptions {\n promptCacheKey?: string;\n}\n\ntype GenerateTextParamsWithAttachments = GenerateTextParams & {\n attachments?: ChatAttachment[];\n messages?: ModelMessage[];\n tools?: ToolSet;\n toolChoice?: ToolChoice<ToolSet>;\n responseSchema?: unknown;\n providerOptions?: Record<string, object | unknown> & {\n openrouter?: OpenRouterPromptCacheOptions;\n };\n};\n\ntype NativeOutput = NonNullable<Parameters<typeof generateText<ToolSet>>[0][\"output\"]>;\ntype NativeGenerateTextParams = Parameters<typeof generateText<ToolSet, NativeOutput>>[0];\ntype NativeStreamTextParams = Parameters<typeof streamText<ToolSet, NativeOutput>>[0];\ntype NativePrompt =\n | { prompt: string; messages?: never }\n | { messages: ModelMessage[]; prompt?: never };\ntype NativeTextParams = Omit<NativeGenerateTextParams, \"messages\" | \"prompt\"> &\n Omit<NativeStreamTextParams, \"messages\" | \"prompt\"> &\n NativePrompt;\n\ntype NormalizedUsage = {\n promptTokens: number;\n completionTokens: number;\n totalTokens: number;\n cacheReadInputTokens?: number;\n cacheCreationInputTokens?: number;\n};\n\ntype NativeGenerateTextResult = {\n text: string;\n toolCalls?: unknown[];\n finishReason?: string;\n usage?: NormalizedUsage;\n};\ntype NativeTextModelResult = string & NativeGenerateTextResult;\n\nfunction buildUserContent(\n params: GenerateTextParamsWithAttachments,\n options: { includePrompt?: boolean } = { includePrompt: true }\n): UserContent {\n const content: Array<\n | { type: \"text\"; text: string }\n | {\n type: \"file\";\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n }\n > = [];\n\n if (\n options.includePrompt !== false &&\n typeof params.prompt === \"string\" &&\n params.prompt.length > 0\n ) {\n content.push({ type: \"text\", text: params.prompt });\n }\n\n for (const attachment of params.attachments ?? []) {\n content.push({\n type: \"file\",\n data: attachment.data,\n mediaType: attachment.mediaType,\n ...(attachment.filename ? { filename: attachment.filename } : {}),\n });\n }\n\n return content;\n}\n\nfunction appendUserContentToMessages(\n messages: ModelMessage[],\n extraContent: UserContent\n): ModelMessage[] {\n if (extraContent.length === 0) {\n return messages;\n }\n\n const lastUserIndex = messages.findLastIndex((message) => message.role === \"user\");\n if (lastUserIndex === -1) {\n return [...messages, { role: \"user\" as const, content: extraContent }];\n }\n\n const nextMessages = [...messages];\n const userMessage = nextMessages[lastUserIndex];\n if (!userMessage) {\n return messages;\n }\n const existingContent = userMessage.content;\n const content = [\n ...(typeof existingContent === \"string\"\n ? [{ type: \"text\" as const, text: existingContent }]\n : Array.isArray(existingContent)\n ? existingContent\n : []),\n ...extraContent,\n ];\n\n nextMessages[lastUserIndex] = {\n ...userMessage,\n content,\n } as ModelMessage;\n\n return nextMessages;\n}\n\nfunction textFromMessages(messages: ModelMessage[] | undefined): string {\n if (!messages || messages.length === 0) return \"\";\n return messages\n .map((message) => {\n const content = message.content;\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .map((part) =>\n part && typeof part === \"object\" && \"text\" in part && typeof part.text === \"string\"\n ? part.text\n : \"\"\n )\n .filter(Boolean)\n .join(\"\\n\");\n })\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction supportsSamplingParameters(modelName: string): boolean {\n const lowerModelName = modelName.toLowerCase();\n\n if (RESPONSES_ROUTED_PREFIXES.some((prefix) => lowerModelName.startsWith(prefix))) {\n return false;\n }\n\n return !NO_SAMPLING_MODEL_PATTERNS.some((pattern) => lowerModelName.includes(pattern));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction readToolSet(value: GenerateTextParams[\"tools\"]): ToolSet | undefined {\n if (!value) {\n return undefined;\n }\n\n // The runtime exposes tools as ordered ToolDefinition arrays. The AI SDK\n // expects a ToolSet keyed by provider-visible tool names; passing the array\n // through gives providers function names like \"0\", which Google rejects.\n const isArr = Array.isArray(value);\n const entries: Array<[string, unknown]> = isArr\n ? (value as unknown[]).map((v, i) => [String(i), v] as [string, unknown])\n : Object.entries(value as Record<string, unknown>);\n\n const namedKeys = new Set<string>();\n for (const [, rawTool] of entries) {\n if (isRecord(rawTool) && typeof rawTool.name === \"string\" && rawTool.name) {\n namedKeys.add(rawTool.name);\n }\n }\n\n const tools: Record<string, unknown> = {};\n let sawNamedTool = false;\n for (const [origKey, rawTool] of entries) {\n if (!isRecord(rawTool)) {\n continue;\n }\n const functionTool = isRecord(rawTool.function) ? rawTool.function : undefined;\n const name =\n typeof rawTool.name === \"string\" && rawTool.name\n ? rawTool.name\n : typeof functionTool?.name === \"string\" && functionTool.name\n ? functionTool.name\n : undefined;\n if (name) {\n sawNamedTool = true;\n const schema = isRecord(rawTool.parameters)\n ? (rawTool.parameters as JSONSchema7)\n : isRecord(functionTool?.parameters)\n ? (functionTool.parameters as JSONSchema7)\n : isRecord(rawTool.input_schema)\n ? (rawTool.input_schema as JSONSchema7)\n : ({ type: \"object\" } satisfies JSONSchema7);\n const description =\n typeof rawTool.description === \"string\"\n ? rawTool.description\n : typeof functionTool?.description === \"string\"\n ? functionTool.description\n : undefined;\n tools[name] = {\n ...(description ? { description } : {}),\n inputSchema: jsonSchema(schema),\n };\n } else if (!isArr && !namedKeys.has(origKey)) {\n tools[origKey] = rawTool;\n }\n }\n\n if (sawNamedTool) {\n return Object.keys(tools).length > 0 ? (tools as ToolSet) : undefined;\n }\n return !isArr && isRecord(value) ? (value as ToolSet) : undefined;\n}\n\nfunction readToolChoice(value: GenerateTextParams[\"toolChoice\"]): ToolChoice<ToolSet> | undefined {\n if (!value) {\n return undefined;\n }\n if (typeof value === \"string\" && (value === \"auto\" || value === \"none\" || value === \"required\")) {\n return value;\n }\n if (!isRecord(value)) {\n return undefined;\n }\n const choice = value as Record<string, unknown>;\n if (choice.type === \"tool\" && typeof choice.name === \"string\") {\n return { type: \"tool\", toolName: choice.name };\n }\n if (choice.type === \"function\" && isRecord(choice.function)) {\n const name = choice.function.name;\n return typeof name === \"string\" ? { type: \"tool\", toolName: name } : undefined;\n }\n return typeof choice.name === \"string\" ? { type: \"tool\", toolName: choice.name } : undefined;\n}\n\nfunction buildStructuredOutput(responseSchema: unknown): NativeOutput {\n if (\n responseSchema &&\n typeof responseSchema === \"object\" &&\n \"responseFormat\" in responseSchema &&\n \"parseCompleteOutput\" in responseSchema\n ) {\n return responseSchema as NativeOutput;\n }\n\n const schemaOptions =\n responseSchema && typeof responseSchema === \"object\" && \"schema\" in responseSchema\n ? (responseSchema as { schema: unknown; name?: string; description?: string })\n : { schema: responseSchema };\n\n return {\n name: \"object\",\n responseFormat: Promise.resolve({\n type: \"json\" as const,\n schema: schemaOptions.schema as JSONSchema7,\n ...(schemaOptions.name ? { name: schemaOptions.name } : {}),\n ...(schemaOptions.description ? { description: schemaOptions.description } : {}),\n }),\n async parseCompleteOutput({ text }: { text: string }) {\n return JSON.parse(text);\n },\n async parsePartialOutput(): Promise<undefined> {\n return undefined;\n },\n createElementStreamTransform(): undefined {\n return undefined;\n },\n } satisfies NativeOutput;\n}\n\nfunction usesNativeTextResult(params: GenerateTextParamsWithAttachments): boolean {\n return Boolean(params.messages || params.tools || params.toolChoice || params.responseSchema);\n}\n\ntype TextModelType =\n | typeof TEXT_NANO_MODEL_TYPE\n | typeof ModelType.TEXT_SMALL\n | typeof TEXT_MEDIUM_MODEL_TYPE\n | typeof ModelType.TEXT_LARGE\n | typeof TEXT_MEGA_MODEL_TYPE\n | typeof RESPONSE_HANDLER_MODEL_TYPE\n | typeof ACTION_PLANNER_MODEL_TYPE;\n\nfunction getModelNameForType(runtime: IAgentRuntime, modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return getNanoModel(runtime);\n case TEXT_MEDIUM_MODEL_TYPE:\n return getMediumModel(runtime);\n case ModelType.TEXT_SMALL:\n return getSmallModel(runtime);\n case ModelType.TEXT_LARGE:\n return getLargeModel(runtime);\n case TEXT_MEGA_MODEL_TYPE:\n return getMegaModel(runtime);\n case RESPONSE_HANDLER_MODEL_TYPE:\n return getResponseHandlerModel(runtime);\n case ACTION_PLANNER_MODEL_TYPE:\n return getActionPlannerModel(runtime);\n default:\n return getLargeModel(runtime);\n }\n}\n\nfunction getModelLabelForType(modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return \"TEXT_NANO\";\n case TEXT_MEDIUM_MODEL_TYPE:\n return \"TEXT_MEDIUM\";\n case ModelType.TEXT_SMALL:\n return \"TEXT_SMALL\";\n case ModelType.TEXT_LARGE:\n return \"TEXT_LARGE\";\n case TEXT_MEGA_MODEL_TYPE:\n return \"TEXT_MEGA\";\n case RESPONSE_HANDLER_MODEL_TYPE:\n return \"RESPONSE_HANDLER\";\n case ACTION_PLANNER_MODEL_TYPE:\n return \"ACTION_PLANNER\";\n default:\n return String(modelType);\n }\n}\n\nfunction buildGenerateParams(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n) {\n const paramsWithAttachments = params as GenerateTextParamsWithAttachments;\n const prompt = typeof params.prompt === \"string\" ? params.prompt : undefined;\n const usagePrompt = prompt ?? textFromMessages(paramsWithAttachments.messages);\n const paramsWithMax = params as GenerateTextParams & {\n maxOutputTokens?: number;\n maxTokens?: number;\n };\n // Opt-out (direct-channel Stage-1): send no cap so the model's own max applies\n // — a hardcoded value 400s when it exceeds the model's limit. Otherwise resolve\n // the explicit value or the 8192 default.\n const resolvedMaxOutput = params.omitMaxTokens\n ? undefined\n : (paramsWithMax.maxOutputTokens ?? paramsWithMax.maxTokens ?? 8192);\n\n const openrouter = createOpenRouterProvider(runtime);\n const modelName = getModelNameForType(runtime, modelType);\n const modelLabel = getModelLabelForType(modelType);\n const supportsSampling = supportsSamplingParameters(modelName);\n const stopSequences =\n Array.isArray(params.stopSequences) && params.stopSequences.length > 0\n ? params.stopSequences\n : undefined;\n const userContent =\n (paramsWithAttachments.attachments?.length ?? 0) > 0\n ? buildUserContent(paramsWithAttachments)\n : undefined;\n const attachmentContent =\n paramsWithAttachments.messages && (paramsWithAttachments.attachments?.length ?? 0) > 0\n ? buildUserContent(paramsWithAttachments, { includePrompt: false })\n : undefined;\n const temperature = params.temperature ?? 0.7;\n const frequencyPenalty = params.frequencyPenalty ?? 0.7;\n const presencePenalty = params.presencePenalty ?? 0.7;\n const systemPrompt = resolveEffectiveSystemPrompt({\n params: paramsWithAttachments,\n fallback: buildCanonicalSystemPrompt({ character: runtime.character }),\n });\n\n const wireMessages = dropDuplicateLeadingSystemMessage(\n paramsWithAttachments.messages,\n systemPrompt\n );\n const promptOrMessages: NativePrompt = paramsWithAttachments.messages\n ? wireMessages && wireMessages.length > 0\n ? {\n messages: attachmentContent\n ? appendUserContentToMessages(wireMessages, attachmentContent)\n : wireMessages,\n }\n : userContent\n ? { messages: [{ role: \"user\" as const, content: userContent }] }\n : prompt !== undefined\n ? { prompt }\n : (() => {\n throw new Error(\n \"OpenRouter text generation requires prompt, messages, or attachments\"\n );\n })()\n : userContent\n ? { messages: [{ role: \"user\" as const, content: userContent }] }\n : prompt !== undefined\n ? { prompt }\n : (() => {\n throw new Error(\"OpenRouter text generation requires prompt, messages, or attachments\");\n })();\n // Resolve providerOptions: forward any caller-supplied options and merge in\n // the openrouter.promptCacheKey when present. OpenRouter passes prompt_cache_key\n // through to the underlying model provider for prefix caching.\n const rawProviderOptions = paramsWithAttachments.providerOptions;\n const { openrouter: rawOpenrouterOptions, ...restProviderOptions } = rawProviderOptions ?? {};\n const openrouterOptions: Record<string, unknown> = {\n ...(rawOpenrouterOptions ?? {}),\n };\n const mergedProviderOptions: Record<string, unknown> = {\n ...restProviderOptions,\n ...(Object.keys(openrouterOptions).length > 0 ? { openrouter: openrouterOptions } : {}),\n };\n const resolvedProviderOptions =\n Object.keys(mergedProviderOptions).length > 0 ? mergedProviderOptions : undefined;\n const normalizedTools = readToolSet(paramsWithAttachments.tools);\n const normalizedToolChoice = readToolChoice(paramsWithAttachments.toolChoice);\n\n type NativeProviderOptions = NativeTextParams[\"providerOptions\"];\n const generateParams: NativeTextParams = {\n model: openrouter.chat(modelName) as LanguageModel,\n ...promptOrMessages,\n system: systemPrompt,\n ...(supportsSampling\n ? {\n temperature: temperature,\n frequencyPenalty: frequencyPenalty,\n presencePenalty: presencePenalty,\n ...(stopSequences ? { stopSequences } : {}),\n }\n : {}),\n ...(resolvedMaxOutput !== undefined ? { maxOutputTokens: resolvedMaxOutput } : {}),\n ...(normalizedTools ? { tools: normalizedTools } : {}),\n ...(normalizedToolChoice ? { toolChoice: normalizedToolChoice } : {}),\n ...(paramsWithAttachments.responseSchema\n ? { output: buildStructuredOutput(paramsWithAttachments.responseSchema) }\n : {}),\n ...(resolvedProviderOptions\n ? { providerOptions: resolvedProviderOptions as NativeProviderOptions }\n : {}),\n };\n\n return {\n generateParams,\n modelName,\n modelLabel,\n prompt: usagePrompt,\n shouldReturnNativeResult: usesNativeTextResult(paramsWithAttachments),\n };\n}\n\ntype GenerateParams = ReturnType<typeof buildGenerateParams>[\"generateParams\"];\n\nfunction handleStreamingGeneration(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n generateParams: GenerateParams,\n prompt: string,\n modelName: string,\n modelLabel: string,\n shouldReturnNativeResult: boolean\n): TextStreamResult {\n const streamResult = streamText(generateParams);\n const usagePromise = Promise.resolve(streamResult.usage).then((usage) => {\n if (!usage) {\n return undefined;\n }\n\n return emitModelUsageEvent(runtime, modelType, prompt, usage, modelName, modelLabel);\n });\n const ignoreUsageError = (): undefined => undefined;\n\n async function* textStreamWithUsage(): AsyncIterable<string> {\n let completed = false;\n try {\n for await (const chunk of streamResult.textStream) {\n yield chunk;\n }\n completed = true;\n } finally {\n if (completed) {\n await usagePromise.catch(ignoreUsageError);\n }\n }\n }\n\n return {\n textStream: textStreamWithUsage(),\n text: Promise.resolve(streamResult.text).then(async (text) => {\n await usagePromise.catch(ignoreUsageError);\n return text;\n }),\n ...(shouldReturnNativeResult ? { toolCalls: Promise.resolve(streamResult.toolCalls) } : {}),\n usage: usagePromise,\n finishReason: Promise.resolve(streamResult.finishReason) as Promise<string | undefined>,\n };\n}\n\nfunction buildNativeTextResult(result: {\n text: string;\n toolCalls?: unknown[];\n finishReason?: string;\n usage?: {\n inputTokens?: number;\n outputTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n cacheReadInputTokens?: number;\n cacheCreationInputTokens?: number;\n };\n}): NativeGenerateTextResult {\n const inputTokens = result.usage?.inputTokens ?? result.usage?.promptTokens ?? 0;\n const outputTokens = result.usage?.outputTokens ?? result.usage?.completionTokens ?? 0;\n\n if (!result.usage) {\n return {\n text: result.text,\n toolCalls: result.toolCalls ?? [],\n finishReason: result.finishReason,\n };\n }\n\n const cacheRead = result.usage.cacheReadInputTokens ?? result.usage.cachedInputTokens;\n const cacheCreation = result.usage.cacheCreationInputTokens;\n\n const usage: NormalizedUsage = {\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens: result.usage.totalTokens ?? inputTokens + outputTokens,\n ...(typeof cacheRead === \"number\" ? { cacheReadInputTokens: cacheRead } : {}),\n ...(typeof cacheCreation === \"number\" ? { cacheCreationInputTokens: cacheCreation } : {}),\n };\n\n return {\n text: result.text,\n toolCalls: result.toolCalls ?? [],\n finishReason: result.finishReason,\n usage,\n };\n}\n\nasync function generateTextWithModel(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n const { generateParams, modelName, modelLabel, prompt, shouldReturnNativeResult } =\n buildGenerateParams(runtime, modelType, params);\n\n if (params.stream) {\n return handleStreamingGeneration(\n runtime,\n modelType,\n generateParams,\n prompt,\n modelName,\n modelLabel,\n shouldReturnNativeResult\n );\n }\n\n const response = await generateText(generateParams);\n\n if (response.usage) {\n emitModelUsageEvent(runtime, modelType, prompt, response.usage, modelName, modelLabel);\n }\n\n if (shouldReturnNativeResult) {\n return buildNativeTextResult(response) as NativeTextModelResult;\n }\n\n return response.text;\n}\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ModelType.TEXT_SMALL, params);\n}\n\nexport async function handleTextNano(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_NANO_MODEL_TYPE, params);\n}\n\nexport async function handleTextMedium(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEDIUM_MODEL_TYPE, params);\n}\n\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ModelType.TEXT_LARGE, params);\n}\n\nexport async function handleTextMega(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEGA_MODEL_TYPE, params);\n}\n\nexport async function handleResponseHandler(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, RESPONSE_HANDLER_MODEL_TYPE, params);\n}\n\nexport async function handleActionPlanner(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ACTION_PLANNER_MODEL_TYPE, params);\n}\n",
|
|
14
|
+
"import openrouterPluginImpl from \"./plugin\";\n\nconst openrouterPlugin = openrouterPluginImpl;\n\nexport * from \"./types\";\nexport * from \"./utils/config\";\nexport { openrouterPlugin, openrouterPlugin as default };\n"
|
|
15
|
+
],
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "6C3DF0FBFC9021DA64756E2164756E21",
|
|
18
|
+
"names": []
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-openrouter",
|
|
3
|
-
"version": "2.0.3-beta.
|
|
3
|
+
"version": "2.0.3-beta.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/node/index.node.js",
|
|
6
6
|
"module": "dist/node/index.node.js",
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@biomejs/biome": "^2.4.14",
|
|
64
|
-
"@elizaos/core": "2.0.3-beta.
|
|
65
|
-
"@elizaos/test-harness": "2.0.3-beta.
|
|
64
|
+
"@elizaos/core": "2.0.3-beta.7",
|
|
65
|
+
"@elizaos/test-harness": "2.0.3-beta.7",
|
|
66
66
|
"@types/bun": "^1.3.5",
|
|
67
67
|
"@types/json-schema": "^7.0.15",
|
|
68
68
|
"@types/node": "^25.0.3",
|
|
@@ -71,10 +71,11 @@
|
|
|
71
71
|
"vitest": "^4.0.0"
|
|
72
72
|
},
|
|
73
73
|
"peerDependencies": {
|
|
74
|
-
"@elizaos/core": "2.0.3-beta.
|
|
74
|
+
"@elizaos/core": "2.0.3-beta.7"
|
|
75
75
|
},
|
|
76
76
|
"scripts": {
|
|
77
77
|
"dev": "bun --hot build.ts",
|
|
78
|
+
"prepack": "bun run build",
|
|
78
79
|
"lint": "bunx @biomejs/biome check --write --unsafe .",
|
|
79
80
|
"clean": "node ../../packages/scripts/rm-path-recursive.mjs dist .turbo .turbo-tsconfig.json tsconfig.tsbuildinfo",
|
|
80
81
|
"format": "bunx @biomejs/biome format --write .",
|
|
@@ -223,5 +224,5 @@
|
|
|
223
224
|
"node": "Node.js build available via exports.node"
|
|
224
225
|
}
|
|
225
226
|
},
|
|
226
|
-
"gitHead": "
|
|
227
|
+
"gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
|
|
227
228
|
}
|