@apertis/ai-sdk-provider 1.0.0 → 1.1.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.
package/README.md CHANGED
@@ -79,15 +79,61 @@ const { text } = await generateText({
79
79
  });
80
80
  ```
81
81
 
82
+ ### Text Completions
83
+
84
+ For models that support the legacy completion API:
85
+
86
+ ```typescript
87
+ import { apertis } from '@apertis/ai-sdk-provider';
88
+ import { generateText } from 'ai';
89
+
90
+ const { text } = await generateText({
91
+ model: apertis.completion('gpt-3.5-turbo-instruct'),
92
+ prompt: 'Complete this: The quick brown fox',
93
+ });
94
+ ```
95
+
96
+ ### Embeddings
97
+
98
+ Generate vector embeddings for semantic search and similarity:
99
+
100
+ ```typescript
101
+ import { apertis } from '@apertis/ai-sdk-provider';
102
+ import { embed, embedMany } from 'ai';
103
+
104
+ // Single embedding
105
+ const { embedding } = await embed({
106
+ model: apertis.textEmbeddingModel('text-embedding-3-small'),
107
+ value: 'Hello world',
108
+ });
109
+
110
+ // Multiple embeddings
111
+ const { embeddings } = await embedMany({
112
+ model: apertis.textEmbeddingModel('text-embedding-3-large', {
113
+ dimensions: 1024, // Optional: reduce dimensions
114
+ }),
115
+ values: ['Hello', 'World'],
116
+ });
117
+ ```
118
+
82
119
  ## Supported Models
83
120
 
84
121
  Any model available on Apertis AI, including:
85
122
 
123
+ ### Chat Models
86
124
  - `gpt-5.2`, `gpt-5.2-codex`, `gpt-5.1`
87
125
  - `claude-opus-4-5-20251101`, `claude-sonnet-4.5`, `claude-haiku-4.5`
88
126
  - `gemini-3-pro-preview`, `gemini-3-flash-preview`, `gemini-2.5-flash-preview`
89
127
  - And 470+ more models
90
128
 
129
+ ### Completion Models
130
+ - `gpt-3.5-turbo-instruct`
131
+ - `davinci-002`, `babbage-002`
132
+
133
+ ### Embedding Models
134
+ - `text-embedding-3-small`, `text-embedding-3-large`
135
+ - `text-embedding-ada-002`
136
+
91
137
  ## Provider Configuration
92
138
 
93
139
  ```typescript
@@ -100,6 +146,12 @@ const apertis = createApertis({
100
146
  });
