@openrouter/ai-sdk-provider 0.4.6 → 0.5.0

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.
@@ -273,7 +273,7 @@ var OpenRouterChatLanguageModel = class {
273
273
  }) {
274
274
  var _a;
275
275
  const type = mode.type;
276
- const extraCallingBody = (_a = providerMetadata == null ? void 0 : providerMetadata["openrouter"]) != null ? _a : {};
276
+ const extraCallingBody = (_a = providerMetadata == null ? void 0 : providerMetadata.openrouter) != null ? _a : {};
277
277
  const baseArgs = __spreadValues(__spreadValues(__spreadValues({
278
278
  // model id:
279
279
  model: this.modelId,
@@ -298,7 +298,8 @@ var OpenRouterChatLanguageModel = class {
298
298
  messages: convertToOpenRouterChatMessages(prompt),
299
299
  // OpenRouter specific settings:
300
300
  include_reasoning: this.settings.includeReasoning,
301
- reasoning: this.settings.reasoning
301
+ reasoning: this.settings.reasoning,
302
+ usage: this.settings.usage
302
303
  }, this.config.extraBody), this.settings.extraBody), extraCallingBody);
303
304
  switch (type) {
304
305
  case "regular": {
@@ -334,7 +335,7 @@ var OpenRouterChatLanguageModel = class {
334
335
  }
335
336
  }
336
337
  async doGenerate(options) {
337
- var _b, _c, _d, _e, _f, _g, _h;
338
+ var _b, _c, _d, _e, _f, _g, _h, _i, _j;
338
339
  const args = this.getArgs(options);
339
340
  const { responseHeaders, value: response } = await (0, import_provider_utils3.postJsonToApi)({
340
341
  url: this.config.url({
@@ -355,14 +356,39 @@ var OpenRouterChatLanguageModel = class {
355
356
  if (!choice) {
356
357
  throw new Error("No choice in response");
357
358
  }
358
- return {
359
+ const usageInfo = response.usage ? {
360
+ promptTokens: (_b = response.usage.prompt_tokens) != null ? _b : 0,
361
+ completionTokens: (_c = response.usage.completion_tokens) != null ? _c : 0
362
+ } : {
363
+ promptTokens: 0,
364
+ completionTokens: 0
365
+ };
366
+ const providerMetadata = {};
367
+ if (response.usage && ((_d = this.settings.usage) == null ? void 0 : _d.include)) {
368
+ providerMetadata.openrouter = {
369
+ usage: {
370
+ promptTokens: response.usage.prompt_tokens,
371
+ promptTokensDetails: response.usage.prompt_tokens_details ? {
372
+ cachedTokens: (_e = response.usage.prompt_tokens_details.cached_tokens) != null ? _e : 0
373
+ } : void 0,
374
+ completionTokens: response.usage.completion_tokens,
375
+ completionTokensDetails: response.usage.completion_tokens_details ? {
376
+ reasoningTokens: (_f = response.usage.completion_tokens_details.reasoning_tokens) != null ? _f : 0
377
+ } : void 0,
378
+ cost: response.usage.cost,
379
+ totalTokens: (_g = response.usage.total_tokens) != null ? _g : 0
380
+ }
381
+ };
382
+ }
383
+ const hasProviderMetadata = Object.keys(providerMetadata).length > 0;
384
+ return __spreadValues({
359
385
  response: {
360
386
  id: response.id,
361
387
  modelId: response.model
362
388
  },
363
- text: (_b = choice.message.content) != null ? _b : void 0,
364
- reasoning: (_c = choice.message.reasoning) != null ? _c : void 0,
365
- toolCalls: (_d = choice.message.tool_calls) == null ? void 0 : _d.map((toolCall) => {
389
+ text: (_h = choice.message.content) != null ? _h : void 0,
390
+ reasoning: (_i = choice.message.reasoning) != null ? _i : void 0,
391
+ toolCalls: (_j = choice.message.tool_calls) == null ? void 0 : _j.map((toolCall) => {
366
392
  var _a2;
367
393
  return {
368
394
  toolCallType: "function",
@@ -372,17 +398,15 @@ var OpenRouterChatLanguageModel = class {
372
398
  };
373
399
  }),
374
400
  finishReason: mapOpenRouterFinishReason(choice.finish_reason),
375
- usage: {
376
- promptTokens: (_f = (_e = response.usage) == null ? void 0 : _e.prompt_tokens) != null ? _f : 0,
377
- completionTokens: (_h = (_g = response.usage) == null ? void 0 : _g.completion_tokens) != null ? _h : 0
378
- },
401
+ usage: usageInfo,
379
402
  rawCall: { rawPrompt, rawSettings },
380
403
  rawResponse: { headers: responseHeaders },
381
404
  warnings: [],
382
405
  logprobs: mapOpenRouterChatLogProbsOutput(choice.logprobs)
383
- };
406
+ }, hasProviderMetadata ? { providerMetadata } : {});
384
407
  }
385
408
  async doStream(options) {
409
+ var _a, _c;
386
410
  const args = this.getArgs(options);
387
411
  const { responseHeaders, value: response } = await (0, import_provider_utils3.postJsonToApi)({
388
412
  url: this.config.url({
@@ -393,7 +417,9 @@ var OpenRouterChatLanguageModel = class {
393
417
  body: __spreadProps(__spreadValues({}, args), {
394
418
  stream: true,
395
419
  // only include stream_options when in strict compatibility mode:
396
- stream_options: this.config.compatibility === "strict" ? { include_usage: true } : void 0
420
+ stream_options: this.config.compatibility === "strict" ? __spreadValues({
421
+ include_usage: true
422
+ }, ((_a = this.settings.usage) == null ? void 0 : _a.include) ? { include_usage: true } : {}) : void 0
397
423
  }),
398
424
  failedResponseHandler: openrouterFailedResponseHandler,
399
425
  successfulResponseHandler: (0, import_provider_utils3.createEventSourceResponseHandler)(
@@ -402,7 +428,7 @@ var OpenRouterChatLanguageModel = class {
402
428
  abortSignal: options.abortSignal,
403
429
  fetch: this.config.fetch
404
430
  });
405
- const _a = args, { messages: rawPrompt } = _a, rawSettings = __objRest(_a, ["messages"]);
431
+ const _b = args, { messages: rawPrompt } = _b, rawSettings = __objRest(_b, ["messages"]);
406
432
  const toolCalls = [];
407
433
  let finishReason = "other";
408
434
  let usage = {
@@ -410,11 +436,13 @@ var OpenRouterChatLanguageModel = class {
410
436
  completionTokens: Number.NaN
411
437
  };
412
438
  let logprobs;
439
+ const openrouterUsage = {};
440
+ const shouldIncludeUsageAccounting = !!((_c = this.settings.usage) == null ? void 0 : _c.include);
413
441
  return {
414
442
  stream: response.pipeThrough(
415
443
  new TransformStream({
416
444
  transform(chunk, controller) {
417
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
445
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
418
446
  if (!chunk.success) {
419
447
  finishReason = "error";
420
448
  controller.enqueue({ type: "error", error: chunk.error });
@@ -443,6 +471,20 @@ var OpenRouterChatLanguageModel = class {
443
471
  promptTokens: value.usage.prompt_tokens,
444
472
  completionTokens: value.usage.completion_tokens
445
473
  };
474
+ openrouterUsage.promptTokens = value.usage.prompt_tokens;
475
+ if (value.usage.prompt_tokens_details) {
476
+ openrouterUsage.promptTokensDetails = {
477
+ cachedTokens: (_a2 = value.usage.prompt_tokens_details.cached_tokens) != null ? _a2 : 0
478
+ };
479
+ }
480
+ openrouterUsage.completionTokens = value.usage.completion_tokens;
481
+ if (value.usage.completion_tokens_details) {
482
+ openrouterUsage.completionTokensDetails = {
483
+ reasoningTokens: (_b2 = value.usage.completion_tokens_details.reasoning_tokens) != null ? _b2 : 0
484
+ };
485
+ }
486
+ openrouterUsage.cost = value.usage.cost;
487
+ openrouterUsage.totalTokens = value.usage.total_tokens;
446
488
  }
447
489
  const choice = value.choices[0];
448
490
  if ((choice == null ? void 0 : choice.finish_reason) != null) {
@@ -487,7 +529,7 @@ var OpenRouterChatLanguageModel = class {
487
529
  message: `Expected 'id' to be a string.`
488
530
  });
489
531
  }
490
- if (((_a2 = toolCallDelta.function) == null ? void 0 : _a2.name) == null) {
532
+ if (((_c2 = toolCallDelta.function) == null ? void 0 : _c2.name) == null) {
491
533
  throw new import_provider.InvalidResponseDataError({
492
534
  data: toolCallDelta,
493
535
  message: `Expected 'function.name' to be a string.`
@@ -498,7 +540,7 @@ var OpenRouterChatLanguageModel = class {
498
540
  type: "function",
499
541
  function: {
500
542
  name: toolCallDelta.function.name,
501
- arguments: (_b = toolCallDelta.function.arguments) != null ? _b : ""
543
+ arguments: (_d = toolCallDelta.function.arguments) != null ? _d : ""
502
544
  },
503
545
  sent: false
504
546
  };
@@ -506,7 +548,7 @@ var OpenRouterChatLanguageModel = class {
506
548
  if (toolCall2 == null) {
507
549
  throw new Error("Tool call is missing");
508
550
  }
509
- if (((_c = toolCall2.function) == null ? void 0 : _c.name) != null && ((_d = toolCall2.function) == null ? void 0 : _d.arguments) != null && (0, import_provider_utils3.isParsableJson)(toolCall2.function.arguments)) {
551
+ if (((_e = toolCall2.function) == null ? void 0 : _e.name) != null && ((_f = toolCall2.function) == null ? void 0 : _f.arguments) != null && (0, import_provider_utils3.isParsableJson)(toolCall2.function.arguments)) {
510
552
  controller.enqueue({
511
553
  type: "tool-call-delta",
512
554
  toolCallType: "function",
@@ -517,7 +559,7 @@ var OpenRouterChatLanguageModel = class {
517
559
  controller.enqueue({
518
560
  type: "tool-call",
519
561
  toolCallType: "function",
520
- toolCallId: (_e = toolCall2.id) != null ? _e : (0, import_provider_utils3.generateId)(),
562
+ toolCallId: (_g = toolCall2.id) != null ? _g : (0, import_provider_utils3.generateId)(),
521
563
  toolName: toolCall2.function.name,
522
564
  args: toolCall2.function.arguments
523
565
  });
@@ -529,21 +571,21 @@ var OpenRouterChatLanguageModel = class {
529
571
  if (toolCall == null) {
530
572
  throw new Error("Tool call is missing");
531
573
  }
532
- if (((_f = toolCallDelta.function) == null ? void 0 : _f.arguments) != null) {
533
- toolCall.function.arguments += (_h = (_g = toolCallDelta.function) == null ? void 0 : _g.arguments) != null ? _h : "";
574
+ if (((_h = toolCallDelta.function) == null ? void 0 : _h.arguments) != null) {
575
+ toolCall.function.arguments += (_j = (_i = toolCallDelta.function) == null ? void 0 : _i.arguments) != null ? _j : "";
534
576
  }
535
577
  controller.enqueue({
536
578
  type: "tool-call-delta",
537
579
  toolCallType: "function",
538
580
  toolCallId: toolCall.id,
539
581
  toolName: toolCall.function.name,
540
- argsTextDelta: (_i = toolCallDelta.function.arguments) != null ? _i : ""
582
+ argsTextDelta: (_k = toolCallDelta.function.arguments) != null ? _k : ""
541
583
  });
542
- if (((_j = toolCall.function) == null ? void 0 : _j.name) != null && ((_k = toolCall.function) == null ? void 0 : _k.arguments) != null && (0, import_provider_utils3.isParsableJson)(toolCall.function.arguments)) {
584
+ if (((_l = toolCall.function) == null ? void 0 : _l.name) != null && ((_m = toolCall.function) == null ? void 0 : _m.arguments) != null && (0, import_provider_utils3.isParsableJson)(toolCall.function.arguments)) {
543
585
  controller.enqueue({
544
586
  type: "tool-call",
545
587
  toolCallType: "function",
546
- toolCallId: (_l = toolCall.id) != null ? _l : (0, import_provider_utils3.generateId)(),
588
+ toolCallId: (_n = toolCall.id) != null ? _n : (0, import_provider_utils3.generateId)(),
547
589
  toolName: toolCall.function.name,
548
590
  args: toolCall.function.arguments
549
591
  });
@@ -569,12 +611,19 @@ var OpenRouterChatLanguageModel = class {
569
611
  }
570
612
  }
571
613
  }
572
- controller.enqueue({
614
+ const providerMetadata = {};
615
+ if (shouldIncludeUsageAccounting && (openrouterUsage.totalTokens !== void 0 || openrouterUsage.cost !== void 0 || openrouterUsage.promptTokensDetails !== void 0 || openrouterUsage.completionTokensDetails !== void 0)) {
616
+ providerMetadata.openrouter = {
617
+ usage: openrouterUsage
618
+ };
619
+ }
620
+ const hasProviderMetadata = Object.keys(providerMetadata).length > 0 && shouldIncludeUsageAccounting;
621
+ controller.enqueue(__spreadValues({
573
622
  type: "finish",
574
623
  finishReason,
575
624
  logprobs,
576
625
  usage
577
- });
626
+ }, hasProviderMetadata ? { providerMetadata } : {}));
578
627
  }
579
628
  })
580
629
  ),
@@ -589,8 +638,15 @@ var OpenRouterChatCompletionBaseResponseSchema = import_zod2.z.object({
589
638
  model: import_zod2.z.string().optional(),
590
639
  usage: import_zod2.z.object({
591
640
  prompt_tokens: import_zod2.z.number(),
641
+ prompt_tokens_details: import_zod2.z.object({
642
+ cached_tokens: import_zod2.z.number()
643
+ }).optional(),
592
644
  completion_tokens: import_zod2.z.number(),
593
- total_tokens: import_zod2.z.number()
645
+ completion_tokens_details: import_zod2.z.object({
646
+ reasoning_tokens: import_zod2.z.number()
647
+ }).optional(),
648
+ total_tokens: import_zod2.z.number(),
649
+ cost: import_zod2.z.number().optional()
594
650
  }).nullish()
595
651
  });
596
652
  var OpenRouterNonStreamChatCompletionResponseSchema = OpenRouterChatCompletionBaseResponseSchema.extend({
@@ -687,14 +743,13 @@ function prepareToolsAndToolChoice(mode) {
687
743
  parameters: tool.parameters
688
744
  }
689
745
  };
690
- } else {
691
- return {
692
- type: "function",
693
- function: {
694
- name: tool.name
695
- }
696
- };
697
746
  }
747
+ return {
748
+ type: "function",
749
+ function: {
750
+ name: tool.name
751
+ }
752
+ };
698
753
  });
699
754
  const toolChoice = mode.toolChoice;
700
755
  if (toolChoice == null) {
@@ -883,7 +938,7 @@ var OpenRouterCompletionLanguageModel = class {
883
938
  }) {
884
939
  var _a, _b;
885
940
  const type = mode.type;
886
- const extraCallingBody = (_a = providerMetadata == null ? void 0 : providerMetadata["openrouter"]) != null ? _a : {};
941
+ const extraCallingBody = (_a = providerMetadata == null ? void 0 : providerMetadata.openrouter) != null ? _a : {};
887
942
  const { prompt: completionPrompt } = convertToOpenRouterCompletionPrompt({
888
943
  prompt,
889
944
  inputFormat
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/internal/index.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"],"sourcesContent":["export * from '../openrouter-chat-language-model';\nexport * from '../openrouter-chat-settings';\nexport * from '../openrouter-completion-language-model';\nexport * from '../openrouter-completion-settings';\nexport * from '../types';\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: 'file' as const,\n file: {\n filename: String(\n part.providerMetadata?.openrouter?.filename,\n ),\n file_data:\n part.data instanceof Uint8Array\n ? `data:${part.mimeType};base64,${convertUint8ArrayToBase64(part.data)}`\n : `data:${part.mimeType};base64,${part.data}`,\n },\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"],"mappings":"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","names":["import_provider_utils","import_zod","_a","_b","_c","token","logprob","import_provider_utils","_a","toolCall","import_provider","import_provider_utils","import_zod","import_provider","token"]}
1
+ {"version":3,"sources":["../../src/internal/index.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"],"sourcesContent":["export * from '../openrouter-chat-language-model';\nexport * from '../openrouter-chat-settings';\nexport * from '../openrouter-completion-language-model';\nexport * from '../openrouter-completion-settings';\nexport * from '../types';\n","import type { OpenRouterUsageAccounting } from '@/src/types';\nimport 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 usage: this.settings.usage,\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 // Extract detailed usage information\n const usageInfo = response.usage\n ? {\n promptTokens: response.usage.prompt_tokens ?? 0,\n completionTokens: response.usage.completion_tokens ?? 0,\n }\n : {\n promptTokens: 0,\n completionTokens: 0,\n };\n\n // Collect provider-specific metadata\n const providerMetadata: {\n openrouter?: Partial<{\n usage: OpenRouterUsageAccounting;\n }>;\n } = {};\n\n // Add OpenRouter usage accounting details if available AND usage accounting was requested\n if (response.usage && this.settings.usage?.include) {\n providerMetadata.openrouter = {\n usage: {\n promptTokens: response.usage.prompt_tokens,\n promptTokensDetails: response.usage.prompt_tokens_details\n ? {\n cachedTokens:\n response.usage.prompt_tokens_details.cached_tokens ?? 0,\n }\n : undefined,\n completionTokens: response.usage.completion_tokens,\n completionTokensDetails: response.usage.completion_tokens_details\n ? {\n reasoningTokens:\n response.usage.completion_tokens_details.reasoning_tokens ??\n 0,\n }\n : undefined,\n cost: response.usage.cost,\n totalTokens: response.usage.total_tokens ?? 0,\n },\n };\n }\n\n // Prepare the final result\n const hasProviderMetadata = Object.keys(providerMetadata).length > 0;\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: usageInfo,\n rawCall: { rawPrompt, rawSettings },\n rawResponse: { headers: responseHeaders },\n warnings: [],\n logprobs: mapOpenRouterChatLogProbsOutput(choice.logprobs),\n ...(hasProviderMetadata ? { providerMetadata } : {}),\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 ? {\n include_usage: true,\n // If user has requested usage accounting, make sure we get it in the stream\n ...(this.settings.usage?.include\n ? { include_usage: true }\n : {}),\n }\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 // Track provider-specific usage information\n const openrouterUsage: Partial<OpenRouterUsageAccounting> = {};\n\n // Store usage accounting setting for reference in the transformer\n const shouldIncludeUsageAccounting = !!this.settings.usage?.include;\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 // Collect OpenRouter specific usage information\n openrouterUsage.promptTokens = value.usage.prompt_tokens;\n if (value.usage.prompt_tokens_details) {\n openrouterUsage.promptTokensDetails = {\n cachedTokens:\n value.usage.prompt_tokens_details.cached_tokens ?? 0,\n };\n }\n\n openrouterUsage.completionTokens = value.usage.completion_tokens;\n if (value.usage.completion_tokens_details) {\n openrouterUsage.completionTokensDetails = {\n reasoningTokens:\n value.usage.completion_tokens_details.reasoning_tokens ?? 0,\n };\n }\n\n openrouterUsage.cost = value.usage.cost;\n openrouterUsage.totalTokens = value.usage.total_tokens;\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 // Prepare provider metadata with OpenRouter usage accounting information\n const providerMetadata: {\n openrouter?: {\n usage: Partial<OpenRouterUsageAccounting>;\n };\n } = {};\n\n // Only add OpenRouter metadata if we have usage information AND usage accounting was requested\n if (\n shouldIncludeUsageAccounting &&\n (openrouterUsage.totalTokens !== undefined ||\n openrouterUsage.cost !== undefined ||\n openrouterUsage.promptTokensDetails !== undefined ||\n openrouterUsage.completionTokensDetails !== undefined)\n ) {\n providerMetadata.openrouter = {\n usage: openrouterUsage,\n };\n }\n\n // Only add providerMetadata if we have OpenRouter metadata and it is explicitly requested\n // This is to maintain backward compatibility with existing tests and clients\n const hasProviderMetadata =\n Object.keys(providerMetadata).length > 0 &&\n shouldIncludeUsageAccounting;\n\n controller.enqueue({\n type: 'finish',\n finishReason,\n logprobs,\n usage,\n ...(hasProviderMetadata ? { providerMetadata } : {}),\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 prompt_tokens_details: z\n .object({\n cached_tokens: z.number(),\n })\n .optional(),\n completion_tokens: z.number(),\n completion_tokens_details: z\n .object({\n reasoning_tokens: z.number(),\n })\n .optional(),\n total_tokens: z.number(),\n cost: z.number().optional(),\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 }\n\n return {\n type: 'function' as const,\n function: {\n name: tool.name,\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: 'file' as const,\n file: {\n filename: String(\n part.providerMetadata?.openrouter?.filename,\n ),\n file_data:\n part.data instanceof Uint8Array\n ? `data:${part.mimeType};base64,${convertUint8ArrayToBase64(part.data)}`\n : `data:${part.mimeType};base64,${part.data}`,\n },\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"],"mappings":"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","names":["import_provider_utils","import_zod","_a","_b","_c","token","logprob","import_provider_utils","_a","_b","_c","toolCall","import_provider","import_provider_utils","import_zod","import_provider","token"]}