@openrouter/ai-sdk-provider 0.4.4 → 0.4.5
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/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -1
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +20 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +20 -1
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -498,7 +498,8 @@ var OpenRouterChatLanguageModel = class {
|
|
|
498
498
|
function: {
|
|
499
499
|
name: toolCallDelta.function.name,
|
|
500
500
|
arguments: (_b = toolCallDelta.function.arguments) != null ? _b : ""
|
|
501
|
-
}
|
|
501
|
+
},
|
|
502
|
+
sent: false
|
|
502
503
|
};
|
|
503
504
|
const toolCall2 = toolCalls[index];
|
|
504
505
|
if (toolCall2 == null) {
|
|
@@ -519,6 +520,7 @@ var OpenRouterChatLanguageModel = class {
|
|
|
519
520
|
toolName: toolCall2.function.name,
|
|
520
521
|
args: toolCall2.function.arguments
|
|
521
522
|
});
|
|
523
|
+
toolCall2.sent = true;
|
|
522
524
|
}
|
|
523
525
|
continue;
|
|
524
526
|
}
|
|
@@ -544,11 +546,28 @@ var OpenRouterChatLanguageModel = class {
|
|
|
544
546
|
toolName: toolCall.function.name,
|
|
545
547
|
args: toolCall.function.arguments
|
|
546
548
|
});
|
|
549
|
+
toolCall.sent = true;
|
|
547
550
|
}
|
|
548
551
|
}
|
|
549
552
|
}
|
|
550
553
|
},
|
|
551
554
|
flush(controller) {
|
|
555
|
+
var _a2;
|
|
556
|
+
if (finishReason === "tool-calls") {
|
|
557
|
+
for (const toolCall of toolCalls) {
|
|
558
|
+
if (!toolCall.sent) {
|
|
559
|
+
controller.enqueue({
|
|
560
|
+
type: "tool-call",
|
|
561
|
+
toolCallType: "function",
|
|
562
|
+
toolCallId: (_a2 = toolCall.id) != null ? _a2 : (0, import_provider_utils3.generateId)(),
|
|
563
|
+
toolName: toolCall.function.name,
|
|
564
|
+
// Coerce invalid arguments to an empty JSON object
|
|
565
|
+
args: (0, import_provider_utils3.isParsableJson)(toolCall.function.arguments) ? toolCall.function.arguments : "{}"
|
|
566
|
+
});
|
|
567
|
+
toolCall.sent = true;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
552
571
|
controller.enqueue({
|
|
553
572
|
type: "finish",
|
|
554
573
|
finishReason,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/openrouter-facade.ts","../src/openrouter-chat-language-model.ts","../src/convert-to-openrouter-chat-messages.ts","../src/map-openrouter-chat-logprobs.ts","../src/map-openrouter-finish-reason.ts","../src/openrouter-error.ts","../src/openrouter-completion-language-model.ts","../src/convert-to-openrouter-completion-prompt.ts","../src/map-openrouter-completion-logprobs.ts","../src/openrouter-provider.ts"],"sourcesContent":["export * from './openrouter-facade';\nexport * from './openrouter-provider';\nexport * from './types';\n","import type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\nimport type { OpenRouterProviderSettings } from './openrouter-provider';\n\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\n\nimport { OpenRouterChatLanguageModel } from './openrouter-chat-language-model';\nimport { OpenRouterCompletionLanguageModel } from './openrouter-completion-language-model';\n\n/**\n@deprecated Use `createOpenRouter` instead.\n */\nexport class OpenRouter {\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://openrouter.ai/api/v1`.\n */\n readonly baseURL: string;\n\n /**\nAPI key that is being send using the `Authorization` header.\nIt defaults to the `OPENROUTER_API_KEY` environment variable.\n */\n readonly apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n readonly headers?: Record<string, string>;\n\n /**\n * Creates a new OpenRouter provider instance.\n */\n constructor(options: OpenRouterProviderSettings = {}) {\n this.baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://openrouter.ai/api/v1';\n this.apiKey = options.apiKey;\n this.headers = options.headers;\n }\n\n private get baseConfig() {\n return {\n baseURL: this.baseURL,\n headers: () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: this.apiKey,\n environmentVariableName: 'OPENROUTER_API_KEY',\n description: 'OpenRouter',\n })}`,\n ...this.headers,\n }),\n };\n }\n\n chat(modelId: OpenRouterChatModelId, settings: OpenRouterChatSettings = {}) {\n return new OpenRouterChatLanguageModel(modelId, settings, {\n provider: 'openrouter.chat',\n ...this.baseConfig,\n compatibility: 'strict',\n url: ({ path }) => `${this.baseURL}${path}`,\n });\n }\n\n completion(\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings = {},\n ) {\n return new OpenRouterCompletionLanguageModel(modelId, settings, {\n provider: 'openrouter.completion',\n ...this.baseConfig,\n compatibility: 'strict',\n url: ({ path }) => `${this.baseURL}${path}`,\n });\n }\n}\n","import type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionTool,\n LanguageModelV1LogProbs,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\n\nimport {\n InvalidResponseDataError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToOpenRouterChatMessages } from './convert-to-openrouter-chat-messages';\nimport { mapOpenRouterChatLogProbsOutput } from './map-openrouter-chat-logprobs';\nimport { mapOpenRouterFinishReason } from './map-openrouter-finish-reason';\nimport {\n OpenRouterErrorResponseSchema,\n openrouterFailedResponseHandler,\n} from './openrouter-error';\n\nfunction isFunctionTool(\n tool: LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool,\n): tool is LanguageModelV1FunctionTool {\n return 'parameters' in tool;\n}\n\ntype OpenRouterChatConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\nexport class OpenRouterChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'tool';\n\n readonly modelId: OpenRouterChatModelId;\n readonly settings: OpenRouterChatSettings;\n\n private readonly config: OpenRouterChatConfig;\n\n constructor(\n modelId: OpenRouterChatModelId,\n settings: OpenRouterChatSettings,\n config: OpenRouterChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n stopSequences,\n responseFormat,\n topK,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n const extraCallingBody = providerMetadata?.['openrouter'] ?? {};\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n this.settings.logprobs === true ||\n typeof this.settings.logprobs === 'number'\n ? true\n : undefined,\n top_logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // messages:\n messages: convertToOpenRouterChatMessages(prompt),\n\n // OpenRouter specific settings:\n include_reasoning: this.settings.includeReasoning,\n reasoning: this.settings.reasoning,\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n return { ...baseArgs, ...prepareToolsAndToolChoice(mode) };\n }\n\n case 'object-json': {\n return {\n ...baseArgs,\n response_format: { type: 'json_object' },\n };\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n tool_choice: { type: 'function', function: { name: mode.tool.name } },\n tools: [\n {\n type: 'function',\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n };\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n OpenRouterNonStreamChatCompletionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in response');\n }\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.message.content ?? undefined,\n reasoning: choice.message.reasoning ?? undefined,\n toolCalls: choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })),\n finishReason: mapOpenRouterFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? 0,\n completionTokens: response.usage?.completion_tokens ?? 0,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n logprobs: mapOpenRouterChatLogProbsOutput(choice.logprobs),\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? { include_usage: true }\n : undefined,\n },\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n OpenRouterStreamChatCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<\n z.infer<typeof OpenRouterStreamChatCompletionChunkSchema>\n >,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: value.id,\n });\n }\n\n if (value.model) {\n controller.enqueue({\n type: 'response-metadata',\n modelId: value.model,\n });\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapOpenRouterFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: delta.content,\n });\n }\n\n if (delta.reasoning != null) {\n controller.enqueue({\n type: 'reasoning',\n textDelta: delta.reasoning,\n });\n }\n\n const mappedLogprobs = mapOpenRouterChatLogProbsOutput(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) logprobs = [];\n logprobs.push(...mappedLogprobs);\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. OpenRouter returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n };\n\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n // check if tool call is complete (some providers send the full tool call in one chunk)\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n\n // send tool call\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n }\n\n continue;\n }\n\n // existing tool call, merge\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n }\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\nconst OpenRouterChatCompletionBaseResponseSchema = z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterNonStreamChatCompletionResponseSchema =\n OpenRouterChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string().nullable().optional(),\n reasoning: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().optional().nullable(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullable()\n .optional(),\n finish_reason: z.string().optional().nullable(),\n }),\n ),\n });\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterStreamChatCompletionChunkSchema = z.union([\n OpenRouterChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant']).optional(),\n content: z.string().nullish(),\n reasoning: z.string().nullish().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n }),\n OpenRouterErrorResponseSchema,\n]);\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n) {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined };\n }\n\n const mappedTools = tools.map((tool) => {\n if (isFunctionTool(tool)) {\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n } else {\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n },\n };\n }\n });\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, tool_choice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: mappedTools, tool_choice: type };\n case 'tool':\n return {\n tools: mappedTools,\n tool_choice: {\n type: 'function',\n function: {\n name: toolChoice.toolName,\n },\n },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import type {\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n} from '@ai-sdk/provider';\nimport type {\n ChatCompletionContentPart,\n OpenRouterChatPrompt,\n} from './openrouter-chat-prompt';\n\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\n// Type for OpenRouter Cache Control following Anthropic's pattern\nexport type OpenRouterCacheControl = { type: 'ephemeral' };\n\nfunction getCacheControl(\n providerMetadata: LanguageModelV1ProviderMetadata | undefined,\n): OpenRouterCacheControl | undefined {\n const anthropic = providerMetadata?.anthropic;\n const openrouter = providerMetadata?.openrouter;\n\n // Allow both cacheControl and cache_control:\n return (openrouter?.cacheControl ??\n openrouter?.cache_control ??\n anthropic?.cacheControl ??\n anthropic?.cache_control) as OpenRouterCacheControl | undefined;\n}\n\nexport function convertToOpenRouterChatMessages(\n prompt: LanguageModelV1Prompt,\n): OpenRouterChatPrompt {\n const messages: OpenRouterChatPrompt = [];\n\n for (const { role, content, providerMetadata } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({\n role: 'system',\n content,\n cache_control: getCacheControl(providerMetadata),\n });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0]?.type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(content[0].providerMetadata),\n });\n break;\n }\n\n // Get message level cache control\n const messageCacheControl = getCacheControl(providerMetadata);\n const contentParts: ChatCompletionContentPart[] = content.map(\n (part) => {\n switch (part.type) {\n case 'text':\n return {\n type: 'text' as const,\n text: part.text,\n // For text parts, only use part-specific cache control\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n case 'image':\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${part.mimeType ?? 'image/jpeg'};base64,${convertUint8ArrayToBase64(\n part.image,\n )}`,\n },\n // For image parts, use part-specific or message-level cache control\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n case 'file':\n return {\n type: 'text' as const,\n text:\n part.data instanceof URL ? part.data.toString() : part.data,\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content part type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n );\n\n // For multi-part messages, don't add cache_control at the root level\n messages.push({\n role: 'user',\n content: contentParts,\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n // TODO: Handle reasoning and redacted-reasoning\n case 'reasoning':\n case 'redacted-reasoning':\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n cache_control: getCacheControl(providerMetadata),\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(toolResponse.providerMetadata),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV1LogProbs } from '@ai-sdk/provider';\n\ntype OpenRouterChatLogProbs = {\n content:\n | {\n token: string;\n logprob: number;\n top_logprobs:\n | {\n token: string;\n logprob: number;\n }[]\n | null;\n }[]\n | null;\n};\n\nexport function mapOpenRouterChatLogProbsOutput(\n logprobs: OpenRouterChatLogProbs | null | undefined,\n): LanguageModelV1LogProbs | undefined {\n return (\n logprobs?.content?.map(({ token, logprob, top_logprobs }) => ({\n token,\n logprob,\n topLogprobs: top_logprobs\n ? top_logprobs.map(({ token, logprob }) => ({\n token,\n logprob,\n }))\n : [],\n })) ?? undefined\n );\n}\n","import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenRouterFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const OpenRouterErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullable(),\n code: z.string().nullable(),\n }),\n});\n\nexport type OpenRouterErrorData = z.infer<typeof OpenRouterErrorResponseSchema>;\n\nexport const openrouterFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: OpenRouterErrorResponseSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1LogProbs,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\n\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToOpenRouterCompletionPrompt } from './convert-to-openrouter-completion-prompt';\nimport { mapOpenRouterCompletionLogProbs } from './map-openrouter-completion-logprobs';\nimport { mapOpenRouterFinishReason } from './map-openrouter-finish-reason';\nimport {\n OpenRouterErrorResponseSchema,\n openrouterFailedResponseHandler,\n} from './openrouter-error';\n\ntype OpenRouterCompletionConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\nexport class OpenRouterCompletionLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: OpenRouterCompletionModelId;\n readonly settings: OpenRouterCompletionSettings;\n\n private readonly config: OpenRouterCompletionConfig;\n\n constructor(\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings,\n config: OpenRouterCompletionConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n inputFormat,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n responseFormat,\n topK,\n stopSequences,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const extraCallingBody = providerMetadata?.['openrouter'] ?? {};\n\n const { prompt: completionPrompt } = convertToOpenRouterCompletionPrompt({\n prompt,\n inputFormat,\n });\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n suffix: this.settings.suffix,\n user: this.settings.user,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // prompt:\n prompt: completionPrompt,\n\n // OpenRouter specific settings:\n include_reasoning: this.settings.includeReasoning,\n reasoning: this.settings.reasoning,\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n });\n }\n\n if (mode.toolChoice) {\n throw new UnsupportedFunctionalityError({\n functionality: 'toolChoice',\n });\n }\n\n return baseArgs;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n OpenRouterCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n if ('error' in response) {\n throw new Error(`${response.error.message}`);\n }\n\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in OpenRouter completion response');\n }\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.text ?? '',\n reasoning: choice.reasoning || undefined,\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? 0,\n completionTokens: response.usage?.completion_tokens ?? 0,\n },\n finishReason: mapOpenRouterFinishReason(choice.finish_reason),\n logprobs: mapOpenRouterCompletionLogProbs(choice.logprobs),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...this.getArgs(options),\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? { include_usage: true }\n : undefined,\n },\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n OpenRouterCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof OpenRouterCompletionChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapOpenRouterFinishReason(choice.finish_reason);\n }\n\n if (choice?.text != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: choice.text,\n });\n }\n\n const mappedLogprobs = mapOpenRouterCompletionLogProbs(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) logprobs = [];\n logprobs.push(...mappedLogprobs);\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterCompletionChunkSchema = z.union([\n z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n text: z.string(),\n reasoning: z.string().nullish().optional(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n logprobs: z\n .object({\n tokens: z.array(z.string()),\n token_logprobs: z.array(z.number()),\n top_logprobs: z.array(z.record(z.string(), z.number())).nullable(),\n })\n .nullable()\n .optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .optional()\n .nullable(),\n }),\n OpenRouterErrorResponseSchema,\n]);\n","import type { LanguageModelV1Prompt } from '@ai-sdk/provider';\n\nimport {\n InvalidPromptError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function convertToOpenRouterCompletionPrompt({\n prompt,\n inputFormat,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV1Prompt;\n inputFormat: 'prompt' | 'messages';\n user?: string;\n assistant?: string;\n}): {\n prompt: string;\n} {\n // When the user supplied a prompt input, we don't transform it:\n if (\n inputFormat === 'prompt' &&\n prompt.length === 1 &&\n prompt[0] &&\n prompt[0].role === 'user' &&\n prompt[0].content.length === 1 &&\n prompt[0].content[0] &&\n prompt[0].content[0].type === 'text'\n ) {\n return { prompt: prompt[0].content[0].text };\n }\n\n // otherwise transform to a chat message format:\n let text = '';\n\n // if first message is a system message, add it to the text:\n if (prompt[0] && prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`;\n prompt = prompt.slice(1);\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: 'Unexpected system message in prompt: ${content}',\n prompt,\n });\n }\n\n case 'user': {\n const userMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'image': {\n throw new UnsupportedFunctionalityError({\n functionality: 'images',\n });\n }\n case 'file': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file attachments',\n });\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${user}:\\n${userMessage}\\n\\n`;\n break;\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call messages',\n });\n }\n case 'reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'reasoning messages',\n });\n }\n\n case 'redacted-reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'redacted reasoning messages',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`;\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool messages',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`;\n\n return {\n prompt: text,\n };\n}\n","type OpenRouterCompletionLogProps = {\n tokens: string[];\n token_logprobs: number[];\n top_logprobs: Record<string, number>[] | null;\n};\n\nexport function mapOpenRouterCompletionLogProbs(\n logprobs: OpenRouterCompletionLogProps | null | undefined,\n) {\n return logprobs?.tokens.map((token, index) => ({\n token,\n logprob: logprobs.token_logprobs[index] ?? 0,\n topLogprobs: logprobs.top_logprobs\n ? Object.entries(logprobs.top_logprobs[index] ?? {}).map(\n ([token, logprob]) => ({\n token,\n logprob,\n }),\n )\n : [],\n }));\n}\n","import type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\n\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\n\nimport { OpenRouterChatLanguageModel } from './openrouter-chat-language-model';\nimport { OpenRouterCompletionLanguageModel } from './openrouter-completion-language-model';\n\nexport type { OpenRouterCompletionSettings };\n\nexport interface OpenRouterProvider {\n (\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n (\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n languageModel(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n languageModel(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n /**\nCreates an OpenRouter chat model for text generation.\n */\n chat(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n /**\nCreates an OpenRouter completion model for text generation.\n */\n completion(\n modelId: OpenRouterCompletionModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n}\n\nexport interface OpenRouterProviderSettings {\n /**\nBase URL for the OpenRouter API calls.\n */\n baseURL?: string;\n\n /**\n@deprecated Use `baseURL` instead.\n */\n baseUrl?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nOpenRouter compatibility mode. Should be set to `strict` when using the OpenRouter API,\nand `compatible` when using 3rd party providers. In `compatible` mode, newer\ninformation such as streamOptions are not being sent. Defaults to 'compatible'.\n */\n compatibility?: 'strict' | 'compatible';\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: typeof fetch;\n\n /**\nA JSON object to send as the request body to access OpenRouter features & upstream provider features.\n */\n extraBody?: Record<string, unknown>;\n}\n\n/**\nCreate an OpenRouter provider instance.\n */\nexport function createOpenRouter(\n options: OpenRouterProviderSettings = {},\n): OpenRouterProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://openrouter.ai/api/v1';\n\n // we default to compatible, because strict breaks providers like Groq:\n const compatibility = options.compatibility ?? 'compatible';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'OPENROUTER_API_KEY',\n description: 'OpenRouter',\n })}`,\n ...options.headers,\n });\n\n const createChatModel = (\n modelId: OpenRouterChatModelId,\n settings: OpenRouterChatSettings = {},\n ) =>\n new OpenRouterChatLanguageModel(modelId, settings, {\n provider: 'openrouter.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n compatibility,\n fetch: options.fetch,\n extraBody: options.extraBody,\n });\n\n const createCompletionModel = (\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings = {},\n ) =>\n new OpenRouterCompletionLanguageModel(modelId, settings, {\n provider: 'openrouter.completion',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n compatibility,\n fetch: options.fetch,\n extraBody: options.extraBody,\n });\n\n const createLanguageModel = (\n modelId: OpenRouterChatModelId | OpenRouterCompletionModelId,\n settings?: OpenRouterChatSettings | OpenRouterCompletionSettings,\n ) => {\n if (new.target) {\n throw new Error(\n 'The OpenRouter model function cannot be called with the new keyword.',\n );\n }\n\n if (modelId === 'openai/gpt-3.5-turbo-instruct') {\n return createCompletionModel(\n modelId,\n settings as OpenRouterCompletionSettings,\n );\n }\n\n return createChatModel(modelId, settings as OpenRouterChatSettings);\n };\n\n const provider = function (\n modelId: OpenRouterChatModelId | OpenRouterCompletionModelId,\n settings?: OpenRouterChatSettings | OpenRouterCompletionSettings,\n ) {\n return createLanguageModel(modelId, settings);\n };\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.completion = createCompletionModel;\n\n return provider as OpenRouterProvider;\n}\n\n/**\nDefault OpenRouter provider instance. It uses 'strict' compatibility mode.\n */\nexport const openrouter = createOpenRouter({\n compatibility: 'strict', // strict for OpenRouter API\n});\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod","openrouter","_a","_b","_c","token","logprob","import_provider_utils","_a","toolCall","import_provider","import_provider_utils","import_zod","import_provider","token","import_provider_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/openrouter-facade.ts","../src/openrouter-chat-language-model.ts","../src/convert-to-openrouter-chat-messages.ts","../src/map-openrouter-chat-logprobs.ts","../src/map-openrouter-finish-reason.ts","../src/openrouter-error.ts","../src/openrouter-completion-language-model.ts","../src/convert-to-openrouter-completion-prompt.ts","../src/map-openrouter-completion-logprobs.ts","../src/openrouter-provider.ts"],"sourcesContent":["export * from './openrouter-facade';\nexport * from './openrouter-provider';\nexport * from './types';\n","import type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\nimport type { OpenRouterProviderSettings } from './openrouter-provider';\n\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\n\nimport { OpenRouterChatLanguageModel } from './openrouter-chat-language-model';\nimport { OpenRouterCompletionLanguageModel } from './openrouter-completion-language-model';\n\n/**\n@deprecated Use `createOpenRouter` instead.\n */\nexport class OpenRouter {\n /**\nUse a different URL prefix for API calls, e.g. to use proxy servers.\nThe default prefix is `https://openrouter.ai/api/v1`.\n */\n readonly baseURL: string;\n\n /**\nAPI key that is being send using the `Authorization` header.\nIt defaults to the `OPENROUTER_API_KEY` environment variable.\n */\n readonly apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n readonly headers?: Record<string, string>;\n\n /**\n * Creates a new OpenRouter provider instance.\n */\n constructor(options: OpenRouterProviderSettings = {}) {\n this.baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://openrouter.ai/api/v1';\n this.apiKey = options.apiKey;\n this.headers = options.headers;\n }\n\n private get baseConfig() {\n return {\n baseURL: this.baseURL,\n headers: () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: this.apiKey,\n environmentVariableName: 'OPENROUTER_API_KEY',\n description: 'OpenRouter',\n })}`,\n ...this.headers,\n }),\n };\n }\n\n chat(modelId: OpenRouterChatModelId, settings: OpenRouterChatSettings = {}) {\n return new OpenRouterChatLanguageModel(modelId, settings, {\n provider: 'openrouter.chat',\n ...this.baseConfig,\n compatibility: 'strict',\n url: ({ path }) => `${this.baseURL}${path}`,\n });\n }\n\n completion(\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings = {},\n ) {\n return new OpenRouterCompletionLanguageModel(modelId, settings, {\n provider: 'openrouter.completion',\n ...this.baseConfig,\n compatibility: 'strict',\n url: ({ path }) => `${this.baseURL}${path}`,\n });\n }\n}\n","import type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionTool,\n LanguageModelV1LogProbs,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\n\nimport {\n InvalidResponseDataError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToOpenRouterChatMessages } from './convert-to-openrouter-chat-messages';\nimport { mapOpenRouterChatLogProbsOutput } from './map-openrouter-chat-logprobs';\nimport { mapOpenRouterFinishReason } from './map-openrouter-finish-reason';\nimport {\n OpenRouterErrorResponseSchema,\n openrouterFailedResponseHandler,\n} from './openrouter-error';\n\nfunction isFunctionTool(\n tool: LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool,\n): tool is LanguageModelV1FunctionTool {\n return 'parameters' in tool;\n}\n\ntype OpenRouterChatConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\nexport class OpenRouterChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'tool';\n\n readonly modelId: OpenRouterChatModelId;\n readonly settings: OpenRouterChatSettings;\n\n private readonly config: OpenRouterChatConfig;\n\n constructor(\n modelId: OpenRouterChatModelId,\n settings: OpenRouterChatSettings,\n config: OpenRouterChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n stopSequences,\n responseFormat,\n topK,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n const extraCallingBody = providerMetadata?.['openrouter'] ?? {};\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n this.settings.logprobs === true ||\n typeof this.settings.logprobs === 'number'\n ? true\n : undefined,\n top_logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n user: this.settings.user,\n parallel_tool_calls: this.settings.parallelToolCalls,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // messages:\n messages: convertToOpenRouterChatMessages(prompt),\n\n // OpenRouter specific settings:\n include_reasoning: this.settings.includeReasoning,\n reasoning: this.settings.reasoning,\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n return { ...baseArgs, ...prepareToolsAndToolChoice(mode) };\n }\n\n case 'object-json': {\n return {\n ...baseArgs,\n response_format: { type: 'json_object' },\n };\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n tool_choice: { type: 'function', function: { name: mode.tool.name } },\n tools: [\n {\n type: 'function',\n function: {\n name: mode.tool.name,\n description: mode.tool.description,\n parameters: mode.tool.parameters,\n },\n },\n ],\n };\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n OpenRouterNonStreamChatCompletionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in response');\n }\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.message.content ?? undefined,\n reasoning: choice.message.reasoning ?? undefined,\n toolCalls: choice.message.tool_calls?.map((toolCall) => ({\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })),\n finishReason: mapOpenRouterFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? 0,\n completionTokens: response.usage?.completion_tokens ?? 0,\n },\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n logprobs: mapOpenRouterChatLogProbsOutput(choice.logprobs),\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/chat/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? { include_usage: true }\n : undefined,\n },\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n OpenRouterStreamChatCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n\n sent: boolean;\n }> = [];\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<\n z.infer<typeof OpenRouterStreamChatCompletionChunkSchema>\n >,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.id) {\n controller.enqueue({\n type: 'response-metadata',\n id: value.id,\n });\n }\n\n if (value.model) {\n controller.enqueue({\n type: 'response-metadata',\n modelId: value.model,\n });\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapOpenRouterFinishReason(choice.finish_reason);\n }\n\n if (choice?.delta == null) {\n return;\n }\n\n const delta = choice.delta;\n\n if (delta.content != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: delta.content,\n });\n }\n\n if (delta.reasoning != null) {\n controller.enqueue({\n type: 'reasoning',\n textDelta: delta.reasoning,\n });\n }\n\n const mappedLogprobs = mapOpenRouterChatLogProbsOutput(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) logprobs = [];\n logprobs.push(...mappedLogprobs);\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // Tool call start. OpenRouter returns all information except the arguments in the first chunk.\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== 'function') {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`,\n });\n }\n\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`,\n });\n }\n\n if (toolCallDelta.function?.name == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`,\n });\n }\n\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: 'function',\n function: {\n name: toolCallDelta.function.name,\n arguments: toolCallDelta.function.arguments ?? '',\n },\n sent: false,\n };\n\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n // check if tool call is complete (some providers send the full tool call in one chunk)\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCall.function.arguments,\n });\n\n // send tool call\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n\n continue;\n }\n\n // existing tool call, merge\n const toolCall = toolCalls[index];\n\n if (toolCall == null) {\n throw new Error('Tool call is missing');\n }\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n argsTextDelta: toolCallDelta.function.arguments ?? '',\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name != null &&\n toolCall.function?.arguments != null &&\n isParsableJson(toolCall.function.arguments)\n ) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n\n toolCall.sent = true;\n }\n }\n }\n },\n\n flush(controller) {\n // Forward any unsent tool calls if finish reason is 'tool-calls'\n if (finishReason === 'tool-calls') {\n for (const toolCall of toolCalls) {\n if (!toolCall.sent) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? generateId(),\n toolName: toolCall.function.name,\n // Coerce invalid arguments to an empty JSON object\n args: isParsableJson(toolCall.function.arguments)\n ? toolCall.function.arguments\n : '{}',\n });\n toolCall.sent = true;\n }\n }\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\nconst OpenRouterChatCompletionBaseResponseSchema = z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .nullish(),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterNonStreamChatCompletionResponseSchema =\n OpenRouterChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string().nullable().optional(),\n reasoning: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n id: z.string().optional().nullable(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n index: z.number(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullable()\n .optional(),\n finish_reason: z.string().optional().nullable(),\n }),\n ),\n });\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterStreamChatCompletionChunkSchema = z.union([\n OpenRouterChatCompletionBaseResponseSchema.extend({\n choices: z.array(\n z.object({\n delta: z\n .object({\n role: z.enum(['assistant']).optional(),\n content: z.string().nullish(),\n reasoning: z.string().nullish().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().nullish(),\n type: z.literal('function').optional(),\n function: z.object({\n name: z.string().nullish(),\n arguments: z.string().nullish(),\n }),\n }),\n )\n .nullish(),\n })\n .nullish(),\n logprobs: z\n .object({\n content: z\n .array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n top_logprobs: z.array(\n z.object({\n token: z.string(),\n logprob: z.number(),\n }),\n ),\n }),\n )\n .nullable(),\n })\n .nullish(),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n }),\n OpenRouterErrorResponseSchema,\n]);\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n) {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, tool_choice: undefined };\n }\n\n const mappedTools = tools.map((tool) => {\n if (isFunctionTool(tool)) {\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n } else {\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\n },\n };\n }\n });\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, tool_choice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n case 'none':\n case 'required':\n return { tools: mappedTools, tool_choice: type };\n case 'tool':\n return {\n tools: mappedTools,\n tool_choice: {\n type: 'function',\n function: {\n name: toolChoice.toolName,\n },\n },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import type {\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n} from '@ai-sdk/provider';\nimport type {\n ChatCompletionContentPart,\n OpenRouterChatPrompt,\n} from './openrouter-chat-prompt';\n\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\n\n// Type for OpenRouter Cache Control following Anthropic's pattern\nexport type OpenRouterCacheControl = { type: 'ephemeral' };\n\nfunction getCacheControl(\n providerMetadata: LanguageModelV1ProviderMetadata | undefined,\n): OpenRouterCacheControl | undefined {\n const anthropic = providerMetadata?.anthropic;\n const openrouter = providerMetadata?.openrouter;\n\n // Allow both cacheControl and cache_control:\n return (openrouter?.cacheControl ??\n openrouter?.cache_control ??\n anthropic?.cacheControl ??\n anthropic?.cache_control) as OpenRouterCacheControl | undefined;\n}\n\nexport function convertToOpenRouterChatMessages(\n prompt: LanguageModelV1Prompt,\n): OpenRouterChatPrompt {\n const messages: OpenRouterChatPrompt = [];\n\n for (const { role, content, providerMetadata } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({\n role: 'system',\n content,\n cache_control: getCacheControl(providerMetadata),\n });\n break;\n }\n\n case 'user': {\n if (content.length === 1 && content[0]?.type === 'text') {\n messages.push({\n role: 'user',\n content: content[0].text,\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(content[0].providerMetadata),\n });\n break;\n }\n\n // Get message level cache control\n const messageCacheControl = getCacheControl(providerMetadata);\n const contentParts: ChatCompletionContentPart[] = content.map(\n (part) => {\n switch (part.type) {\n case 'text':\n return {\n type: 'text' as const,\n text: part.text,\n // For text parts, only use part-specific cache control\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n case 'image':\n return {\n type: 'image_url' as const,\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${part.mimeType ?? 'image/jpeg'};base64,${convertUint8ArrayToBase64(\n part.image,\n )}`,\n },\n // For image parts, use part-specific or message-level cache control\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n case 'file':\n return {\n type: 'text' as const,\n text:\n part.data instanceof URL ? part.data.toString() : part.data,\n cache_control:\n getCacheControl(part.providerMetadata) ??\n messageCacheControl,\n };\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content part type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n );\n\n // For multi-part messages, don't add cache_control at the root level\n messages.push({\n role: 'user',\n content: contentParts,\n });\n\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n // TODO: Handle reasoning and redacted-reasoning\n case 'reasoning':\n case 'redacted-reasoning':\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n cache_control: getCacheControl(providerMetadata),\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n cache_control:\n getCacheControl(providerMetadata) ??\n getCacheControl(toolResponse.providerMetadata),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import type { LanguageModelV1LogProbs } from '@ai-sdk/provider';\n\ntype OpenRouterChatLogProbs = {\n content:\n | {\n token: string;\n logprob: number;\n top_logprobs:\n | {\n token: string;\n logprob: number;\n }[]\n | null;\n }[]\n | null;\n};\n\nexport function mapOpenRouterChatLogProbsOutput(\n logprobs: OpenRouterChatLogProbs | null | undefined,\n): LanguageModelV1LogProbs | undefined {\n return (\n logprobs?.content?.map(({ token, logprob, top_logprobs }) => ({\n token,\n logprob,\n topLogprobs: top_logprobs\n ? top_logprobs.map(({ token, logprob }) => ({\n token,\n logprob,\n }))\n : [],\n })) ?? undefined\n );\n}\n","import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapOpenRouterFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content_filter':\n return 'content-filter';\n case 'function_call':\n case 'tool_calls':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport const OpenRouterErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullable(),\n code: z.string().nullable(),\n }),\n});\n\nexport type OpenRouterErrorData = z.infer<typeof OpenRouterErrorResponseSchema>;\n\nexport const openrouterFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: OpenRouterErrorResponseSchema,\n errorToMessage: (data) => data.error.message,\n});\n","import type {\n LanguageModelV1,\n LanguageModelV1FinishReason,\n LanguageModelV1LogProbs,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type { ParseResult } from '@ai-sdk/provider-utils';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\n\nimport { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nimport { convertToOpenRouterCompletionPrompt } from './convert-to-openrouter-completion-prompt';\nimport { mapOpenRouterCompletionLogProbs } from './map-openrouter-completion-logprobs';\nimport { mapOpenRouterFinishReason } from './map-openrouter-finish-reason';\nimport {\n OpenRouterErrorResponseSchema,\n openrouterFailedResponseHandler,\n} from './openrouter-error';\n\ntype OpenRouterCompletionConfig = {\n provider: string;\n compatibility: 'strict' | 'compatible';\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: typeof fetch;\n extraBody?: Record<string, unknown>;\n};\n\nexport class OpenRouterCompletionLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: OpenRouterCompletionModelId;\n readonly settings: OpenRouterCompletionSettings;\n\n private readonly config: OpenRouterCompletionConfig;\n\n constructor(\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings,\n config: OpenRouterCompletionConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n inputFormat,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n responseFormat,\n topK,\n stopSequences,\n providerMetadata,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const extraCallingBody = providerMetadata?.['openrouter'] ?? {};\n\n const { prompt: completionPrompt } = convertToOpenRouterCompletionPrompt({\n prompt,\n inputFormat,\n });\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n models: this.settings.models,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n logprobs:\n typeof this.settings.logprobs === 'number'\n ? this.settings.logprobs\n : typeof this.settings.logprobs === 'boolean'\n ? this.settings.logprobs\n ? 0\n : undefined\n : undefined,\n suffix: this.settings.suffix,\n user: this.settings.user,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n seed,\n\n stop: stopSequences,\n response_format: responseFormat,\n top_k: topK,\n\n // prompt:\n prompt: completionPrompt,\n\n // OpenRouter specific settings:\n include_reasoning: this.settings.includeReasoning,\n reasoning: this.settings.reasoning,\n\n // extra body:\n ...this.config.extraBody,\n ...this.settings.extraBody,\n ...extraCallingBody,\n };\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n });\n }\n\n if (mode.toolChoice) {\n throw new UnsupportedFunctionalityError({\n functionality: 'toolChoice',\n });\n }\n\n return baseArgs;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n // Handle all non-text types with a single default case\n default: {\n const _exhaustiveCheck: never = type;\n throw new UnsupportedFunctionalityError({\n functionality: `${_exhaustiveCheck} mode`,\n });\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n OpenRouterCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n if ('error' in response) {\n throw new Error(`${response.error.message}`);\n }\n\n const choice = response.choices[0];\n\n if (!choice) {\n throw new Error('No choice in OpenRouter completion response');\n }\n\n return {\n response: {\n id: response.id,\n modelId: response.model,\n },\n text: choice.text ?? '',\n reasoning: choice.reasoning || undefined,\n usage: {\n promptTokens: response.usage?.prompt_tokens ?? 0,\n completionTokens: response.usage?.completion_tokens ?? 0,\n },\n finishReason: mapOpenRouterFinishReason(choice.finish_reason),\n logprobs: mapOpenRouterCompletionLogProbs(choice.logprobs),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: '/completions',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...this.getArgs(options),\n stream: true,\n\n // only include stream_options when in strict compatibility mode:\n stream_options:\n this.config.compatibility === 'strict'\n ? { include_usage: true }\n : undefined,\n },\n failedResponseHandler: openrouterFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n OpenRouterCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let logprobs: LanguageModelV1LogProbs;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof OpenRouterCompletionChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n // handle error chunks:\n if ('error' in value) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error: value.error });\n return;\n }\n\n if (value.usage != null) {\n usage = {\n promptTokens: value.usage.prompt_tokens,\n completionTokens: value.usage.completion_tokens,\n };\n }\n\n const choice = value.choices[0];\n\n if (choice?.finish_reason != null) {\n finishReason = mapOpenRouterFinishReason(choice.finish_reason);\n }\n\n if (choice?.text != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: choice.text,\n });\n }\n\n const mappedLogprobs = mapOpenRouterCompletionLogProbs(\n choice?.logprobs,\n );\n if (mappedLogprobs?.length) {\n if (logprobs === undefined) logprobs = [];\n logprobs.push(...mappedLogprobs);\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst OpenRouterCompletionChunkSchema = z.union([\n z.object({\n id: z.string().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n text: z.string(),\n reasoning: z.string().nullish().optional(),\n finish_reason: z.string().nullish(),\n index: z.number(),\n logprobs: z\n .object({\n tokens: z.array(z.string()),\n token_logprobs: z.array(z.number()),\n top_logprobs: z.array(z.record(z.string(), z.number())).nullable(),\n })\n .nullable()\n .optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .optional()\n .nullable(),\n }),\n OpenRouterErrorResponseSchema,\n]);\n","import type { LanguageModelV1Prompt } from '@ai-sdk/provider';\n\nimport {\n InvalidPromptError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport function convertToOpenRouterCompletionPrompt({\n prompt,\n inputFormat,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV1Prompt;\n inputFormat: 'prompt' | 'messages';\n user?: string;\n assistant?: string;\n}): {\n prompt: string;\n} {\n // When the user supplied a prompt input, we don't transform it:\n if (\n inputFormat === 'prompt' &&\n prompt.length === 1 &&\n prompt[0] &&\n prompt[0].role === 'user' &&\n prompt[0].content.length === 1 &&\n prompt[0].content[0] &&\n prompt[0].content[0].type === 'text'\n ) {\n return { prompt: prompt[0].content[0].text };\n }\n\n // otherwise transform to a chat message format:\n let text = '';\n\n // if first message is a system message, add it to the text:\n if (prompt[0] && prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`;\n prompt = prompt.slice(1);\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: 'Unexpected system message in prompt: ${content}',\n prompt,\n });\n }\n\n case 'user': {\n const userMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'image': {\n throw new UnsupportedFunctionalityError({\n functionality: 'images',\n });\n }\n case 'file': {\n throw new UnsupportedFunctionalityError({\n functionality: 'file attachments',\n });\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${user}:\\n${userMessage}\\n\\n`;\n break;\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map((part) => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call messages',\n });\n }\n case 'reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'reasoning messages',\n });\n }\n\n case 'redacted-reasoning': {\n throw new UnsupportedFunctionalityError({\n functionality: 'redacted reasoning messages',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(\n `Unsupported content type: ${_exhaustiveCheck}`,\n );\n }\n }\n })\n .join('');\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`;\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool messages',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`;\n\n return {\n prompt: text,\n };\n}\n","type OpenRouterCompletionLogProps = {\n tokens: string[];\n token_logprobs: number[];\n top_logprobs: Record<string, number>[] | null;\n};\n\nexport function mapOpenRouterCompletionLogProbs(\n logprobs: OpenRouterCompletionLogProps | null | undefined,\n) {\n return logprobs?.tokens.map((token, index) => ({\n token,\n logprob: logprobs.token_logprobs[index] ?? 0,\n topLogprobs: logprobs.top_logprobs\n ? Object.entries(logprobs.top_logprobs[index] ?? {}).map(\n ([token, logprob]) => ({\n token,\n logprob,\n }),\n )\n : [],\n }));\n}\n","import type {\n OpenRouterChatModelId,\n OpenRouterChatSettings,\n} from './openrouter-chat-settings';\nimport type {\n OpenRouterCompletionModelId,\n OpenRouterCompletionSettings,\n} from './openrouter-completion-settings';\n\nimport { loadApiKey, withoutTrailingSlash } from '@ai-sdk/provider-utils';\n\nimport { OpenRouterChatLanguageModel } from './openrouter-chat-language-model';\nimport { OpenRouterCompletionLanguageModel } from './openrouter-completion-language-model';\n\nexport type { OpenRouterCompletionSettings };\n\nexport interface OpenRouterProvider {\n (\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n (\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n languageModel(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n languageModel(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n /**\nCreates an OpenRouter chat model for text generation.\n */\n chat(\n modelId: OpenRouterChatModelId,\n settings?: OpenRouterChatSettings,\n ): OpenRouterChatLanguageModel;\n\n /**\nCreates an OpenRouter completion model for text generation.\n */\n completion(\n modelId: OpenRouterCompletionModelId,\n settings?: OpenRouterCompletionSettings,\n ): OpenRouterCompletionLanguageModel;\n}\n\nexport interface OpenRouterProviderSettings {\n /**\nBase URL for the OpenRouter API calls.\n */\n baseURL?: string;\n\n /**\n@deprecated Use `baseURL` instead.\n */\n baseUrl?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nOpenRouter compatibility mode. Should be set to `strict` when using the OpenRouter API,\nand `compatible` when using 3rd party providers. In `compatible` mode, newer\ninformation such as streamOptions are not being sent. Defaults to 'compatible'.\n */\n compatibility?: 'strict' | 'compatible';\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: typeof fetch;\n\n /**\nA JSON object to send as the request body to access OpenRouter features & upstream provider features.\n */\n extraBody?: Record<string, unknown>;\n}\n\n/**\nCreate an OpenRouter provider instance.\n */\nexport function createOpenRouter(\n options: OpenRouterProviderSettings = {},\n): OpenRouterProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://openrouter.ai/api/v1';\n\n // we default to compatible, because strict breaks providers like Groq:\n const compatibility = options.compatibility ?? 'compatible';\n\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'OPENROUTER_API_KEY',\n description: 'OpenRouter',\n })}`,\n ...options.headers,\n });\n\n const createChatModel = (\n modelId: OpenRouterChatModelId,\n settings: OpenRouterChatSettings = {},\n ) =>\n new OpenRouterChatLanguageModel(modelId, settings, {\n provider: 'openrouter.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n compatibility,\n fetch: options.fetch,\n extraBody: options.extraBody,\n });\n\n const createCompletionModel = (\n modelId: OpenRouterCompletionModelId,\n settings: OpenRouterCompletionSettings = {},\n ) =>\n new OpenRouterCompletionLanguageModel(modelId, settings, {\n provider: 'openrouter.completion',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n compatibility,\n fetch: options.fetch,\n extraBody: options.extraBody,\n });\n\n const createLanguageModel = (\n modelId: OpenRouterChatModelId | OpenRouterCompletionModelId,\n settings?: OpenRouterChatSettings | OpenRouterCompletionSettings,\n ) => {\n if (new.target) {\n throw new Error(\n 'The OpenRouter model function cannot be called with the new keyword.',\n );\n }\n\n if (modelId === 'openai/gpt-3.5-turbo-instruct') {\n return createCompletionModel(\n modelId,\n settings as OpenRouterCompletionSettings,\n );\n }\n\n return createChatModel(modelId, settings as OpenRouterChatSettings);\n };\n\n const provider = function (\n modelId: OpenRouterChatModelId | OpenRouterCompletionModelId,\n settings?: OpenRouterChatSettings | OpenRouterCompletionSettings,\n ) {\n return createLanguageModel(modelId, settings);\n };\n\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.completion = createCompletionModel;\n\n return provider as OpenRouterProvider;\n}\n\n/**\nDefault OpenRouter provider instance. It uses 'strict' compatibility mode.\n */\nexport const openrouter = createOpenRouter({\n compatibility: 'strict', // strict for OpenRouter API\n});\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod","openrouter","_a","_b","_c","token","logprob","import_provider_utils","_a","toolCall","import_provider","import_provider_utils","import_zod","import_provider","token","import_provider_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -483,7 +483,8 @@ var OpenRouterChatLanguageModel = class {
|
|
|
483
483
|
function: {
|
|
484
484
|
name: toolCallDelta.function.name,
|
|
485
485
|
arguments: (_b = toolCallDelta.function.arguments) != null ? _b : ""
|
|
486
|
-
}
|
|
486
|
+
},
|
|
487
|
+
sent: false
|
|
487
488
|
};
|
|
488
489
|
const toolCall2 = toolCalls[index];
|
|
489
490
|
if (toolCall2 == null) {
|
|
@@ -504,6 +505,7 @@ var OpenRouterChatLanguageModel = class {
|
|
|
504
505
|
toolName: toolCall2.function.name,
|
|
505
506
|
args: toolCall2.function.arguments
|
|
506
507
|
});
|
|
508
|
+
toolCall2.sent = true;
|
|
507
509
|
}
|
|
508
510
|
continue;
|
|
509
511
|
}
|
|
@@ -529,11 +531,28 @@ var OpenRouterChatLanguageModel = class {
|
|
|
529
531
|
toolName: toolCall.function.name,
|
|
530
532
|
args: toolCall.function.arguments
|
|
531
533
|
});
|
|
534
|
+
toolCall.sent = true;
|
|
532
535
|
}
|
|
533
536
|
}
|
|
534
537
|
}
|
|
535
538
|
},
|
|
536
539
|
flush(controller) {
|
|
540
|
+
var _a2;
|
|
541
|
+
if (finishReason === "tool-calls") {
|
|
542
|
+
for (const toolCall of toolCalls) {
|
|
543
|
+
if (!toolCall.sent) {
|
|
544
|
+
controller.enqueue({
|
|
545
|
+
type: "tool-call",
|
|
546
|
+
toolCallType: "function",
|
|
547
|
+
toolCallId: (_a2 = toolCall.id) != null ? _a2 : generateId(),
|
|
548
|
+
toolName: toolCall.function.name,
|
|
549
|
+
// Coerce invalid arguments to an empty JSON object
|
|
550
|
+
args: isParsableJson(toolCall.function.arguments) ? toolCall.function.arguments : "{}"
|
|
551
|
+
});
|
|
552
|
+
toolCall.sent = true;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
537
556
|
controller.enqueue({
|
|
538
557
|
type: "finish",
|
|
539
558
|
finishReason,
|