kimi-vercel-ai-sdk-provider 0.2.0 → 0.3.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 +7 -13
- package/dist/index.d.mts +12 -6
- package/dist/index.d.ts +12 -6
- package/dist/index.js +57 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +57 -40
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
- package/src/__tests__/code-integration.test.ts +37 -31
- package/src/__tests__/code-provider.test.ts +5 -6
- package/src/__tests__/code.test.ts +1 -3
- package/src/__tests__/provider.test.ts +3 -2
- package/src/chat/kimi-chat-language-model.ts +21 -1
- package/src/core/errors.ts +1 -1
- package/src/files/attachment-processor.ts +2 -1
package/README.md
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
# kimi-vercel-ai-sdk-provider
|
|
2
2
|
|
|
3
|
+
<img width="1600" height="1278" alt="image" src="https://github.com/user-attachments/assets/fcde2cc0-73e2-4d32-b1bc-b4d9eaca5a6a" />
|
|
4
|
+
|
|
3
5
|
Native Kimi (Moonshot AI) provider for Vercel AI SDK.
|
|
4
6
|
|
|
5
7
|
This is a native implementation with full support for Kimi-specific features, not a generic OpenAI-compatible wrapper.
|
|
6
8
|
|
|
7
|
-
[
|
|
10
|
-
[
|
|
13
|
-
[](https://www.npmjs.com/package/kimi-vercel-ai-sdk-provider
|
|
15
|
-
)
|
|
16
|
-
[](https://github.com/aaroniker/kimi-vercel-ai-sdk-provider/blob/main/LICENSE)
|
|
9
|
+
[](https://www.npmjs.com/package/kimi-vercel-ai-sdk-provider)
|
|
10
|
+
[](https://bundlephobia.com/package/kimi-vercel-ai-sdk-provider)
|
|
11
|
+
[](https://www.npmjs.com/package/kimi-vercel-ai-sdk-provider)
|
|
12
|
+
[](https://github.com/aaroniker/kimi-vercel-ai-sdk-provider/blob/main/LICENSE)
|
|
18
13
|
|
|
19
14
|
## Table of Contents
|
|
20
15
|
|
|
@@ -79,8 +74,7 @@ npm install kimi-vercel-ai-sdk-provider
|
|
|
79
74
|
### Kimi Chat (Standard)
|
|
80
75
|
|
|
81
76
|
```ts
|
|
82
|
-
import { createKimi } from 'kimi-vercel-ai-sdk-provider
|
|
83
|
-
';
|
|
77
|
+
import { createKimi } from 'kimi-vercel-ai-sdk-provider';
|
|
84
78
|
import { generateText, streamText } from 'ai';
|
|
85
79
|
|
|
86
80
|
const kimi = createKimi({
|
package/dist/index.d.mts
CHANGED
|
@@ -287,7 +287,8 @@ declare const kimiTools: {
|
|
|
287
287
|
*
|
|
288
288
|
* @example
|
|
289
289
|
* ```ts
|
|
290
|
-
* import { kimi, kimiTools } from 'ai-sdk-provider
|
|
290
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
291
|
+
';
|
|
291
292
|
*
|
|
292
293
|
* const result = await generateText({
|
|
293
294
|
* model: kimi('kimi-k2.5'),
|
|
@@ -311,7 +312,8 @@ declare const kimiTools: {
|
|
|
311
312
|
*
|
|
312
313
|
* @example
|
|
313
314
|
* ```ts
|
|
314
|
-
* import { kimi, kimiTools } from 'ai-sdk-provider
|
|
315
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
316
|
+
';
|
|
315
317
|
*
|
|
316
318
|
* const result = await generateText({
|
|
317
319
|
* model: kimi('kimi-k2.5'),
|
|
@@ -861,7 +863,8 @@ interface KimiProvider extends Omit<ProviderV3, 'specificationVersion'> {
|
|
|
861
863
|
*
|
|
862
864
|
* @example
|
|
863
865
|
* ```ts
|
|
864
|
-
* import { createKimi } from 'ai-sdk-provider
|
|
866
|
+
* import { createKimi } from 'kimi-vercel-ai-sdk-provider
|
|
867
|
+
';
|
|
865
868
|
*
|
|
866
869
|
* const kimi = createKimi({
|
|
867
870
|
* apiKey: process.env.MOONSHOT_API_KEY,
|
|
@@ -899,7 +902,8 @@ declare function createKimi(options?: KimiProviderSettings): KimiProvider;
|
|
|
899
902
|
*
|
|
900
903
|
* @example
|
|
901
904
|
* ```ts
|
|
902
|
-
* import { kimi } from 'ai-sdk-provider
|
|
905
|
+
* import { kimi } from 'kimi-vercel-ai-sdk-provider
|
|
906
|
+
';
|
|
903
907
|
*
|
|
904
908
|
* const result = await generateText({
|
|
905
909
|
* model: kimi('kimi-k2.5'),
|
|
@@ -1222,7 +1226,8 @@ interface KimiCodeProvider extends Omit<ProviderV3, 'specificationVersion'> {
|
|
|
1222
1226
|
*
|
|
1223
1227
|
* @example
|
|
1224
1228
|
* ```ts
|
|
1225
|
-
* import { createKimiCode } from 'ai-sdk-provider
|
|
1229
|
+
* import { createKimiCode } from 'kimi-vercel-ai-sdk-provider
|
|
1230
|
+
';
|
|
1226
1231
|
*
|
|
1227
1232
|
* const kimiCode = createKimiCode({
|
|
1228
1233
|
* apiKey: process.env.KIMI_CODE_API_KEY,
|
|
@@ -1265,7 +1270,8 @@ declare function createKimiCode(options?: KimiCodeProviderSettings): KimiCodePro
|
|
|
1265
1270
|
*
|
|
1266
1271
|
* @example
|
|
1267
1272
|
* ```ts
|
|
1268
|
-
* import { kimiCode } from 'ai-sdk-provider
|
|
1273
|
+
* import { kimiCode } from 'kimi-vercel-ai-sdk-provider
|
|
1274
|
+
';
|
|
1269
1275
|
*
|
|
1270
1276
|
* const result = await generateText({
|
|
1271
1277
|
* model: kimiCode(), // Uses default model
|
package/dist/index.d.ts
CHANGED
|
@@ -287,7 +287,8 @@ declare const kimiTools: {
|
|
|
287
287
|
*
|
|
288
288
|
* @example
|
|
289
289
|
* ```ts
|
|
290
|
-
* import { kimi, kimiTools } from 'ai-sdk-provider
|
|
290
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
291
|
+
';
|
|
291
292
|
*
|
|
292
293
|
* const result = await generateText({
|
|
293
294
|
* model: kimi('kimi-k2.5'),
|
|
@@ -311,7 +312,8 @@ declare const kimiTools: {
|
|
|
311
312
|
*
|
|
312
313
|
* @example
|
|
313
314
|
* ```ts
|
|
314
|
-
* import { kimi, kimiTools } from 'ai-sdk-provider
|
|
315
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
316
|
+
';
|
|
315
317
|
*
|
|
316
318
|
* const result = await generateText({
|
|
317
319
|
* model: kimi('kimi-k2.5'),
|
|
@@ -861,7 +863,8 @@ interface KimiProvider extends Omit<ProviderV3, 'specificationVersion'> {
|
|
|
861
863
|
*
|
|
862
864
|
* @example
|
|
863
865
|
* ```ts
|
|
864
|
-
* import { createKimi } from 'ai-sdk-provider
|
|
866
|
+
* import { createKimi } from 'kimi-vercel-ai-sdk-provider
|
|
867
|
+
';
|
|
865
868
|
*
|
|
866
869
|
* const kimi = createKimi({
|
|
867
870
|
* apiKey: process.env.MOONSHOT_API_KEY,
|
|
@@ -899,7 +902,8 @@ declare function createKimi(options?: KimiProviderSettings): KimiProvider;
|
|
|
899
902
|
*
|
|
900
903
|
* @example
|
|
901
904
|
* ```ts
|
|
902
|
-
* import { kimi } from 'ai-sdk-provider
|
|
905
|
+
* import { kimi } from 'kimi-vercel-ai-sdk-provider
|
|
906
|
+
';
|
|
903
907
|
*
|
|
904
908
|
* const result = await generateText({
|
|
905
909
|
* model: kimi('kimi-k2.5'),
|
|
@@ -1222,7 +1226,8 @@ interface KimiCodeProvider extends Omit<ProviderV3, 'specificationVersion'> {
|
|
|
1222
1226
|
*
|
|
1223
1227
|
* @example
|
|
1224
1228
|
* ```ts
|
|
1225
|
-
* import { createKimiCode } from 'ai-sdk-provider
|
|
1229
|
+
* import { createKimiCode } from 'kimi-vercel-ai-sdk-provider
|
|
1230
|
+
';
|
|
1226
1231
|
*
|
|
1227
1232
|
* const kimiCode = createKimiCode({
|
|
1228
1233
|
* apiKey: process.env.KIMI_CODE_API_KEY,
|
|
@@ -1265,7 +1270,8 @@ declare function createKimiCode(options?: KimiCodeProviderSettings): KimiCodePro
|
|
|
1265
1270
|
*
|
|
1266
1271
|
* @example
|
|
1267
1272
|
* ```ts
|
|
1268
|
-
* import { kimiCode } from 'ai-sdk-provider
|
|
1273
|
+
* import { kimiCode } from 'kimi-vercel-ai-sdk-provider
|
|
1274
|
+
';
|
|
1269
1275
|
*
|
|
1270
1276
|
* const result = await generateText({
|
|
1271
1277
|
* model: kimiCode(), // Uses default model
|
package/dist/index.js
CHANGED
|
@@ -77,7 +77,7 @@ var kimiErrorSchema = import_v4.z.union([
|
|
|
77
77
|
error: import_v4.z.object({
|
|
78
78
|
message: import_v4.z.string(),
|
|
79
79
|
type: import_v4.z.string().nullish(),
|
|
80
|
-
param: import_v4.z.
|
|
80
|
+
param: import_v4.z.string().nullish(),
|
|
81
81
|
code: import_v4.z.union([import_v4.z.string(), import_v4.z.number()]).nullish(),
|
|
82
82
|
request_id: import_v4.z.string().nullish()
|
|
83
83
|
})
|
|
@@ -306,24 +306,25 @@ function isBuiltinToolName(toolName) {
|
|
|
306
306
|
}
|
|
307
307
|
var kimiTools = {
|
|
308
308
|
/**
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
309
|
+
* Create a web search tool for use with Kimi models.
|
|
310
|
+
*
|
|
311
|
+
* @param config - Optional configuration
|
|
312
|
+
* @returns A provider tool definition
|
|
313
|
+
*
|
|
314
|
+
* @example
|
|
315
|
+
* ```ts
|
|
316
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
317
|
+
';
|
|
318
|
+
*
|
|
319
|
+
* const result = await generateText({
|
|
320
|
+
* model: kimi('kimi-k2.5'),
|
|
321
|
+
* tools: {
|
|
322
|
+
* webSearch: kimiTools.webSearch(),
|
|
323
|
+
* },
|
|
324
|
+
* prompt: 'What are the latest AI news?',
|
|
325
|
+
* });
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
327
328
|
webSearch: (config) => {
|
|
328
329
|
return {
|
|
329
330
|
type: "provider",
|
|
@@ -332,24 +333,25 @@ var kimiTools = {
|
|
|
332
333
|
};
|
|
333
334
|
},
|
|
334
335
|
/**
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
336
|
+
* Create a code interpreter tool for use with Kimi models.
|
|
337
|
+
*
|
|
338
|
+
* @param config - Optional configuration
|
|
339
|
+
* @returns A provider tool definition
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```ts
|
|
343
|
+
* import { kimi, kimiTools } from 'kimi-vercel-ai-sdk-provider
|
|
344
|
+
';
|
|
345
|
+
*
|
|
346
|
+
* const result = await generateText({
|
|
347
|
+
* model: kimi('kimi-k2.5'),
|
|
348
|
+
* tools: {
|
|
349
|
+
* codeInterpreter: kimiTools.codeInterpreter(),
|
|
350
|
+
* },
|
|
351
|
+
* prompt: 'Calculate the factorial of 10',
|
|
352
|
+
* });
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
353
355
|
codeInterpreter: (config) => {
|
|
354
356
|
return {
|
|
355
357
|
type: "provider",
|
|
@@ -1293,6 +1295,21 @@ var kimiTokenUsageSchema = import_v43.z.object({
|
|
|
1293
1295
|
reasoning_tokens: import_v43.z.number().nullish()
|
|
1294
1296
|
}).nullish()
|
|
1295
1297
|
}).nullish();
|
|
1298
|
+
var kimiContentPartSchema = import_v43.z.union([
|
|
1299
|
+
import_v43.z.object({
|
|
1300
|
+
type: import_v43.z.literal("text"),
|
|
1301
|
+
text: import_v43.z.string()
|
|
1302
|
+
}),
|
|
1303
|
+
import_v43.z.object({
|
|
1304
|
+
type: import_v43.z.literal("image_url"),
|
|
1305
|
+
image_url: import_v43.z.object({
|
|
1306
|
+
url: import_v43.z.string()
|
|
1307
|
+
})
|
|
1308
|
+
}),
|
|
1309
|
+
import_v43.z.looseObject({
|
|
1310
|
+
type: import_v43.z.string()
|
|
1311
|
+
})
|
|
1312
|
+
]);
|
|
1296
1313
|
var kimiChatResponseSchema = import_v43.z.looseObject({
|
|
1297
1314
|
id: import_v43.z.string().nullish(),
|
|
1298
1315
|
created: import_v43.z.number().nullish(),
|
|
@@ -1301,7 +1318,7 @@ var kimiChatResponseSchema = import_v43.z.looseObject({
|
|
|
1301
1318
|
import_v43.z.object({
|
|
1302
1319
|
message: import_v43.z.object({
|
|
1303
1320
|
role: import_v43.z.string().nullish(),
|
|
1304
|
-
content: import_v43.z.union([import_v43.z.string(), import_v43.z.array(
|
|
1321
|
+
content: import_v43.z.union([import_v43.z.string(), import_v43.z.array(kimiContentPartSchema)]).nullish(),
|
|
1305
1322
|
reasoning_content: import_v43.z.string().nullish(),
|
|
1306
1323
|
reasoning: import_v43.z.string().nullish(),
|
|
1307
1324
|
tool_calls: import_v43.z.array(
|
|
@@ -1818,7 +1835,7 @@ function guessFilename(attachment, contentType) {
|
|
|
1818
1835
|
const urlPath = attachment.url.split("?")[0];
|
|
1819
1836
|
const segments = urlPath.split("/");
|
|
1820
1837
|
const lastSegment = segments[segments.length - 1];
|
|
1821
|
-
if (lastSegment
|
|
1838
|
+
if (lastSegment.includes(".")) {
|
|
1822
1839
|
return lastSegment;
|
|
1823
1840
|
}
|
|
1824
1841
|
}
|
|
@@ -1834,7 +1851,7 @@ function guessFilename(attachment, contentType) {
|
|
|
1834
1851
|
}
|
|
1835
1852
|
|
|
1836
1853
|
// src/version.ts
|
|
1837
|
-
var VERSION = "0.
|
|
1854
|
+
var VERSION = "0.3.0".length > 0 ? "0.3.0" : "0.0.0";
|
|
1838
1855
|
|
|
1839
1856
|
// src/kimi-provider.ts
|
|
1840
1857
|
var GLOBAL_BASE_URL = "https://api.moonshot.ai/v1";
|