101
147
  ```
102
148
 
149
+ ## What's New (v1.1.0)
150
+
151
+ - **ProviderV3 Interface** - Full implementation of `ProviderV3` specification
152
+ - **Completion Models** - Support for text completion via `apertis.completion()`
153
+ - **Embedding Models** - Support for embeddings via `apertis.textEmbeddingModel()`
154
+
103
155
  ## Breaking Changes (v1.0.0)
104
156
 
105
157
  - **Requires AI SDK 6+** - No longer compatible with AI SDK 5.x
package/dist/index.cjs CHANGED
@@ -26,7 +26,7 @@ __export(index_exports, {
26
26
  module.exports = __toCommonJS(index_exports);
27
27
 
28
28
  // src/apertis-provider.ts
29
- var import_provider_utils3 = require("@ai-sdk/provider-utils");
29
+ var import_provider_utils5 = require("@ai-sdk/provider-utils");
30
30
 
31
31
  // src/apertis-chat-language-model.ts
32
32
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
@@ -480,12 +480,325 @@ var ApertisChatLanguageModel = class {
480
480
  }
481
481
  };
482
482
 
483
+ // src/apertis-completion-language-model.ts
484
+ var import_provider_utils3 = require("@ai-sdk/provider-utils");
485
+
486
+ // src/schemas/completion-response.ts
487
+ var import_zod3 = require("zod");
488
+ var openAICompletionResponseSchema = import_zod3.z.object({
489
+ id: import_zod3.z.string(),
490
+ object: import_zod3.z.literal("text_completion"),
491
+ created: import_zod3.z.number(),
492
+ model: import_zod3.z.string(),
493
+ choices: import_zod3.z.array(
494
+ import_zod3.z.object({
495
+ text: import_zod3.z.string(),
496
+ index: import_zod3.z.number(),
497
+ logprobs: import_zod3.z.object({
498
+ tokens: import_zod3.z.array(import_zod3.z.string()).optional(),
499
+ token_logprobs: import_zod3.z.array(import_zod3.z.number()).optional(),
500
+ top_logprobs: import_zod3.z.array(import_zod3.z.record(import_zod3.z.number())).optional(),
501
+ text_offset: import_zod3.z.array(import_zod3.z.number()).optional()
502
+ }).nullable().optional(),
503
+ finish_reason: import_zod3.z.string().nullable().optional()
504
+ })
505
+ ),
506
+ usage: import_zod3.z.object({
507
+ prompt_tokens: import_zod3.z.number(),
508
+ completion_tokens: import_zod3.z.number(),
509
+ total_tokens: import_zod3.z.number()
510
+ }).optional()
511
+ });
512
+ var openAICompletionChunkSchema = import_zod3.z.object({
513
+ id: import_zod3.z.string(),
514
+ object: import_zod3.z.literal("text_completion"),
515
+ created: import_zod3.z.number(),
516
+ model: import_zod3.z.string(),
517
+ choices: import_zod3.z.array(
518
+ import_zod3.z.object({
519
+ text: import_zod3.z.string(),
520
+ index: import_zod3.z.number(),
521
+ logprobs: import_zod3.z.object({
522
+ tokens: import_zod3.z.array(import_zod3.z.string()).optional(),
523
+ token_logprobs: import_zod3.z.array(import_zod3.z.number()).optional(),
524
+ top_logprobs: import_zod3.z.array(import_zod3.z.record(import_zod3.z.number())).optional(),
525
+ text_offset: import_zod3.z.array(import_zod3.z.number()).optional()
526
+ }).nullable().optional(),
527
+ finish_reason: import_zod3.z.string().nullable().optional()
528
+ })
529
+ ),
530
+ usage: import_zod3.z.object({
531
+ prompt_tokens: import_zod3.z.number(),
532
+ completion_tokens: import_zod3.z.number(),
533
+ total_tokens: import_zod3.z.number()
534
+ }).optional().nullable()
535
+ });
536
+
537
+ // src/apertis-completion-language-model.ts
538
+ var ApertisCompletionLanguageModel = class {
539
+ constructor(modelId, settings, config) {
540
+ this.modelId = modelId;
541
+ this.settings = settings;
542
+ this.config = config;
543
+ }
544
+ specificationVersion = "v3";
545
+ supportedUrls = {};
546
+ get provider() {
547
+ return this.config.provider;
548
+ }
549
+ async doGenerate(options) {
550
+ const body = this.buildRequestBody(options, false);
551
+ const { value: response } = await (0, import_provider_utils3.postJsonToApi)({
552
+ url: `${this.config.baseURL}/completions`,
553
+ headers: this.config.headers(),
554
+ body,
555
+ failedResponseHandler: apertisFailedResponseHandler,
556
+ successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
557
+ openAICompletionResponseSchema
558
+ ),
559
+ fetch: this.config.fetch,
560
+ abortSignal: options.abortSignal
561
+ });
562
+ const choice = response.choices[0];
563
+ const content = [];
564
+ if (choice.text) {
565
+ content.push({
566
+ type: "text",
567
+ text: choice.text
568
+ });
569
+ }
570
+ return {
571
+ content,
572
+ finishReason: this.mapFinishReason(choice.finish_reason),
573
+ usage: {
574
+ inputTokens: {
575
+ total: response.usage?.prompt_tokens ?? 0,
576
+ noCache: void 0,
577
+ cacheRead: void 0,
578
+ cacheWrite: void 0
579
+ },
580
+ outputTokens: {
581
+ total: response.usage?.completion_tokens ?? 0,
582
+ text: void 0,
583
+ reasoning: void 0
584
+ }
585
+ },
586
+ warnings: [],
587
+ request: { body }
588
+ };
589
+ }
590
+ async doStream(options) {
591
+ const body = this.buildRequestBody(options, true);
592
+ const { value: response } = await (0, import_provider_utils3.postJsonToApi)({
593
+ url: `${this.config.baseURL}/completions`,
594
+ headers: this.config.headers(),
595
+ body,
596
+ failedResponseHandler: apertisFailedResponseHandler,
597
+ successfulResponseHandler: (0, import_provider_utils3.createEventSourceResponseHandler)(
598
+ openAICompletionChunkSchema
599
+ ),
600
+ fetch: this.config.fetch,
601
+ abortSignal: options.abortSignal
602
+ });
603
+ let textId = null;
604
+ const transformStream = new TransformStream({
605
+ transform(parseResult, controller) {
606
+ if (!parseResult.success) {
607
+ return;
608
+ }
609
+ const chunk = parseResult.value;
610
+ const choice = chunk.choices[0];
611
+ if (!choice) return;
612
+ if (choice.text) {
613
+ if (!textId) {
614
+ textId = (0, import_provider_utils3.generateId)();
615
+ controller.enqueue({
616
+ type: "text-start",
617
+ id: textId
618
+ });
619
+ }
620
+ controller.enqueue({
621
+ type: "text-delta",
622
+ id: textId,
623
+ delta: choice.text
624
+ });
625
+ }
626
+ if (choice.finish_reason) {
627
+ if (textId) {
628
+ controller.enqueue({
629
+ type: "text-end",
630
+ id: textId
631
+ });
632
+ }
633
+ controller.enqueue({
634
+ type: "finish",
635
+ finishReason: {
636
+ unified: choice.finish_reason === "stop" ? "stop" : choice.finish_reason === "length" ? "length" : "other",
637
+ raw: choice.finish_reason ?? void 0
638
+ },
639
+ usage: {
640
+ inputTokens: {
641
+ total: chunk.usage?.prompt_tokens ?? 0,
642
+ noCache: void 0,
643
+ cacheRead: void 0,
644
+ cacheWrite: void 0
645
+ },
646
+ outputTokens: {
647
+ total: chunk.usage?.completion_tokens ?? 0,
648
+ text: void 0,
649
+ reasoning: void 0
650
+ }
651
+ }
652
+ });
653
+ }
654
+ },
655
+ flush(controller) {
656
+ if (textId) {
657
+ controller.enqueue({
658
+ type: "text-end",
659
+ id: textId
660
+ });
661
+ }
662
+ }
663
+ });
664
+ return {
665
+ stream: response.pipeThrough(transformStream),
666
+ request: { body }
667
+ };
668
+ }
669
+ buildRequestBody(options, stream) {
670
+ const prompt = this.convertPromptToText(options.prompt);
671
+ const body = {
672
+ model: this.modelId,
673
+ prompt,
674
+ stream
675
+ };
676
+ if (stream) body.stream_options = { include_usage: true };
677
+ if (options.maxOutputTokens !== void 0)
678
+ body.max_tokens = options.maxOutputTokens;
679
+ if (options.temperature !== void 0)
680
+ body.temperature = options.temperature;
681
+ if (options.topP !== void 0) body.top_p = options.topP;
682
+ if (options.frequencyPenalty !== void 0)
683
+ body.frequency_penalty = options.frequencyPenalty;
684
+ if (options.presencePenalty !== void 0)
685
+ body.presence_penalty = options.presencePenalty;
686
+ if (options.stopSequences !== void 0) body.stop = options.stopSequences;
687
+ if (options.seed !== void 0) body.seed = options.seed;
688
+ if (this.settings.echo !== void 0) body.echo = this.settings.echo;
689
+ if (this.settings.logprobs !== void 0)
690
+ body.logprobs = this.settings.logprobs;
691
+ if (this.settings.suffix !== void 0) body.suffix = this.settings.suffix;
692
+ if (this.settings.user !== void 0) body.user = this.settings.user;
693
+ return body;
694
+ }
695
+ convertPromptToText(prompt) {
696
+ const parts = [];
697
+ for (const message of prompt) {
698
+ if (message.role === "system") {
699
+ parts.push(message.content);
700
+ } else if (message.role === "user") {
701
+ for (const part of message.content) {
702
+ if (part.type === "text") {
703
+ parts.push(part.text);
704
+ }
705
+ }
706
+ } else if (message.role === "assistant") {
707
+ for (const part of message.content) {
708
+ if (part.type === "text") {
709
+ parts.push(part.text);
710
+ }
711
+ }
712
+ }
713
+ }
714
+ return parts.join("\n\n");
715
+ }
716
+ mapFinishReason(finishReason) {
717
+ const raw = finishReason ?? void 0;
718
+ switch (finishReason) {
719
+ case "stop":
720
+ return { unified: "stop", raw };
721
+ case "length":
722
+ return { unified: "length", raw };
723
+ default:
724
+ return { unified: "other", raw };
725
+ }
726
+ }
727
+ };
728
+
729
+ // src/apertis-embedding-model.ts
730
+ var import_provider_utils4 = require("@ai-sdk/provider-utils");
731
+
732
+ // src/schemas/embedding-response.ts
733
+ var import_zod4 = require("zod");
734
+ var openAIEmbeddingResponseSchema = import_zod4.z.object({
735
+ object: import_zod4.z.literal("list"),
736
+ data: import_zod4.z.array(
737
+ import_zod4.z.object({
738
+ object: import_zod4.z.literal("embedding"),
739
+ embedding: import_zod4.z.array(import_zod4.z.number()),
740
+ index: import_zod4.z.number()
741
+ })
742
+ ),
743
+ model: import_zod4.z.string(),
744
+ usage: import_zod4.z.object({
745
+ prompt_tokens: import_zod4.z.number(),
746
+ total_tokens: import_zod4.z.number()
747
+ }).optional()
748
+ });
749
+
750
+ // src/apertis-embedding-model.ts
751
+ var ApertisEmbeddingModel = class {
752
+ constructor(modelId, settings, config) {
753
+ this.modelId = modelId;
754
+ this.settings = settings;
755
+ this.config = config;
756
+ this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;
757
+ this.supportsParallelCalls = settings.supportsParallelCalls ?? true;
758
+ }
759
+ specificationVersion = "v3";
760
+ maxEmbeddingsPerCall;
761
+ supportsParallelCalls;
762
+ get provider() {
763
+ return this.config.provider;
764
+ }
765
+ async doEmbed(options) {
766
+ const body = {
767
+ model: this.modelId,
768
+ input: options.values,
769
+ encoding_format: "float"
770
+ };
771
+ if (this.settings.dimensions !== void 0) {
772
+ body.dimensions = this.settings.dimensions;
773
+ }
774
+ if (this.settings.user !== void 0) {
775
+ body.user = this.settings.user;
776
+ }
777
+ const { value: response } = await (0, import_provider_utils4.postJsonToApi)({
778
+ url: `${this.config.baseURL}/embeddings`,
779
+ headers: this.config.headers(),
780
+ body,
781
+ failedResponseHandler: apertisFailedResponseHandler,
782
+ successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
783
+ openAIEmbeddingResponseSchema
784
+ ),
785
+ fetch: this.config.fetch,
786
+ abortSignal: options.abortSignal
787
+ });
788
+ return {
789
+ embeddings: response.data.map((item) => item.embedding),
790
+ usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,
791
+ warnings: []
792
+ };
793
+ }
794
+ };
795
+
483
796
  // src/apertis-provider.ts
484
797
  function createApertis(options = {}) {
485
- const baseURL = (0, import_provider_utils3.withoutTrailingSlash)(options.baseURL) ?? "https://api.apertis.ai/v1";
798
+ const baseURL = (0, import_provider_utils5.withoutTrailingSlash)(options.baseURL) ?? "https://api.apertis.ai/v1";
486
799
  const getHeaders = () => ({
487
800
  ...options.headers,
488
- Authorization: `Bearer ${(0, import_provider_utils3.loadApiKey)({
801
+ Authorization: `Bearer ${(0, import_provider_utils5.loadApiKey)({
489
802
  apiKey: options.apiKey,
490
803
  environmentVariableName: "APERTIS_API_KEY",
491
804
  description: "Apertis API key"
@@ -498,11 +811,30 @@ function createApertis(options = {}) {
498
811
  headers: getHeaders,
499
812
  fetch: options.fetch
500
813
  });
814
+ const createCompletionModel = (modelId, settings = {}) => new ApertisCompletionLanguageModel(modelId, settings, {
815
+ provider: "apertis.completion",
816
+ baseURL,
817
+ headers: getHeaders,
818
+ fetch: options.fetch
819
+ });
820
+ const createEmbeddingModel = (modelId, settings = {}) => new ApertisEmbeddingModel(modelId, settings, {
821
+ provider: "apertis.embedding",
822
+ baseURL,
823
+ headers: getHeaders,
824
+ fetch: options.fetch
825
+ });
501
826
  const provider = Object.assign(
502
827
  (modelId, settings) => createChatModel(modelId, settings),
503
828
  {
829
+ specificationVersion: "v3",
504
830
  chat: createChatModel,
505
- languageModel: createChatModel
831
+ languageModel: (modelId) => createChatModel(modelId),
832
+ completion: createCompletionModel,
833
+ embeddingModel: (modelId) => createEmbeddingModel(modelId),
834
+ textEmbeddingModel: createEmbeddingModel,
835
+ imageModel: () => {
836
+ throw new Error("Image models are not supported by Apertis");
837
+ }
506
838
  }
507
839
  );
508
840
  return provider;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts"],"sourcesContent":["export {\n createApertis,\n apertis,\n type ApertisProvider,\n} from \"./apertis-provider\";\nexport type {\n ApertisProviderSettings,\n ApertisChatSettings,\n ApertisModelId,\n} from \"./apertis-chat-settings\";\n","import type { LanguageModelV3 } from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\n\nexport interface ApertisProvider {\n /**\n * Creates a chat model for text generation.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation (alias for languageModel).\n */\n languageModel(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n chat: createChatModel,\n languageModel: createChatModel,\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/apertis-provider.ts","../src/apertis-chat-language-model.ts","../src/apertis-error.ts","../src/schemas/chat-response.ts","../src/utils/map-finish-reason.ts","../src/utils/convert-to-openai-messages.ts","../src/utils/convert-to-openai-tools.ts","../src/apertis-completion-language-model.ts","../src/schemas/completion-response.ts","../src/apertis-embedding-model.ts","../src/schemas/embedding-response.ts"],"sourcesContent":["export {\n createApertis,\n apertis,\n type ApertisProvider,\n} from \"./apertis-provider\";\n\n// Chat model exports\nexport type {\n ApertisProviderSettings,\n ApertisChatSettings,\n ApertisModelId,\n} from \"./apertis-chat-settings\";\n\n// Completion model exports\nexport type {\n ApertisCompletionSettings,\n ApertisCompletionModelId,\n} from \"./apertis-completion-settings\";\n\n// Embedding model exports\nexport type {\n ApertisEmbeddingSettings,\n ApertisEmbeddingModelId,\n} from \"./apertis-embedding-settings\";\n","import type {\n EmbeddingModelV3,\n LanguageModelV3,\n ProviderV3,\n} from \"@ai-sdk/provider\";\nimport { loadApiKey, withoutTrailingSlash } from \"@ai-sdk/provider-utils\";\nimport { ApertisChatLanguageModel } from \"./apertis-chat-language-model\";\nimport type {\n ApertisChatSettings,\n ApertisModelId,\n ApertisProviderSettings,\n} from \"./apertis-chat-settings\";\nimport { ApertisCompletionLanguageModel } from \"./apertis-completion-language-model\";\nimport type {\n ApertisCompletionModelId,\n ApertisCompletionSettings,\n} from \"./apertis-completion-settings\";\nimport { ApertisEmbeddingModel } from \"./apertis-embedding-model\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\n\nexport interface ApertisProvider extends ProviderV3 {\n /**\n * Creates a chat model for text generation.\n * Default call creates a chat model.\n */\n (modelId: ApertisModelId, settings?: ApertisChatSettings): LanguageModelV3;\n\n /**\n * Creates a chat model for text generation.\n */\n chat(\n modelId: ApertisModelId,\n settings?: ApertisChatSettings,\n ): LanguageModelV3;\n\n /**\n * Creates a language model (alias for chat).\n * Required by ProviderV3 interface.\n */\n languageModel(modelId: string): LanguageModelV3;\n\n /**\n * Creates a completion model for text completions.\n */\n completion(\n modelId: ApertisCompletionModelId,\n settings?: ApertisCompletionSettings,\n ): LanguageModelV3;\n\n /**\n * Creates an embedding model.\n * Required by ProviderV3 interface.\n */\n embeddingModel(modelId: string): EmbeddingModelV3;\n\n /**\n * Creates a text embedding model.\n */\n textEmbeddingModel(\n modelId: ApertisEmbeddingModelId,\n settings?: ApertisEmbeddingSettings,\n ): EmbeddingModelV3;\n\n /**\n * Image models are not supported by Apertis.\n * Required by ProviderV3 interface.\n */\n imageModel(modelId: string): never;\n}\n\nexport function createApertis(\n options: ApertisProviderSettings = {},\n): ApertisProvider {\n const baseURL =\n withoutTrailingSlash(options.baseURL) ?? \"https://api.apertis.ai/v1\";\n\n const getHeaders = () => ({\n ...options.headers,\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"APERTIS_API_KEY\",\n description: \"Apertis API key\",\n })}`,\n \"Content-Type\": \"application/json\",\n });\n\n const createChatModel = (\n modelId: ApertisModelId,\n settings: ApertisChatSettings = {},\n ): LanguageModelV3 =>\n new ApertisChatLanguageModel(modelId, settings, {\n provider: \"apertis.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createCompletionModel = (\n modelId: ApertisCompletionModelId,\n settings: ApertisCompletionSettings = {},\n ): LanguageModelV3 =>\n new ApertisCompletionLanguageModel(modelId, settings, {\n provider: \"apertis.completion\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createEmbeddingModel = (\n modelId: ApertisEmbeddingModelId,\n settings: ApertisEmbeddingSettings = {},\n ): EmbeddingModelV3 =>\n new ApertisEmbeddingModel(modelId, settings, {\n provider: \"apertis.embedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const provider: ApertisProvider = Object.assign(\n (modelId: ApertisModelId, settings?: ApertisChatSettings) =>\n createChatModel(modelId, settings),\n {\n specificationVersion: \"v3\" as const,\n chat: createChatModel,\n languageModel: (modelId: string) => createChatModel(modelId),\n completion: createCompletionModel,\n embeddingModel: (modelId: string) => createEmbeddingModel(modelId),\n textEmbeddingModel: createEmbeddingModel,\n imageModel: (): never => {\n throw new Error(\"Image models are not supported by Apertis\");\n },\n },\n );\n\n return provider;\n}\n\n/**\n * Default Apertis provider instance.\n */\nexport const apertis = createApertis();\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n LanguageModelV3Usage,\n SharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type { ApertisChatSettings } from \"./apertis-chat-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAIChatChunk,\n openAIChatChunkSchema,\n openAIChatResponseSchema,\n} from \"./schemas/chat-response\";\nimport {\n convertToOpenAIMessages,\n convertToOpenAIToolChoice,\n convertToOpenAITools,\n mapApertisFinishReason,\n} from \"./utils\";\n\nexport interface ApertisChatConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisChatLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n /**\n * Supported URL patterns for different media types.\n * Supports HTTP(S) image URLs for direct URL passing.\n */\n readonly supportedUrls: Record<string, RegExp[]> = {\n \"image/*\": [/^https?:\\/\\/.+$/],\n };\n\n constructor(\n readonly modelId: string,\n private readonly settings: ApertisChatSettings,\n private readonly config: ApertisChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n // Build V3 content array\n const content: LanguageModelV3Content[] = [];\n\n // Add text content if present\n if (choice.message.content) {\n content.push({\n type: \"text\",\n text: choice.message.content,\n });\n }\n\n // Add tool calls if present\n if (choice.message.tool_calls) {\n for (const tc of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.function.name,\n input: tc.function.arguments,\n });\n }\n }\n\n return {\n content,\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAIChatChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const toolCallBuffers: Map<\n number,\n { id: string; name: string; arguments: string }\n > = new Map();\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAIChatChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n // Skip failed parse results\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n // Handle text delta with start/delta/end pattern\n if (choice.delta.content) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.delta.content,\n });\n }\n\n // Handle tool calls\n if (choice.delta.tool_calls) {\n for (const tc of choice.delta.tool_calls) {\n let buffer = toolCallBuffers.get(tc.index);\n\n if (!buffer) {\n buffer = { id: tc.id ?? generateId(), name: \"\", arguments: \"\" };\n toolCallBuffers.set(tc.index, buffer);\n }\n\n if (tc.id) buffer.id = tc.id;\n if (tc.function?.name) buffer.name += tc.function.name;\n if (tc.function?.arguments)\n buffer.arguments += tc.function.arguments;\n }\n }\n\n // Handle finish\n if (choice.finish_reason) {\n // End text stream if started\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit completed tool calls (only those with valid names)\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n // Clear buffers after emitting\n toolCallBuffers.clear();\n\n controller.enqueue({\n type: \"finish\",\n finishReason: mapApertisFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n // End text stream if started but not ended\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n // Emit any remaining buffered tool calls when stream closes early\n for (const [, buffer] of toolCallBuffers) {\n if (buffer.name) {\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: buffer.id,\n toolName: buffer.name,\n input: buffer.arguments,\n });\n }\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n // Extract function tools from options.tools\n const tools = this.filterFunctionTools(options.tools);\n\n // Determine response format\n const responseFormat =\n options.responseFormat?.type === \"json\"\n ? { type: \"json_object\" as const }\n : undefined;\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: convertToOpenAIMessages(options.prompt),\n stream,\n };\n\n // Only add defined optional fields to avoid sending undefined to API\n if (stream) body.stream_options = { include_usage: true };\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n const convertedTools = convertToOpenAITools(tools);\n if (convertedTools !== undefined) body.tools = convertedTools;\n\n const convertedToolChoice = convertToOpenAIToolChoice(options.toolChoice);\n if (convertedToolChoice !== undefined)\n body.tool_choice = convertedToolChoice;\n\n if (responseFormat !== undefined) body.response_format = responseFormat;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.topLogprobs !== undefined)\n body.top_logprobs = this.settings.topLogprobs;\n\n return body;\n }\n\n private filterFunctionTools(\n tools: LanguageModelV3CallOptions[\"tools\"],\n ): LanguageModelV3FunctionTool[] | undefined {\n if (!tools) return undefined;\n return tools.filter(\n (tool): tool is LanguageModelV3FunctionTool => tool.type === \"function\",\n );\n }\n}\n","import { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod\";\n\nconst apertisErrorSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().optional(),\n code: z.string().nullable().optional(),\n param: z.string().nullable().optional(),\n }),\n});\n\nexport type ApertisErrorData = z.infer<typeof apertisErrorSchema>;\n\nexport const apertisFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: apertisErrorSchema,\n errorToMessage: (error) => error.error.message,\n});\n","import { z } from \"zod\";\n\nexport const openAIChatResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n logprobs: z.any().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().optional(),\n })\n .optional(),\n});\n\nexport type OpenAIChatResponse = z.infer<typeof openAIChatResponseSchema>;\n\nexport const openAIChatChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\").optional(),\n created: z.number().optional(),\n model: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.literal(\"assistant\").optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n })\n .optional(),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n })\n .nullish(),\n});\n\nexport type OpenAIChatChunk = z.infer<typeof openAIChatChunkSchema>;\n","import type { LanguageModelV3FinishReason } from \"@ai-sdk/provider\";\n\nexport function mapApertisFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n case \"tool_calls\":\n return { unified: \"tool-calls\", raw };\n case \"content_filter\":\n return { unified: \"content-filter\", raw };\n default:\n return { unified: \"other\", raw };\n }\n}\n","import type { LanguageModelV3Prompt } from \"@ai-sdk/provider\";\n\nexport type OpenAIMessage =\n | { role: \"system\"; content: string }\n | { role: \"user\"; content: string | OpenAIContentPart[] }\n | { role: \"assistant\"; content: string | null; tool_calls?: OpenAIToolCall[] }\n | { role: \"tool\"; tool_call_id: string; content: string };\n\nexport type OpenAIContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"image_url\";\n image_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n };\n\nexport type OpenAIToolCall = {\n id: string;\n type: \"function\";\n function: { name: string; arguments: string };\n};\n\nexport function convertToOpenAIMessages(\n prompt: LanguageModelV3Prompt,\n): OpenAIMessage[] {\n const messages: OpenAIMessage[] = [];\n\n for (const message of prompt) {\n switch (message.role) {\n case \"system\":\n // V3 system messages have content as string directly\n messages.push({ role: \"system\", content: message.content });\n break;\n\n case \"user\":\n messages.push({\n role: \"user\",\n content: message.content.map((part): OpenAIContentPart => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"file\": {\n // V3 uses 'file' type with mediaType for images\n if (part.mediaType?.startsWith(\"image/\")) {\n let url: string;\n if (part.data instanceof URL) {\n url = part.data.toString();\n } else if (typeof part.data === \"string\") {\n // Assume it's a URL string or base64\n if (\n part.data.startsWith(\"http://\") ||\n part.data.startsWith(\"https://\")\n ) {\n url = part.data;\n } else {\n // Base64 encoded string\n url = `data:${part.mediaType};base64,${part.data}`;\n }\n } else {\n // Uint8Array\n url = `data:${part.mediaType};base64,${Buffer.from(part.data).toString(\"base64\")}`;\n }\n return {\n type: \"image_url\",\n image_url: { url },\n };\n }\n throw new Error(\n `Unsupported file type: ${part.mediaType}. Only image/* is supported.`,\n );\n }\n default:\n throw new Error(\n `Unsupported user content part type: ${(part as { type: string }).type}`,\n );\n }\n }),\n });\n break;\n\n case \"assistant\": {\n const textContent = message.content\n .filter((p) => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\");\n\n const toolCalls = message.content\n .filter((p) => p.type === \"tool-call\")\n .map((tc) => {\n // V3 uses 'input' instead of 'args'\n let arguments_str = \"{}\";\n try {\n arguments_str =\n typeof tc.input === \"string\"\n ? tc.input\n : JSON.stringify(tc.input);\n } catch {\n arguments_str = \"{}\";\n }\n return {\n id: tc.toolCallId,\n type: \"function\" as const,\n function: { name: tc.toolName, arguments: arguments_str },\n };\n });\n\n messages.push({\n role: \"assistant\",\n content: textContent || null,\n ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n });\n break;\n }\n\n case \"tool\":\n for (const result of message.content) {\n if (result.type !== \"tool-result\") continue;\n\n // V3 uses 'output' instead of 'result'\n let content = \"{}\";\n const output = result.output;\n\n if (typeof output === \"string\") {\n content = output;\n } else if (Array.isArray(output)) {\n // Output can be an array of content parts\n const textParts = output\n .filter((p) => p.type === \"text\")\n .map((p) => p.text);\n content = textParts.join(\"\");\n } else {\n try {\n content = JSON.stringify(output);\n } catch {\n content = \"{}\";\n }\n }\n\n messages.push({\n role: \"tool\",\n tool_call_id: result.toolCallId,\n content,\n });\n }\n break;\n }\n }\n\n return messages;\n}\n","import type {\n LanguageModelV3FunctionTool,\n LanguageModelV3ToolChoice,\n} from \"@ai-sdk/provider\";\n\nexport type OpenAITool = {\n type: \"function\";\n function: {\n name: string;\n description?: string;\n parameters: Record<string, unknown>;\n };\n};\n\nexport type OpenAIToolChoice =\n | \"none\"\n | \"auto\"\n | \"required\"\n | { type: \"function\"; function: { name: string } };\n\nexport function convertToOpenAITools(\n tools: LanguageModelV3FunctionTool[] | undefined,\n): OpenAITool[] | undefined {\n if (!tools || tools.length === 0) return undefined;\n\n return tools.map((tool) => ({\n type: \"function\" as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema as Record<string, unknown>,\n },\n }));\n}\n\nexport function convertToOpenAIToolChoice(\n toolChoice: LanguageModelV3ToolChoice | undefined,\n): OpenAIToolChoice | undefined {\n if (!toolChoice) return undefined;\n\n switch (toolChoice.type) {\n case \"none\":\n return \"none\";\n case \"auto\":\n return \"auto\";\n case \"required\":\n return \"required\";\n case \"tool\":\n if (!toolChoice.toolName) return undefined;\n return {\n type: \"function\",\n function: { name: toolChoice.toolName },\n };\n default:\n return undefined;\n }\n}\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamPart,\n LanguageModelV3StreamResult,\n} from \"@ai-sdk/provider\";\nimport {\n type ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type {\n ApertisCompletionModelId,\n ApertisCompletionSettings,\n} from \"./apertis-completion-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport {\n type OpenAICompletionChunk,\n openAICompletionChunkSchema,\n openAICompletionResponseSchema,\n} from \"./schemas/completion-response\";\n\nexport interface ApertisCompletionConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisCompletionLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n constructor(\n readonly modelId: ApertisCompletionModelId,\n private readonly settings: ApertisCompletionSettings,\n private readonly config: ApertisCompletionConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const body = this.buildRequestBody(options, false);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAICompletionResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n const choice = response.choices[0];\n\n const content: LanguageModelV3Content[] = [];\n\n if (choice.text) {\n content.push({\n type: \"text\",\n text: choice.text,\n });\n }\n\n return {\n content,\n finishReason: this.mapFinishReason(choice.finish_reason),\n usage: {\n inputTokens: {\n total: response.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: response.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings: [],\n request: { body },\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const body = this.buildRequestBody(options, true);\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/completions`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openAICompletionChunkSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n let textId: string | null = null;\n\n const transformStream = new TransformStream<\n ParseResult<OpenAICompletionChunk>,\n LanguageModelV3StreamPart\n >({\n transform(parseResult, controller) {\n if (!parseResult.success) {\n return;\n }\n\n const chunk = parseResult.value;\n const choice = chunk.choices[0];\n\n if (!choice) return;\n\n if (choice.text) {\n if (!textId) {\n textId = generateId();\n controller.enqueue({\n type: \"text-start\",\n id: textId,\n });\n }\n controller.enqueue({\n type: \"text-delta\",\n id: textId,\n delta: choice.text,\n });\n }\n\n if (choice.finish_reason) {\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n\n controller.enqueue({\n type: \"finish\",\n finishReason: {\n unified:\n choice.finish_reason === \"stop\"\n ? \"stop\"\n : choice.finish_reason === \"length\"\n ? \"length\"\n : \"other\",\n raw: choice.finish_reason ?? undefined,\n },\n usage: {\n inputTokens: {\n total: chunk.usage?.prompt_tokens ?? 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: chunk.usage?.completion_tokens ?? 0,\n text: undefined,\n reasoning: undefined,\n },\n },\n });\n }\n },\n flush(controller) {\n if (textId) {\n controller.enqueue({\n type: \"text-end\",\n id: textId,\n });\n }\n },\n });\n\n return {\n stream: response.pipeThrough(transformStream),\n request: { body },\n };\n }\n\n private buildRequestBody(\n options: LanguageModelV3CallOptions,\n stream: boolean,\n ) {\n const prompt = this.convertPromptToText(options.prompt);\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n prompt,\n stream,\n };\n\n if (stream) body.stream_options = { include_usage: true };\n if (options.maxOutputTokens !== undefined)\n body.max_tokens = options.maxOutputTokens;\n if (options.temperature !== undefined)\n body.temperature = options.temperature;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.frequencyPenalty !== undefined)\n body.frequency_penalty = options.frequencyPenalty;\n if (options.presencePenalty !== undefined)\n body.presence_penalty = options.presencePenalty;\n if (options.stopSequences !== undefined) body.stop = options.stopSequences;\n if (options.seed !== undefined) body.seed = options.seed;\n\n // Completion-specific settings\n if (this.settings.echo !== undefined) body.echo = this.settings.echo;\n if (this.settings.logprobs !== undefined)\n body.logprobs = this.settings.logprobs;\n if (this.settings.suffix !== undefined) body.suffix = this.settings.suffix;\n if (this.settings.user !== undefined) body.user = this.settings.user;\n\n return body;\n }\n\n private convertPromptToText(\n prompt: LanguageModelV3CallOptions[\"prompt\"],\n ): string {\n const parts: string[] = [];\n\n for (const message of prompt) {\n if (message.role === \"system\") {\n parts.push(message.content);\n } else if (message.role === \"user\") {\n for (const part of message.content) {\n if (part.type === \"text\") {\n parts.push(part.text);\n }\n }\n } else if (message.role === \"assistant\") {\n for (const part of message.content) {\n if (part.type === \"text\") {\n parts.push(part.text);\n }\n }\n }\n }\n\n return parts.join(\"\\n\\n\");\n }\n\n private mapFinishReason(\n finishReason: string | null | undefined,\n ): LanguageModelV3FinishReason {\n const raw = finishReason ?? undefined;\n\n switch (finishReason) {\n case \"stop\":\n return { unified: \"stop\", raw };\n case \"length\":\n return { unified: \"length\", raw };\n default:\n return { unified: \"other\", raw };\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const openAICompletionResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"text_completion\"),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n text: z.string(),\n index: z.number(),\n logprobs: z\n .object({\n tokens: z.array(z.string()).optional(),\n token_logprobs: z.array(z.number()).optional(),\n top_logprobs: z.array(z.record(z.number())).optional(),\n text_offset: z.array(z.number()).optional(),\n })\n .nullable()\n .optional(),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAICompletionResponse = z.infer<\n typeof openAICompletionResponseSchema\n>;\n\n// Streaming chunk schema\nexport const openAICompletionChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"text_completion\"),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n text: z.string(),\n index: z.number(),\n logprobs: z\n .object({\n tokens: z.array(z.string()).optional(),\n token_logprobs: z.array(z.number()).optional(),\n top_logprobs: z.array(z.record(z.number())).optional(),\n text_offset: z.array(z.number()).optional(),\n })\n .nullable()\n .optional(),\n finish_reason: z.string().nullable().optional(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional()\n .nullable(),\n});\n\nexport type OpenAICompletionChunk = z.infer<typeof openAICompletionChunkSchema>;\n","import type {\n EmbeddingModelV3,\n EmbeddingModelV3CallOptions,\n EmbeddingModelV3Result,\n} from \"@ai-sdk/provider\";\nimport {\n createJsonResponseHandler,\n postJsonToApi,\n} from \"@ai-sdk/provider-utils\";\nimport type {\n ApertisEmbeddingModelId,\n ApertisEmbeddingSettings,\n} from \"./apertis-embedding-settings\";\nimport { apertisFailedResponseHandler } from \"./apertis-error\";\nimport { openAIEmbeddingResponseSchema } from \"./schemas/embedding-response\";\n\nexport interface ApertisEmbeddingConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport class ApertisEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = \"v3\" as const;\n\n readonly maxEmbeddingsPerCall: number;\n readonly supportsParallelCalls: boolean;\n\n constructor(\n readonly modelId: ApertisEmbeddingModelId,\n private readonly settings: ApertisEmbeddingSettings,\n private readonly config: ApertisEmbeddingConfig,\n ) {\n this.maxEmbeddingsPerCall = settings.maxEmbeddingsPerCall ?? 2048;\n this.supportsParallelCalls = settings.supportsParallelCalls ?? true;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed(\n options: EmbeddingModelV3CallOptions,\n ): Promise<EmbeddingModelV3Result> {\n const body: Record<string, unknown> = {\n model: this.modelId,\n input: options.values,\n encoding_format: \"float\",\n };\n\n // Add optional parameters\n if (this.settings.dimensions !== undefined) {\n body.dimensions = this.settings.dimensions;\n }\n if (this.settings.user !== undefined) {\n body.user = this.settings.user;\n }\n\n const { value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/embeddings`,\n headers: this.config.headers(),\n body,\n failedResponseHandler: apertisFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIEmbeddingResponseSchema,\n ),\n fetch: this.config.fetch,\n abortSignal: options.abortSignal,\n });\n\n return {\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage\n ? { tokens: response.usage.prompt_tokens }\n : undefined,\n warnings: [],\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const openAIEmbeddingResponseSchema = z.object({\n object: z.literal(\"list\"),\n data: z.array(\n z.object({\n object: z.literal(\"embedding\"),\n embedding: z.array(z.number()),\n index: z.number(),\n }),\n ),\n model: z.string(),\n usage: z\n .object({\n prompt_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAIEmbeddingResponse = z.infer<\n typeof openAIEmbeddingResponseSchema\n>;\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils","import_zod","import_provider_utils","import_zod","import_provider_utils","import_zod"]}