@revojs/ai 0.1.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +617 -0
- package/dist/index.js +76 -0
- package/dist/module/index.d.ts +3 -0
- package/dist/module/index.js +47 -0
- package/dist/protocols/anthropic-messages.d.ts +7 -0
- package/dist/protocols/anthropic-messages.js +377 -0
- package/dist/protocols/google-models.d.ts +7 -0
- package/dist/protocols/google-models.js +331 -0
- package/dist/protocols/openai-chat-completions.d.ts +7 -0
- package/dist/protocols/openai-chat-completions.js +334 -0
- package/dist/protocols/openai-responses.d.ts +7 -0
- package/dist/protocols/openai-responses.js +409 -0
- package/dist/providers/anthropic.d.ts +29 -0
- package/dist/providers/anthropic.js +40 -0
- package/dist/providers/deepseek.d.ts +15 -0
- package/dist/providers/deepseek.js +26 -0
- package/dist/providers/google.d.ts +25 -0
- package/dist/providers/google.js +36 -0
- package/dist/providers/moonshotai.d.ts +21 -0
- package/dist/providers/moonshotai.js +32 -0
- package/dist/providers/openai.d.ts +29 -0
- package/dist/providers/openai.js +40 -0
- package/dist/providers/opencode.d.ts +163 -0
- package/dist/providers/opencode.js +183 -0
- package/dist/providers/xai.d.ts +17 -0
- package/dist/providers/xai.js +28 -0
- package/dist/types/index.d.ts +14 -0
- package/package.json +37 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
import { type Scope, type Source, type SourceScope, type SourceValue } from "revojs";
|
|
2
|
+
import type { JSONObject, JSONValue, JsonSchema } from "revojs/shared";
|
|
3
|
+
export type SharedWarning = {
|
|
4
|
+
type: "unsupported" | "compatibility";
|
|
5
|
+
feature: string;
|
|
6
|
+
details?: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "deprecated";
|
|
9
|
+
setting: string;
|
|
10
|
+
message: string;
|
|
11
|
+
} | {
|
|
12
|
+
type: "other";
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
export type SharedFileData = SharedFileDataData | SharedFileDataUrl | SharedFileDataReference | SharedFileDataText;
|
|
16
|
+
export type LanguageModelMessage = ({
|
|
17
|
+
role: "system";
|
|
18
|
+
content: string;
|
|
19
|
+
} | {
|
|
20
|
+
role: "user";
|
|
21
|
+
content: Array<LanguageModelTextPart | LanguageModelFilePart>;
|
|
22
|
+
} | {
|
|
23
|
+
role: "assistant";
|
|
24
|
+
content: Array<LanguageModelTextPart | LanguageModelFilePart | LanguageModelCustomPart | LanguageModelReasoningPart | LanguageModelReasoningFilePart | LanguageModelToolCallPart | LanguageModelToolResultPart>;
|
|
25
|
+
} | {
|
|
26
|
+
role: "tool";
|
|
27
|
+
content: Array<LanguageModelToolResultPart | LanguageModelToolApprovalResponsePart>;
|
|
28
|
+
}) & {
|
|
29
|
+
providerOptions?: Record<string, JSONObject>;
|
|
30
|
+
};
|
|
31
|
+
export type LanguageModelContent = LanguageModelText | LanguageModelReasoning | LanguageModelCustomContent | LanguageModelReasoningFile | LanguageModelFile | LanguageModelToolApprovalRequest | LanguageModelSource | LanguageModelToolCall | LanguageModelToolResult;
|
|
32
|
+
export interface LanguageModelText {
|
|
33
|
+
type: "text";
|
|
34
|
+
text: string;
|
|
35
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
36
|
+
}
|
|
37
|
+
export interface LanguageModelReasoning {
|
|
38
|
+
type: "reasoning";
|
|
39
|
+
text: string;
|
|
40
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
41
|
+
}
|
|
42
|
+
export interface LanguageModelCustomContent {
|
|
43
|
+
type: "custom";
|
|
44
|
+
kind: `${string}.${string}`;
|
|
45
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
46
|
+
}
|
|
47
|
+
export interface LanguageModelReasoningFile {
|
|
48
|
+
type: "reasoning-file";
|
|
49
|
+
mediaType: string;
|
|
50
|
+
data: SharedFileDataData | SharedFileDataUrl;
|
|
51
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
52
|
+
}
|
|
53
|
+
export interface LanguageModelFile {
|
|
54
|
+
type: "file";
|
|
55
|
+
mediaType: string;
|
|
56
|
+
data: SharedFileDataData | SharedFileDataUrl;
|
|
57
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
58
|
+
}
|
|
59
|
+
export interface LanguageModelToolApprovalRequest {
|
|
60
|
+
type: "tool-approval-request";
|
|
61
|
+
approvalId: string;
|
|
62
|
+
toolCallId: string;
|
|
63
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
64
|
+
}
|
|
65
|
+
export type LanguageModelSource = {
|
|
66
|
+
type: "source";
|
|
67
|
+
sourceType: "url";
|
|
68
|
+
id: string;
|
|
69
|
+
url: string;
|
|
70
|
+
title?: string;
|
|
71
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
72
|
+
} | {
|
|
73
|
+
type: "source";
|
|
74
|
+
sourceType: "document";
|
|
75
|
+
id: string;
|
|
76
|
+
mediaType: string;
|
|
77
|
+
title: string;
|
|
78
|
+
fileName?: string;
|
|
79
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
80
|
+
};
|
|
81
|
+
export interface LanguageModelToolCall {
|
|
82
|
+
type: "tool-call";
|
|
83
|
+
toolCallId: string;
|
|
84
|
+
toolName: string;
|
|
85
|
+
input: string;
|
|
86
|
+
providerExecuted?: boolean;
|
|
87
|
+
dynamic?: boolean;
|
|
88
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
89
|
+
}
|
|
90
|
+
export interface LanguageModelToolResult {
|
|
91
|
+
type: "tool-result";
|
|
92
|
+
toolCallId: string;
|
|
93
|
+
toolName: string;
|
|
94
|
+
result: NonNullable<JSONValue>;
|
|
95
|
+
isError?: boolean;
|
|
96
|
+
preliminary?: boolean;
|
|
97
|
+
dynamic?: boolean;
|
|
98
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
99
|
+
}
|
|
100
|
+
export interface LanguageModelFunctionTool {
|
|
101
|
+
type: "function";
|
|
102
|
+
name: string;
|
|
103
|
+
description?: string;
|
|
104
|
+
inputSchema: JsonSchema;
|
|
105
|
+
inputExamples?: Array<{
|
|
106
|
+
input: JSONObject;
|
|
107
|
+
}>;
|
|
108
|
+
strict?: boolean;
|
|
109
|
+
providerOptions?: Record<string, JSONObject>;
|
|
110
|
+
}
|
|
111
|
+
export interface LanguageModelProviderTool {
|
|
112
|
+
type: "provider";
|
|
113
|
+
id: `${string}.${string}`;
|
|
114
|
+
name: string;
|
|
115
|
+
args: JSONObject;
|
|
116
|
+
}
|
|
117
|
+
export type LanguageModelToolChoice = {
|
|
118
|
+
type: "auto";
|
|
119
|
+
} | {
|
|
120
|
+
type: "none";
|
|
121
|
+
} | {
|
|
122
|
+
type: "required";
|
|
123
|
+
} | {
|
|
124
|
+
type: "tool";
|
|
125
|
+
toolName: string;
|
|
126
|
+
};
|
|
127
|
+
export interface LanguageModelCallOptions<TModel extends string = string> {
|
|
128
|
+
model: TModel;
|
|
129
|
+
prompt: Array<LanguageModelMessage>;
|
|
130
|
+
maxOutputTokens?: number;
|
|
131
|
+
temperature?: number;
|
|
132
|
+
stopSequences?: Array<string>;
|
|
133
|
+
topP?: number;
|
|
134
|
+
topK?: number;
|
|
135
|
+
presencePenalty?: number;
|
|
136
|
+
frequencyPenalty?: number;
|
|
137
|
+
responseFormat?: {
|
|
138
|
+
type: "text";
|
|
139
|
+
} | {
|
|
140
|
+
type: "json";
|
|
141
|
+
schema?: JsonSchema;
|
|
142
|
+
name?: string;
|
|
143
|
+
description?: string;
|
|
144
|
+
};
|
|
145
|
+
seed?: number;
|
|
146
|
+
tools?: Array<LanguageModelFunctionTool | LanguageModelProviderTool>;
|
|
147
|
+
toolChoice?: LanguageModelToolChoice;
|
|
148
|
+
includeRawChunks?: boolean;
|
|
149
|
+
abortSignal?: AbortSignal;
|
|
150
|
+
headers?: Record<string, string | undefined>;
|
|
151
|
+
reasoning?: "provider-default" | "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
152
|
+
providerOptions?: Record<string, JSONObject>;
|
|
153
|
+
}
|
|
154
|
+
export interface LanguageModelGenerateResult {
|
|
155
|
+
content: Array<LanguageModelContent>;
|
|
156
|
+
finishReason: LanguageModelFinishReason;
|
|
157
|
+
usage: LanguageModelUsage;
|
|
158
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
159
|
+
request?: {
|
|
160
|
+
body?: unknown;
|
|
161
|
+
};
|
|
162
|
+
response?: LanguageModelResponseMetadata & {
|
|
163
|
+
headers?: Record<string, string>;
|
|
164
|
+
body?: unknown;
|
|
165
|
+
};
|
|
166
|
+
warnings: Array<SharedWarning>;
|
|
167
|
+
}
|
|
168
|
+
export interface LanguageModelStreamResult {
|
|
169
|
+
stream: ReadableStream<LanguageModelStreamPart>;
|
|
170
|
+
request?: {
|
|
171
|
+
body?: unknown;
|
|
172
|
+
};
|
|
173
|
+
response?: {
|
|
174
|
+
headers?: Record<string, string>;
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
export interface LanguageModelFinishReason {
|
|
178
|
+
unified: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other";
|
|
179
|
+
raw: string | undefined;
|
|
180
|
+
}
|
|
181
|
+
export interface LanguageModelUsage {
|
|
182
|
+
inputTokens: {
|
|
183
|
+
total: number | undefined;
|
|
184
|
+
noCache: number | undefined;
|
|
185
|
+
cacheRead: number | undefined;
|
|
186
|
+
cacheWrite: number | undefined;
|
|
187
|
+
};
|
|
188
|
+
outputTokens: {
|
|
189
|
+
total: number | undefined;
|
|
190
|
+
text: number | undefined;
|
|
191
|
+
reasoning: number | undefined;
|
|
192
|
+
};
|
|
193
|
+
raw?: JSONObject;
|
|
194
|
+
}
|
|
195
|
+
export type LanguageModelToolResultOutput = {
|
|
196
|
+
type: "text";
|
|
197
|
+
value: string;
|
|
198
|
+
providerOptions?: Record<string, JSONObject>;
|
|
199
|
+
} | {
|
|
200
|
+
type: "json";
|
|
201
|
+
value: JSONValue;
|
|
202
|
+
providerOptions?: Record<string, JSONObject>;
|
|
203
|
+
} | {
|
|
204
|
+
type: "execution-denied";
|
|
205
|
+
reason?: string;
|
|
206
|
+
providerOptions?: Record<string, JSONObject>;
|
|
207
|
+
} | {
|
|
208
|
+
type: "error-text";
|
|
209
|
+
value: string;
|
|
210
|
+
providerOptions?: Record<string, JSONObject>;
|
|
211
|
+
} | {
|
|
212
|
+
type: "error-json";
|
|
213
|
+
value: JSONValue;
|
|
214
|
+
providerOptions?: Record<string, JSONObject>;
|
|
215
|
+
} | {
|
|
216
|
+
type: "content";
|
|
217
|
+
value: Array<LanguageModelTextPart | LanguageModelFilePart | {
|
|
218
|
+
type: "custom";
|
|
219
|
+
providerOptions?: Record<string, JSONObject>;
|
|
220
|
+
}>;
|
|
221
|
+
};
|
|
222
|
+
export type LanguageModelStreamPart = {
|
|
223
|
+
type: "text-start";
|
|
224
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
225
|
+
id: string;
|
|
226
|
+
} | {
|
|
227
|
+
type: "text-delta";
|
|
228
|
+
id: string;
|
|
229
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
230
|
+
delta: string;
|
|
231
|
+
} | {
|
|
232
|
+
type: "text-end";
|
|
233
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
234
|
+
id: string;
|
|
235
|
+
} | {
|
|
236
|
+
type: "reasoning-start";
|
|
237
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
238
|
+
id: string;
|
|
239
|
+
} | {
|
|
240
|
+
type: "reasoning-delta";
|
|
241
|
+
id: string;
|
|
242
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
243
|
+
delta: string;
|
|
244
|
+
} | {
|
|
245
|
+
type: "reasoning-end";
|
|
246
|
+
id: string;
|
|
247
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
248
|
+
} | {
|
|
249
|
+
type: "tool-input-start";
|
|
250
|
+
id: string;
|
|
251
|
+
toolName: string;
|
|
252
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
253
|
+
providerExecuted?: boolean;
|
|
254
|
+
dynamic?: boolean;
|
|
255
|
+
title?: string;
|
|
256
|
+
} | {
|
|
257
|
+
type: "tool-input-delta";
|
|
258
|
+
id: string;
|
|
259
|
+
delta: string;
|
|
260
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
261
|
+
} | {
|
|
262
|
+
type: "tool-input-end";
|
|
263
|
+
id: string;
|
|
264
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
265
|
+
} | LanguageModelToolApprovalRequest | LanguageModelToolCall | LanguageModelToolResult | LanguageModelCustomContent | LanguageModelFile | LanguageModelReasoningFile | LanguageModelSource | {
|
|
266
|
+
type: "stream-start";
|
|
267
|
+
warnings: Array<SharedWarning>;
|
|
268
|
+
} | ({
|
|
269
|
+
type: "response-metadata";
|
|
270
|
+
} & LanguageModelResponseMetadata) | {
|
|
271
|
+
type: "finish";
|
|
272
|
+
usage: LanguageModelUsage;
|
|
273
|
+
finishReason: LanguageModelFinishReason;
|
|
274
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
275
|
+
} | {
|
|
276
|
+
type: "raw";
|
|
277
|
+
rawValue: unknown;
|
|
278
|
+
} | {
|
|
279
|
+
type: "error";
|
|
280
|
+
error: unknown;
|
|
281
|
+
};
|
|
282
|
+
export interface EmbeddingModelCallOptions<TModel extends string = string> {
|
|
283
|
+
model: TModel;
|
|
284
|
+
values: Array<string>;
|
|
285
|
+
abortSignal?: AbortSignal;
|
|
286
|
+
providerOptions?: Record<string, JSONObject>;
|
|
287
|
+
headers?: Record<string, string>;
|
|
288
|
+
}
|
|
289
|
+
export interface EmbeddingModelResult {
|
|
290
|
+
embeddings: Array<Array<number>>;
|
|
291
|
+
usage?: {
|
|
292
|
+
tokens: number;
|
|
293
|
+
};
|
|
294
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
295
|
+
response?: {
|
|
296
|
+
headers?: Record<string, string>;
|
|
297
|
+
body?: unknown;
|
|
298
|
+
};
|
|
299
|
+
warnings: Array<SharedWarning>;
|
|
300
|
+
}
|
|
301
|
+
export type ImageModelFile = {
|
|
302
|
+
type: "file";
|
|
303
|
+
mediaType: string;
|
|
304
|
+
data: string | Uint8Array;
|
|
305
|
+
providerOptions?: Record<string, JSONObject>;
|
|
306
|
+
} | {
|
|
307
|
+
type: "url";
|
|
308
|
+
url: string;
|
|
309
|
+
providerOptions?: Record<string, JSONObject>;
|
|
310
|
+
};
|
|
311
|
+
export interface ImageModelCallOptions<TModel extends string = string> {
|
|
312
|
+
model: TModel;
|
|
313
|
+
prompt: string | undefined;
|
|
314
|
+
n: number;
|
|
315
|
+
size: `${number}x${number}` | undefined;
|
|
316
|
+
aspectRatio: `${number}:${number}` | undefined;
|
|
317
|
+
seed: number | undefined;
|
|
318
|
+
files: Array<ImageModelFile> | undefined;
|
|
319
|
+
mask: ImageModelFile | undefined;
|
|
320
|
+
providerOptions: Record<string, JSONObject>;
|
|
321
|
+
abortSignal?: AbortSignal;
|
|
322
|
+
headers?: Record<string, string | undefined>;
|
|
323
|
+
}
|
|
324
|
+
export interface ImageModelResult {
|
|
325
|
+
images: Array<string> | Array<Uint8Array>;
|
|
326
|
+
warnings: Array<SharedWarning>;
|
|
327
|
+
providerMetadata?: Record<string, {
|
|
328
|
+
images: Array<JSONValue>;
|
|
329
|
+
} & JSONValue>;
|
|
330
|
+
response: {
|
|
331
|
+
timestamp: Date;
|
|
332
|
+
modelId: string;
|
|
333
|
+
headers: Record<string, string> | undefined;
|
|
334
|
+
};
|
|
335
|
+
usage?: {
|
|
336
|
+
inputTokens: number | undefined;
|
|
337
|
+
outputTokens: number | undefined;
|
|
338
|
+
totalTokens: number | undefined;
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
export interface RerankingModelCallOptions<TModel extends string = string> {
|
|
342
|
+
model: TModel;
|
|
343
|
+
documents: {
|
|
344
|
+
type: "text";
|
|
345
|
+
values: Array<string>;
|
|
346
|
+
} | {
|
|
347
|
+
type: "object";
|
|
348
|
+
values: Array<JSONObject>;
|
|
349
|
+
};
|
|
350
|
+
query: string;
|
|
351
|
+
topN?: number;
|
|
352
|
+
abortSignal?: AbortSignal;
|
|
353
|
+
providerOptions?: Record<string, JSONObject>;
|
|
354
|
+
headers?: Record<string, string>;
|
|
355
|
+
}
|
|
356
|
+
export interface RerankingModelResult {
|
|
357
|
+
ranking: Array<{
|
|
358
|
+
index: number;
|
|
359
|
+
relevanceScore: number;
|
|
360
|
+
}>;
|
|
361
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
362
|
+
warnings?: Array<SharedWarning>;
|
|
363
|
+
response?: {
|
|
364
|
+
id?: string;
|
|
365
|
+
timestamp?: Date;
|
|
366
|
+
modelId?: string;
|
|
367
|
+
headers?: Record<string, string>;
|
|
368
|
+
body?: unknown;
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
export interface SpeechModelCallOptions<TModel extends string = string> {
|
|
372
|
+
model: TModel;
|
|
373
|
+
text: string;
|
|
374
|
+
voice?: string;
|
|
375
|
+
outputFormat?: string;
|
|
376
|
+
instructions?: string;
|
|
377
|
+
speed?: number;
|
|
378
|
+
language?: string;
|
|
379
|
+
providerOptions?: Record<string, JSONObject>;
|
|
380
|
+
abortSignal?: AbortSignal;
|
|
381
|
+
headers?: Record<string, string | undefined>;
|
|
382
|
+
}
|
|
383
|
+
export interface SpeechModelResult {
|
|
384
|
+
audio: string | Uint8Array;
|
|
385
|
+
warnings: Array<SharedWarning>;
|
|
386
|
+
request?: {
|
|
387
|
+
body?: unknown;
|
|
388
|
+
};
|
|
389
|
+
response: {
|
|
390
|
+
timestamp: Date;
|
|
391
|
+
modelId: string;
|
|
392
|
+
headers?: Record<string, string>;
|
|
393
|
+
body?: unknown;
|
|
394
|
+
};
|
|
395
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
396
|
+
}
|
|
397
|
+
export interface TranscriptionModelCallOptions<TModel extends string = string> {
|
|
398
|
+
model: TModel;
|
|
399
|
+
audio: Uint8Array | string;
|
|
400
|
+
mediaType: string;
|
|
401
|
+
providerOptions?: Record<string, JSONObject>;
|
|
402
|
+
abortSignal?: AbortSignal;
|
|
403
|
+
headers?: Record<string, string | undefined>;
|
|
404
|
+
}
|
|
405
|
+
export interface TranscriptionModelResult {
|
|
406
|
+
text: string;
|
|
407
|
+
segments: Array<{
|
|
408
|
+
text: string;
|
|
409
|
+
startSecond: number;
|
|
410
|
+
endSecond: number;
|
|
411
|
+
}>;
|
|
412
|
+
language: string | undefined;
|
|
413
|
+
durationInSeconds: number | undefined;
|
|
414
|
+
warnings: Array<SharedWarning>;
|
|
415
|
+
request?: {
|
|
416
|
+
body?: string;
|
|
417
|
+
};
|
|
418
|
+
response: {
|
|
419
|
+
timestamp: Date;
|
|
420
|
+
modelId: string;
|
|
421
|
+
headers?: Record<string, string>;
|
|
422
|
+
body?: unknown;
|
|
423
|
+
};
|
|
424
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
425
|
+
}
|
|
426
|
+
export interface TranscriptionModelStreamOptions<TModel extends string = string> {
|
|
427
|
+
model: TModel;
|
|
428
|
+
audio: ReadableStream<Uint8Array | string>;
|
|
429
|
+
inputAudioFormat: {
|
|
430
|
+
type: string;
|
|
431
|
+
rate?: number;
|
|
432
|
+
};
|
|
433
|
+
providerOptions?: Record<string, JSONObject>;
|
|
434
|
+
abortSignal?: AbortSignal;
|
|
435
|
+
headers?: Record<string, string | undefined>;
|
|
436
|
+
includeRawChunks?: boolean;
|
|
437
|
+
}
|
|
438
|
+
export type TranscriptionModelStreamPart = {
|
|
439
|
+
type: "stream-start";
|
|
440
|
+
warnings: Array<SharedWarning>;
|
|
441
|
+
} | {
|
|
442
|
+
type: "transcript-delta";
|
|
443
|
+
id?: string;
|
|
444
|
+
delta: string;
|
|
445
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
446
|
+
} | {
|
|
447
|
+
type: "transcript-partial";
|
|
448
|
+
id?: string;
|
|
449
|
+
text: string;
|
|
450
|
+
startSecond?: number;
|
|
451
|
+
durationInSeconds?: number;
|
|
452
|
+
channelIndex?: number;
|
|
453
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
454
|
+
} | {
|
|
455
|
+
type: "transcript-final";
|
|
456
|
+
id?: string;
|
|
457
|
+
text: string;
|
|
458
|
+
startSecond?: number;
|
|
459
|
+
endSecond?: number;
|
|
460
|
+
channelIndex?: number;
|
|
461
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
462
|
+
} | {
|
|
463
|
+
type: "response-metadata";
|
|
464
|
+
timestamp?: Date;
|
|
465
|
+
modelId?: string;
|
|
466
|
+
headers?: Record<string, string>;
|
|
467
|
+
body?: unknown;
|
|
468
|
+
} | {
|
|
469
|
+
type: "finish";
|
|
470
|
+
text: string;
|
|
471
|
+
segments: Array<{
|
|
472
|
+
text: string;
|
|
473
|
+
startSecond: number;
|
|
474
|
+
endSecond: number;
|
|
475
|
+
}>;
|
|
476
|
+
language?: string;
|
|
477
|
+
durationInSeconds?: number;
|
|
478
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
479
|
+
} | {
|
|
480
|
+
type: "raw";
|
|
481
|
+
rawValue: unknown;
|
|
482
|
+
} | {
|
|
483
|
+
type: "error";
|
|
484
|
+
error: unknown;
|
|
485
|
+
};
|
|
486
|
+
export interface TranscriptionModelStreamResult {
|
|
487
|
+
stream: ReadableStream<TranscriptionModelStreamPart>;
|
|
488
|
+
request?: {
|
|
489
|
+
body?: unknown;
|
|
490
|
+
};
|
|
491
|
+
response?: {
|
|
492
|
+
timestamp?: Date;
|
|
493
|
+
modelId?: string;
|
|
494
|
+
headers?: Record<string, string>;
|
|
495
|
+
body?: unknown;
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
export interface FilesUploadFileCallOptions {
|
|
499
|
+
data: SharedFileDataData | SharedFileDataText;
|
|
500
|
+
mediaType: string;
|
|
501
|
+
fileName?: string;
|
|
502
|
+
providerOptions?: Record<string, JSONObject>;
|
|
503
|
+
}
|
|
504
|
+
export interface FilesUploadFileResult {
|
|
505
|
+
providerReference: Record<string, string>;
|
|
506
|
+
mediaType?: string;
|
|
507
|
+
fileName?: string;
|
|
508
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
509
|
+
warnings: Array<SharedWarning>;
|
|
510
|
+
}
|
|
511
|
+
export type LanguageModelTextPart = Omit<LanguageModelText, "providerMetadata"> & {
|
|
512
|
+
providerOptions?: Record<string, JSONObject>;
|
|
513
|
+
};
|
|
514
|
+
export type LanguageModelReasoningPart = Omit<LanguageModelReasoning, "providerMetadata"> & {
|
|
515
|
+
providerOptions?: Record<string, JSONObject>;
|
|
516
|
+
};
|
|
517
|
+
export type LanguageModelReasoningFilePart = Omit<LanguageModelReasoningFile, "providerMetadata"> & {
|
|
518
|
+
providerOptions?: Record<string, JSONObject>;
|
|
519
|
+
};
|
|
520
|
+
export type LanguageModelCustomPart = Omit<LanguageModelCustomContent, "providerMetadata"> & {
|
|
521
|
+
providerOptions?: Record<string, JSONObject>;
|
|
522
|
+
};
|
|
523
|
+
export type LanguageModelFilePart = Omit<LanguageModelFile, "providerMetadata" | "data"> & {
|
|
524
|
+
data: SharedFileData;
|
|
525
|
+
fileName?: string;
|
|
526
|
+
providerOptions?: Record<string, JSONObject>;
|
|
527
|
+
};
|
|
528
|
+
export type Protocol<TOptions, TResult> = (options: TOptions) => PromiseLike<TResult>;
|
|
529
|
+
export interface ProviderConnection {
|
|
530
|
+
textGenerate?: Record<string, Protocol<LanguageModelCallOptions, LanguageModelGenerateResult>>;
|
|
531
|
+
textStream?: Record<string, Protocol<LanguageModelCallOptions, LanguageModelStreamResult>>;
|
|
532
|
+
embed?: Record<string, Protocol<EmbeddingModelCallOptions, EmbeddingModelResult>>;
|
|
533
|
+
imageGenerate?: Record<string, Protocol<ImageModelCallOptions, ImageModelResult>>;
|
|
534
|
+
transcribe?: Record<string, Protocol<TranscriptionModelCallOptions, TranscriptionModelResult>>;
|
|
535
|
+
transcribeStream?: Record<string, Protocol<TranscriptionModelStreamOptions, TranscriptionModelStreamResult>>;
|
|
536
|
+
speechGenerate?: Record<string, Protocol<SpeechModelCallOptions, SpeechModelResult>>;
|
|
537
|
+
rerank?: Record<string, Protocol<RerankingModelCallOptions, RerankingModelResult>>;
|
|
538
|
+
uploadFile?: (options: FilesUploadFileCallOptions) => PromiseLike<FilesUploadFileResult>;
|
|
539
|
+
uploadSkill?: (options: SkillsUploadSkillCallOptions) => PromiseLike<SkillsUploadSkillResult>;
|
|
540
|
+
}
|
|
541
|
+
export type AiConnection<TConnection extends ProviderConnection> = {
|
|
542
|
+
[TKey in keyof TConnection & string]: NonNullable<TConnection[TKey]> extends Record<string, Protocol<infer TOptions, infer TResult>> ? (options: TOptions) => Promise<TResult> : TConnection[TKey];
|
|
543
|
+
};
|
|
544
|
+
export type AiConnections<TSource extends Source<Provider>> = {
|
|
545
|
+
[TPackage in SourceScope<TSource>]: {
|
|
546
|
+
[TProvider in SourceValue<TSource, TPackage>]: AiConnection<Awaited<ReturnType<Awaited<ReturnType<TSource[TPackage][TProvider]>>["setup"]>>>;
|
|
547
|
+
};
|
|
548
|
+
}[SourceScope<TSource>];
|
|
549
|
+
export interface SharedFileDataData {
|
|
550
|
+
type: "data";
|
|
551
|
+
data: Uint8Array | string;
|
|
552
|
+
}
|
|
553
|
+
export interface SharedFileDataUrl {
|
|
554
|
+
type: "url";
|
|
555
|
+
url: URL;
|
|
556
|
+
}
|
|
557
|
+
export interface SharedFileDataReference {
|
|
558
|
+
type: "reference";
|
|
559
|
+
reference: Record<string, string>;
|
|
560
|
+
}
|
|
561
|
+
export interface SharedFileDataText {
|
|
562
|
+
type: "text";
|
|
563
|
+
text: string;
|
|
564
|
+
}
|
|
565
|
+
export interface LanguageModelResponseMetadata {
|
|
566
|
+
id?: string;
|
|
567
|
+
timestamp?: Date;
|
|
568
|
+
modelId?: string;
|
|
569
|
+
}
|
|
570
|
+
export interface LanguageModelToolCallPart {
|
|
571
|
+
type: "tool-call";
|
|
572
|
+
toolCallId: string;
|
|
573
|
+
toolName: string;
|
|
574
|
+
input: unknown;
|
|
575
|
+
providerExecuted?: boolean;
|
|
576
|
+
providerOptions?: Record<string, JSONObject>;
|
|
577
|
+
}
|
|
578
|
+
export interface LanguageModelToolResultPart {
|
|
579
|
+
type: "tool-result";
|
|
580
|
+
toolCallId: string;
|
|
581
|
+
toolName: string;
|
|
582
|
+
output: LanguageModelToolResultOutput;
|
|
583
|
+
providerOptions?: Record<string, JSONObject>;
|
|
584
|
+
}
|
|
585
|
+
export interface LanguageModelToolApprovalResponsePart {
|
|
586
|
+
type: "tool-approval-response";
|
|
587
|
+
approvalId: string;
|
|
588
|
+
approved: boolean;
|
|
589
|
+
reason?: string;
|
|
590
|
+
providerOptions?: Record<string, JSONObject>;
|
|
591
|
+
}
|
|
592
|
+
export interface SkillsFile {
|
|
593
|
+
path: string;
|
|
594
|
+
data: SharedFileDataData | SharedFileDataText;
|
|
595
|
+
}
|
|
596
|
+
export interface SkillsUploadSkillCallOptions {
|
|
597
|
+
files: Array<SkillsFile>;
|
|
598
|
+
displayTitle?: string;
|
|
599
|
+
providerOptions?: Record<string, JSONObject>;
|
|
600
|
+
}
|
|
601
|
+
export interface SkillsUploadSkillResult {
|
|
602
|
+
providerReference: Record<string, string>;
|
|
603
|
+
displayTitle?: string;
|
|
604
|
+
name?: string;
|
|
605
|
+
description?: string;
|
|
606
|
+
latestVersion?: string;
|
|
607
|
+
providerMetadata?: Record<string, JSONObject>;
|
|
608
|
+
warnings: Array<SharedWarning>;
|
|
609
|
+
}
|
|
610
|
+
export interface Provider {
|
|
611
|
+
setup: (scope: Scope) => ProviderConnection;
|
|
612
|
+
}
|
|
613
|
+
export declare function defineProvider<TProvider extends Provider>(provider: TProvider): TProvider;
|
|
614
|
+
export declare function useAi<TSource extends Source<Provider> = typeof import("#providers").default>(scope: Scope): AiConnections<TSource>;
|
|
615
|
+
export declare function mergeHeaders(...headers: Array<Record<string, string | undefined> | undefined>): Record<string, string>;
|
|
616
|
+
export declare function readDataFrames(response: Response): AsyncGenerator<string>;
|
|
617
|
+
export declare function toStream<T>(read: () => AsyncGenerator<T>): ReadableStream<T>;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import providers from "#providers";
|
|
2
|
+
import "revojs";
|
|
3
|
+
//#region src/index.ts
|
|
4
|
+
function defineProvider(provider) {
|
|
5
|
+
return provider;
|
|
6
|
+
}
|
|
7
|
+
function useAi(scope) {
|
|
8
|
+
const names = [...new Set(Object.values(providers).flatMap((entries) => Object.keys(entries)))].sort();
|
|
9
|
+
const connect = async (name) => {
|
|
10
|
+
const resolves = Object.values(providers).map((entries) => entries[name]).filter((resolve) => resolve !== void 0);
|
|
11
|
+
if (resolves.length === 0) throw new Error(`Unknown AI provider "${name}". Built-in providers: ${names.join(", ")}. Add ./providers/${name}.ts for custom ones.`);
|
|
12
|
+
return resolves[0]().then((provider) => provider.setup(scope));
|
|
13
|
+
};
|
|
14
|
+
const invoke = async (name, capability, options) => {
|
|
15
|
+
const models = (await connect(name))[capability];
|
|
16
|
+
if (models === void 0) throw new Error(`AI provider "${name}" does not support "${capability}".`);
|
|
17
|
+
if (typeof models === "function") return models(options);
|
|
18
|
+
const { model } = options;
|
|
19
|
+
const protocol = models[model];
|
|
20
|
+
if (protocol === void 0) throw new Error(`Unknown AI model "${model}". Available models: ${Object.keys(models).sort().join(", ")}.`);
|
|
21
|
+
return protocol(options);
|
|
22
|
+
};
|
|
23
|
+
const provide = (name) => ({
|
|
24
|
+
textGenerate: (options) => invoke(name, "textGenerate", options),
|
|
25
|
+
textStream: (options) => invoke(name, "textStream", options),
|
|
26
|
+
embed: (options) => invoke(name, "embed", options),
|
|
27
|
+
imageGenerate: (options) => invoke(name, "imageGenerate", options),
|
|
28
|
+
transcribe: (options) => invoke(name, "transcribe", options),
|
|
29
|
+
transcribeStream: (options) => invoke(name, "transcribeStream", options),
|
|
30
|
+
speechGenerate: (options) => invoke(name, "speechGenerate", options),
|
|
31
|
+
rerank: (options) => invoke(name, "rerank", options),
|
|
32
|
+
uploadFile: (options) => invoke(name, "uploadFile", options),
|
|
33
|
+
uploadSkill: (options) => invoke(name, "uploadSkill", options)
|
|
34
|
+
});
|
|
35
|
+
return Object.fromEntries(names.map((name) => [name, provide(name)]));
|
|
36
|
+
}
|
|
37
|
+
function mergeHeaders(...headers) {
|
|
38
|
+
const merged = {};
|
|
39
|
+
for (const record of headers) for (const [name, value] of Object.entries(record ?? {})) if (value !== void 0) merged[name] = value;
|
|
40
|
+
return merged;
|
|
41
|
+
}
|
|
42
|
+
async function* readDataFrames(response) {
|
|
43
|
+
const body = response.body;
|
|
44
|
+
if (!body) throw new Error("AI provider response has no body");
|
|
45
|
+
const decoder = new TextDecoder();
|
|
46
|
+
let buffer = "";
|
|
47
|
+
for await (const chunk of body) {
|
|
48
|
+
buffer += decoder.decode(chunk, { stream: true });
|
|
49
|
+
const frames = buffer.split(/\r?\n\r?\n/);
|
|
50
|
+
buffer = frames.pop() ?? "";
|
|
51
|
+
for (const frame of frames) for (const line of frame.split(/\r?\n/)) if (line.startsWith("data:")) yield line.slice(5).trim();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function toStream(read) {
|
|
55
|
+
const iterator = read();
|
|
56
|
+
let cancelled = false;
|
|
57
|
+
return new ReadableStream({
|
|
58
|
+
async pull(controller) {
|
|
59
|
+
try {
|
|
60
|
+
const result = await iterator.next();
|
|
61
|
+
if (!cancelled && !result.done) controller.enqueue(result.value);
|
|
62
|
+
else if (!cancelled) controller.close();
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (!cancelled) controller.error(error);
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
async cancel() {
|
|
68
|
+
cancelled = true;
|
|
69
|
+
try {
|
|
70
|
+
await iterator.return?.(void 0);
|
|
71
|
+
} catch {}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//#endregion
|
|
76
|
+
export { defineProvider, mergeHeaders, readDataFrames, toStream, useAi };
|