@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 +52 -0
- package/dist/index.cjs +336 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +66 -5
- package/dist/index.d.ts +66 -5
- package/dist/index.js +341 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
|
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,
|
|
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,
|
|
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;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAAA,yBAAiD;;;ACWjD,IAAAC,yBAMO;;;AClBP,4BAA+C;AAC/C,iBAAkB;AAElB,IAAM,qBAAqB,aAAE,OAAO;AAAA,EAClC,OAAO,aAAE,OAAO;AAAA,IACd,SAAS,aAAE,OAAO;AAAA,IAClB,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,MAAM,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACrC,OAAO,aAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,CAAC;AACH,CAAC;AAIM,IAAM,mCAA+B,sDAA+B;AAAA,EACzE,aAAa;AAAA,EACb,gBAAgB,CAAC,UAAU,MAAM,MAAM;AACzC,CAAC;;;ACjBD,IAAAC,cAAkB;AAEX,IAAM,2BAA2B,cAAE,OAAO;AAAA,EAC/C,IAAI,cAAE,OAAO;AAAA,EACb,QAAQ,cAAE,QAAQ,iBAAiB,EAAE,SAAS;AAAA,EAC9C,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,cAAE;AAAA,IACT,cAAE,OAAO;AAAA,MACP,OAAO,cAAE,OAAO;AAAA,MAChB,SAAS,cAAE,OAAO;AAAA,QAChB,MAAM,cAAE,QAAQ,WAAW;AAAA,QAC3B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,QAC7B,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,IAAI,cAAE,OAAO;AAAA,YACb,MAAM,cAAE,QAAQ,UAAU;AAAA,YAC1B,UAAU,cAAE,OAAO;AAAA,cACjB,MAAM,cAAE,OAAO;AAAA,cACf,WAAW,cAAE,OAAO;AAAA,YACtB,CAAC;AAAA,UACH,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAe,cAAE,OAAO,EAAE,SAAS;AAAA,MACnC,UAAU,cAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cACJ,OAAO;AAAA,IACN,eAAe,cAAE,OAAO;AAAA,IACxB,mBAAmB,cAAE,OAAO;AAAA,IAC5B,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AACd,CAAC;AAIM,IAAM,wBAAwB,cAAE,OAAO;AAAA,EAC5C,IAAI,cAAE,OAAO;AAAA,EACb,QAAQ,cAAE,QAAQ,uBAAuB,EAAE,SAAS;AAAA,EACpD,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,cAAE;AAAA,IACT,cAAE,OAAO;AAAA,MACP,OAAO,cAAE,OAAO;AAAA,MAChB,OAAO,cAAE,OAAO;AAAA,QACd,MAAM,cAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,QACtC,SAAS,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,QACxC,YAAY,cACT;AAAA,UACC,cAAE,OAAO;AAAA,YACP,OAAO,cAAE,OAAO;AAAA,YAChB,IAAI,cAAE,OAAO,EAAE,SAAS;AAAA,YACxB,MAAM,cAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,YACrC,UAAU,cACP,OAAO;AAAA,cACN,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,cAC1B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,YACjC,CAAC,EACA,SAAS;AAAA,UACd,CAAC;AAAA,QACH,EACC,SAAS;AAAA,MACd,CAAC;AAAA,MACD,eAAe,cAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EACA,OAAO,cACJ,OAAO;AAAA,IACN,eAAe,cAAE,OAAO;AAAA,IACxB,mBAAmB,cAAE,OAAO;AAAA,EAC9B,CAAC,EACA,QAAQ;AACb,CAAC;;;AC3EM,SAAS,uBACd,cAC6B;AAC7B,QAAM,MAAM,gBAAgB;AAE5B,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO,EAAE,SAAS,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,aAAO,EAAE,SAAS,UAAU,IAAI;AAAA,IAClC,KAAK;AACH,aAAO,EAAE,SAAS,cAAc,IAAI;AAAA,IACtC,KAAK;AACH,aAAO,EAAE,SAAS,kBAAkB,IAAI;AAAA,IAC1C;AACE,aAAO,EAAE,SAAS,SAAS,IAAI;AAAA,EACnC;AACF;;;ACEO,SAAS,wBACd,QACiB;AACjB,QAAM,WAA4B,CAAC;AAEnC,aAAW,WAAW,QAAQ;AAC5B,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AAEH,iBAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,QAAQ,CAAC;AAC1D;AAAA,MAEF,KAAK;AACH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,QAAQ,QAAQ,IAAI,CAAC,SAA4B;AACxD,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK;AACH,uBAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,cACzC,KAAK,QAAQ;AAEX,oBAAI,KAAK,WAAW,WAAW,QAAQ,GAAG;AACxC,sBAAI;AACJ,sBAAI,KAAK,gBAAgB,KAAK;AAC5B,0BAAM,KAAK,KAAK,SAAS;AAAA,kBAC3B,WAAW,OAAO,KAAK,SAAS,UAAU;AAExC,wBACE,KAAK,KAAK,WAAW,SAAS,KAC9B,KAAK,KAAK,WAAW,UAAU,GAC/B;AACA,4BAAM,KAAK;AAAA,oBACb,OAAO;AAEL,4BAAM,QAAQ,KAAK,SAAS,WAAW,KAAK,IAAI;AAAA,oBAClD;AAAA,kBACF,OAAO;AAEL,0BAAM,QAAQ,KAAK,SAAS,WAAW,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ,CAAC;AAAA,kBAClF;AACA,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,WAAW,EAAE,IAAI;AAAA,kBACnB;AAAA,gBACF;AACA,sBAAM,IAAI;AAAA,kBACR,0BAA0B,KAAK,SAAS;AAAA,gBAC1C;AAAA,cACF;AAAA,cACA;AACE,sBAAM,IAAI;AAAA,kBACR,uCAAwC,KAA0B,IAAI;AAAA,gBACxE;AAAA,YACJ;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MAEF,KAAK,aAAa;AAChB,cAAM,cAAc,QAAQ,QACzB,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,EAAE;AAEV,cAAM,YAAY,QAAQ,QACvB,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW,EACpC,IAAI,CAAC,OAAO;AAEX,cAAI,gBAAgB;AACpB,cAAI;AACF,4BACE,OAAO,GAAG,UAAU,WAChB,GAAG,QACH,KAAK,UAAU,GAAG,KAAK;AAAA,UAC/B,QAAQ;AACN,4BAAgB;AAAA,UAClB;AACA,iBAAO;AAAA,YACL,IAAI,GAAG;AAAA,YACP,MAAM;AAAA,YACN,UAAU,EAAE,MAAM,GAAG,UAAU,WAAW,cAAc;AAAA,UAC1D;AAAA,QACF,CAAC;AAEH,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,eAAe;AAAA,UACxB,GAAI,UAAU,SAAS,IAAI,EAAE,YAAY,UAAU,IAAI,CAAC;AAAA,QAC1D,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK;AACH,mBAAW,UAAU,QAAQ,SAAS;AACpC,cAAI,OAAO,SAAS,cAAe;AAGnC,cAAI,UAAU;AACd,gBAAM,SAAS,OAAO;AAEtB,cAAI,OAAO,WAAW,UAAU;AAC9B,sBAAU;AAAA,UACZ,WAAW,MAAM,QAAQ,MAAM,GAAG;AAEhC,kBAAM,YAAY,OACf,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,EAC/B,IAAI,CAAC,MAAM,EAAE,IAAI;AACpB,sBAAU,UAAU,KAAK,EAAE;AAAA,UAC7B,OAAO;AACL,gBAAI;AACF,wBAAU,KAAK,UAAU,MAAM;AAAA,YACjC,QAAQ;AACN,wBAAU;AAAA,YACZ;AAAA,UACF;AAEA,mBAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc,OAAO;AAAA,YACrB;AAAA,UACF,CAAC;AAAA,QACH;AACA;AAAA,IACJ;AAAA,EACF;AAEA,SAAO;AACT;;;AChIO,SAAS,qBACd,OAC0B;AAC1B,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO;AAEzC,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,IACnB;AAAA,EACF,EAAE;AACJ;AAEO,SAAS,0BACd,YAC8B;AAC9B,MAAI,CAAC,WAAY,QAAO;AAExB,UAAQ,WAAW,MAAM;AAAA,IACvB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,UAAI,CAAC,WAAW,SAAU,QAAO;AACjC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,EAAE,MAAM,WAAW,SAAS;AAAA,MACxC;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;ALhBO,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACW,SACQ,UACA,QACjB;AAHS;AACQ;AACA;AAAA,EAChB;AAAA,EAdM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB,gBAA0C;AAAA,IACjD,WAAW,CAAC,iBAAiB;AAAA,EAC/B;AAAA,EAQA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,WACJ,SACwC;AACxC,UAAM,OAAO,KAAK,iBAAiB,SAAS,KAAK;AAEjD,UAAM,EAAE,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,SAAS,SAAS,QAAQ,CAAC;AAGjC,UAAM,UAAoC,CAAC;AAG3C,QAAI,OAAO,QAAQ,SAAS;AAC1B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,MAAM,OAAO,QAAQ;AAAA,MACvB,CAAC;AAAA,IACH;AAGA,QAAI,OAAO,QAAQ,YAAY;AAC7B,iBAAW,MAAM,OAAO,QAAQ,YAAY;AAC1C,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,GAAG;AAAA,UACf,UAAU,GAAG,SAAS;AAAA,UACtB,OAAO,GAAG,SAAS;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,cAAc,uBAAuB,OAAO,aAAa;AAAA,MACzD,OAAO;AAAA,QACL,aAAa;AAAA,UACX,OAAO,SAAS,OAAO,iBAAiB;AAAA,UACxC,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY;AAAA,QACd;AAAA,QACA,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO,qBAAqB;AAAA,UAC5C,MAAM;AAAA,UACN,WAAW;AAAA,QACb;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,OAAO,KAAK,iBAAiB,SAAS,IAAI;AAEhD,UAAM,EAAE,OAAO,SAAS,IAAI,UAAM,sCAAc;AAAA,MAC9C,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,MAC3B,SAAS,KAAK,OAAO,QAAQ;AAAA,MAC7B;AAAA,MACA,uBAAuB;AAAA,MACvB,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,aAAa,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,kBAGF,oBAAI,IAAI;AAEZ,QAAI,SAAwB;AAE5B,UAAM,kBAAkB,IAAI,gBAG1B;AAAA,MACA,UAAU,aAAa,YAAY;AAEjC,YAAI,CAAC,YAAY,SAAS;AACxB;AAAA,QACF;AAEA,cAAM,QAAQ,YAAY;AAC1B,cAAM,SAAS,MAAM,QAAQ,CAAC;AAE9B,YAAI,CAAC,OAAQ;AAGb,YAAI,OAAO,MAAM,SAAS;AACxB,cAAI,CAAC,QAAQ;AACX,yBAAS,mCAAW;AACpB,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AACA,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,YACJ,OAAO,OAAO,MAAM;AAAA,UACtB,CAAC;AAAA,QACH;AAGA,YAAI,OAAO,MAAM,YAAY;AAC3B,qBAAW,MAAM,OAAO,MAAM,YAAY;AACxC,gBAAI,SAAS,gBAAgB,IAAI,GAAG,KAAK;AAEzC,gBAAI,CAAC,QAAQ;AACX,uBAAS,EAAE,IAAI,GAAG,UAAM,mCAAW,GAAG,MAAM,IAAI,WAAW,GAAG;AAC9D,8BAAgB,IAAI,GAAG,OAAO,MAAM;AAAA,YACtC;AAEA,gBAAI,GAAG,GAAI,QAAO,KAAK,GAAG;AAC1B,gBAAI,GAAG,UAAU,KAAM,QAAO,QAAQ,GAAG,SAAS;AAClD,gBAAI,GAAG,UAAU;AACf,qBAAO,aAAa,GAAG,SAAS;AAAA,UACpC;AAAA,QACF;AAGA,YAAI,OAAO,eAAe;AAExB,cAAI,QAAQ;AACV,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,IAAI;AAAA,YACN,CAAC;AAAA,UACH;AAGA,qBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,gBAAI,OAAO,MAAM;AACf,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,YAAY,OAAO;AAAA,gBACnB,UAAU,OAAO;AAAA,gBACjB,OAAO,OAAO;AAAA,cAChB,CAAC;AAAA,YACH;AAAA,UACF;AAEA,0BAAgB,MAAM;AAEtB,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,cAAc,uBAAuB,OAAO,aAAa;AAAA,YACzD,OAAO;AAAA,cACL,aAAa;AAAA,gBACX,OAAO,MAAM,OAAO,iBAAiB;AAAA,gBACrC,SAAS;AAAA,gBACT,WAAW;AAAA,gBACX,YAAY;AAAA,cACd;AAAA,cACA,cAAc;AAAA,gBACZ,OAAO,MAAM,OAAO,qBAAqB;AAAA,gBACzC,MAAM;AAAA,gBACN,WAAW;AAAA,cACb;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAEhB,YAAI,QAAQ;AACV,qBAAW,QAAQ;AAAA,YACjB,MAAM;AAAA,YACN,IAAI;AAAA,UACN,CAAC;AAAA,QACH;AAGA,mBAAW,CAAC,EAAE,MAAM,KAAK,iBAAiB;AACxC,cAAI,OAAO,MAAM;AACf,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN,YAAY,OAAO;AAAA,cACnB,UAAU,OAAO;AAAA,cACjB,OAAO,OAAO;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,SAAS,YAAY,eAAe;AAAA,MAC5C,SAAS,EAAE,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,iBACN,SACA,QACA;AAEA,UAAM,QAAQ,KAAK,oBAAoB,QAAQ,KAAK;AAGpD,UAAM,iBACJ,QAAQ,gBAAgB,SAAS,SAC7B,EAAE,MAAM,cAAuB,IAC/B;AAEN,UAAM,OAAgC;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ,UAAU,wBAAwB,QAAQ,MAAM;AAAA,MAChD;AAAA,IACF;AAGA,QAAI,OAAQ,MAAK,iBAAiB,EAAE,eAAe,KAAK;AACxD,QAAI,QAAQ,gBAAgB;AAC1B,WAAK,cAAc,QAAQ;AAC7B,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,aAAa,QAAQ;AAC5B,QAAI,QAAQ,SAAS,OAAW,MAAK,QAAQ,QAAQ;AACrD,QAAI,QAAQ,qBAAqB;AAC/B,WAAK,oBAAoB,QAAQ;AACnC,QAAI,QAAQ,oBAAoB;AAC9B,WAAK,mBAAmB,QAAQ;AAClC,QAAI,QAAQ,kBAAkB,OAAW,MAAK,OAAO,QAAQ;AAC7D,QAAI,QAAQ,SAAS,OAAW,MAAK,OAAO,QAAQ;AAEpD,UAAM,iBAAiB,qBAAqB,KAAK;AACjD,QAAI,mBAAmB,OAAW,MAAK,QAAQ;AAE/C,UAAM,sBAAsB,0BAA0B,QAAQ,UAAU;AACxE,QAAI,wBAAwB;AAC1B,WAAK,cAAc;AAErB,QAAI,mBAAmB,OAAW,MAAK,kBAAkB;AACzD,QAAI,KAAK,SAAS,SAAS,OAAW,MAAK,OAAO,KAAK,SAAS;AAChE,QAAI,KAAK,SAAS,aAAa;AAC7B,WAAK,WAAW,KAAK,SAAS;AAChC,QAAI,KAAK,SAAS,gBAAgB;AAChC,WAAK,eAAe,KAAK,SAAS;AAEpC,WAAO;AAAA,EACT;AAAA,EAEQ,oBACN,OAC2C;AAC3C,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MAAM;AAAA,MACX,CAAC,SAA8C,KAAK,SAAS;AAAA,IAC/D;AAAA,EACF;AACF;;;ADtSO,SAAS,cACd,UAAmC,CAAC,GACnB;AACjB,QAAM,cACJ,6CAAqB,QAAQ,OAAO,KAAK;AAE3C,QAAM,aAAa,OAAO;AAAA,IACxB,GAAG,QAAQ;AAAA,IACX,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAgC,CAAC,MAEjC,IAAI,yBAAyB,SAAS,UAAU;AAAA,IAC9C,UAAU;AAAA,IACV;AAAA,IACA,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,QAAM,WAA4B,OAAO;AAAA,IACvC,CAAC,SAAyB,aACxB,gBAAgB,SAAS,QAAQ;AAAA,IACnC;AAAA,MACE,MAAM;AAAA,MACN,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,SAAO;AACT;AAKO,IAAM,UAAU,cAAc;","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"]}
|