@kernl-sdk/ai 0.1.1
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/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +10 -0
- package/LICENSE +201 -0
- package/dist/__tests__/integration.test.d.ts +2 -0
- package/dist/__tests__/integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration.test.js +388 -0
- package/dist/convert/__tests__/message.test.d.ts +2 -0
- package/dist/convert/__tests__/message.test.d.ts.map +1 -0
- package/dist/convert/__tests__/message.test.js +300 -0
- package/dist/convert/__tests__/response.test.d.ts +2 -0
- package/dist/convert/__tests__/response.test.d.ts.map +1 -0
- package/dist/convert/__tests__/response.test.js +49 -0
- package/dist/convert/__tests__/settings.test.d.ts +2 -0
- package/dist/convert/__tests__/settings.test.d.ts.map +1 -0
- package/dist/convert/__tests__/settings.test.js +144 -0
- package/dist/convert/__tests__/stream.test.d.ts +2 -0
- package/dist/convert/__tests__/stream.test.d.ts.map +1 -0
- package/dist/convert/__tests__/stream.test.js +389 -0
- package/dist/convert/__tests__/tools.test.d.ts +2 -0
- package/dist/convert/__tests__/tools.test.d.ts.map +1 -0
- package/dist/convert/__tests__/tools.test.js +152 -0
- package/dist/convert/message.d.ts +4 -0
- package/dist/convert/message.d.ts.map +1 -0
- package/dist/convert/message.js +122 -0
- package/dist/convert/messages.d.ts +4 -0
- package/dist/convert/messages.d.ts.map +1 -0
- package/dist/convert/messages.js +130 -0
- package/dist/convert/response.d.ts +15 -0
- package/dist/convert/response.d.ts.map +1 -0
- package/dist/convert/response.js +105 -0
- package/dist/convert/settings.d.ts +16 -0
- package/dist/convert/settings.d.ts.map +1 -0
- package/dist/convert/settings.js +36 -0
- package/dist/convert/stream.d.ts +11 -0
- package/dist/convert/stream.d.ts.map +1 -0
- package/dist/convert/stream.js +154 -0
- package/dist/convert/tools.d.ts +5 -0
- package/dist/convert/tools.d.ts.map +1 -0
- package/dist/convert/tools.js +42 -0
- package/dist/error.d.ts +8 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +15 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/language-model.d.ts +21 -0
- package/dist/language-model.d.ts.map +1 -0
- package/dist/language-model.js +60 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +17 -0
- package/dist/providers/google.d.ts +14 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +17 -0
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +17 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +79 -0
- package/src/__tests__/integration.test.ts +447 -0
- package/src/convert/__tests__/message.test.ts +336 -0
- package/src/convert/__tests__/response.test.ts +63 -0
- package/src/convert/__tests__/settings.test.ts +188 -0
- package/src/convert/__tests__/stream.test.ts +460 -0
- package/src/convert/__tests__/tools.test.ts +179 -0
- package/src/convert/message.ts +150 -0
- package/src/convert/response.ts +144 -0
- package/src/convert/settings.ts +62 -0
- package/src/convert/stream.ts +181 -0
- package/src/convert/tools.ts +59 -0
- package/src/error.ts +16 -0
- package/src/index.ts +22 -0
- package/src/language-model.ts +77 -0
- package/src/providers/anthropic.ts +18 -0
- package/src/providers/google.ts +18 -0
- package/src/providers/openai.ts +18 -0
- package/src/types.ts +0 -0
- package/tsconfig.json +13 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { MESSAGE } from "./convert/message";
|
|
2
|
+
import { TOOL } from "./convert/tools";
|
|
3
|
+
import { MODEL_SETTINGS } from "./convert/settings";
|
|
4
|
+
import { MODEL_RESPONSE } from "./convert/response";
|
|
5
|
+
import { convertStream } from "./convert/stream";
|
|
6
|
+
import { wrapError } from "./error";
|
|
7
|
+
/**
|
|
8
|
+
* LanguageModel adapter for the AI SDK LanguageModelV3.
|
|
9
|
+
*/
|
|
10
|
+
export class AISDKLanguageModel {
|
|
11
|
+
model;
|
|
12
|
+
spec = "1.0";
|
|
13
|
+
provider;
|
|
14
|
+
modelId;
|
|
15
|
+
constructor(model) {
|
|
16
|
+
this.model = model;
|
|
17
|
+
this.provider = model.provider;
|
|
18
|
+
this.modelId = model.modelId;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get a response from the model.
|
|
22
|
+
*/
|
|
23
|
+
async generate(request) {
|
|
24
|
+
try {
|
|
25
|
+
const messages = request.input.map(MESSAGE.encode);
|
|
26
|
+
const tools = request.tools ? request.tools.map(TOOL.encode) : undefined;
|
|
27
|
+
const settings = MODEL_SETTINGS.encode(request.settings);
|
|
28
|
+
const result = await this.model.doGenerate({
|
|
29
|
+
prompt: messages,
|
|
30
|
+
tools,
|
|
31
|
+
...settings,
|
|
32
|
+
abortSignal: request.abort,
|
|
33
|
+
});
|
|
34
|
+
return MODEL_RESPONSE.decode(result);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw wrapError(error, "generate");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get a streamed response from the model.
|
|
42
|
+
*/
|
|
43
|
+
async *stream(request) {
|
|
44
|
+
try {
|
|
45
|
+
const messages = request.input.map(MESSAGE.encode);
|
|
46
|
+
const tools = request.tools ? request.tools.map(TOOL.encode) : undefined;
|
|
47
|
+
const settings = MODEL_SETTINGS.encode(request.settings);
|
|
48
|
+
const stream = await this.model.doStream({
|
|
49
|
+
prompt: messages,
|
|
50
|
+
tools,
|
|
51
|
+
...settings,
|
|
52
|
+
abortSignal: request.abort,
|
|
53
|
+
});
|
|
54
|
+
yield* convertStream(stream.stream);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw wrapError(error, "stream");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
2
|
+
/**
|
|
3
|
+
* Create a Kernl-compatible Anthropic language model.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { anthropic } from '@kernl-sdk/ai/anthropic';
|
|
8
|
+
*
|
|
9
|
+
* const claude = anthropic('claude-3-5-sonnet-20241022');
|
|
10
|
+
* const response = await claude.generate([...], {});
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function anthropic(modelId: string): AISDKLanguageModel;
|
|
14
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,sBAGxC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { anthropic as createAnthropicModel } from "@ai-sdk/anthropic";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Kernl-compatible Anthropic language model.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { anthropic } from '@kernl-sdk/ai/anthropic';
|
|
9
|
+
*
|
|
10
|
+
* const claude = anthropic('claude-3-5-sonnet-20241022');
|
|
11
|
+
* const response = await claude.generate([...], {});
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function anthropic(modelId) {
|
|
15
|
+
const model = createAnthropicModel(modelId);
|
|
16
|
+
return new AISDKLanguageModel(model);
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
2
|
+
/**
|
|
3
|
+
* Create a Kernl-compatible Google Generative AI language model.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { google } from '@kernl-sdk/ai/google';
|
|
8
|
+
*
|
|
9
|
+
* const gemini = google('gemini-2.0-flash-exp');
|
|
10
|
+
* const response = await gemini.generate([...], {});
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function google(modelId: string): AISDKLanguageModel;
|
|
14
|
+
//# sourceMappingURL=google.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,sBAGrC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { google as createGoogleModel } from "@ai-sdk/google";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Kernl-compatible Google Generative AI language model.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { google } from '@kernl-sdk/ai/google';
|
|
9
|
+
*
|
|
10
|
+
* const gemini = google('gemini-2.0-flash-exp');
|
|
11
|
+
* const response = await gemini.generate([...], {});
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function google(modelId) {
|
|
15
|
+
const model = createGoogleModel(modelId);
|
|
16
|
+
return new AISDKLanguageModel(model);
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
2
|
+
/**
|
|
3
|
+
* Create a Kernl-compatible OpenAI language model.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { openai } from '@kernl-sdk/ai/openai';
|
|
8
|
+
*
|
|
9
|
+
* const gpt4 = openai('gpt-4-turbo');
|
|
10
|
+
* const response = await gpt4.generate([...], {});
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function openai(modelId: string): AISDKLanguageModel;
|
|
14
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,sBAGrC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { openai as createOpenAIModel } from "@ai-sdk/openai";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
/**
|
|
4
|
+
* Create a Kernl-compatible OpenAI language model.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { openai } from '@kernl-sdk/ai/openai';
|
|
9
|
+
*
|
|
10
|
+
* const gpt4 = openai('gpt-4-turbo');
|
|
11
|
+
* const response = await gpt4.generate([...], {});
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function openai(modelId) {
|
|
15
|
+
const model = createOpenAIModel(modelId);
|
|
16
|
+
return new AISDKLanguageModel(model);
|
|
17
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kernl-sdk/ai",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "AI SDK adapter for Kernl - Universal provider support via Vercel AI SDK",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"kernl",
|
|
7
|
+
"ai",
|
|
8
|
+
"ai-sdk",
|
|
9
|
+
"llm",
|
|
10
|
+
"adapter"
|
|
11
|
+
],
|
|
12
|
+
"author": "dremnik",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/dremnik/kernl.git",
|
|
17
|
+
"directory": "packages/_ai"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/dremnik/kernl#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/dremnik/kernl/issues"
|
|
22
|
+
},
|
|
23
|
+
"type": "module",
|
|
24
|
+
"exports": {
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"import": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./anthropic": {
|
|
30
|
+
"types": "./dist/providers/anthropic.d.ts",
|
|
31
|
+
"import": "./dist/providers/anthropic.js"
|
|
32
|
+
},
|
|
33
|
+
"./openai": {
|
|
34
|
+
"types": "./dist/providers/openai.d.ts",
|
|
35
|
+
"import": "./dist/providers/openai.js"
|
|
36
|
+
},
|
|
37
|
+
"./google": {
|
|
38
|
+
"types": "./dist/providers/google.d.ts",
|
|
39
|
+
"import": "./dist/providers/google.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"@ai-sdk/provider": "^3.0.0-beta.15",
|
|
44
|
+
"@kernl-sdk/protocol": "0.1.1"
|
|
45
|
+
},
|
|
46
|
+
"peerDependenciesMeta": {
|
|
47
|
+
"@ai-sdk/anthropic": {
|
|
48
|
+
"optional": true
|
|
49
|
+
},
|
|
50
|
+
"@ai-sdk/openai": {
|
|
51
|
+
"optional": true
|
|
52
|
+
},
|
|
53
|
+
"@ai-sdk/google": {
|
|
54
|
+
"optional": true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@ai-sdk/anthropic": "3.0.0-beta.53",
|
|
59
|
+
"@ai-sdk/google": "3.0.0-beta.43",
|
|
60
|
+
"@ai-sdk/openai": "3.0.0-beta.57",
|
|
61
|
+
"@ai-sdk/provider": "3.0.0-beta.15",
|
|
62
|
+
"@types/node": "^24.10.0",
|
|
63
|
+
"tsc-alias": "^1.8.10",
|
|
64
|
+
"typescript": "5.9.2",
|
|
65
|
+
"vitest": "^4.0.8"
|
|
66
|
+
},
|
|
67
|
+
"dependencies": {
|
|
68
|
+
"@kernl-sdk/shared": "^0.1.1"
|
|
69
|
+
},
|
|
70
|
+
"scripts": {
|
|
71
|
+
"build": "tsc && tsc-alias",
|
|
72
|
+
"dev": "tsc --watch",
|
|
73
|
+
"lint": "eslint src/",
|
|
74
|
+
"check-types": "tsc --noEmit",
|
|
75
|
+
"test": "vitest",
|
|
76
|
+
"test:watch": "vitest --watch",
|
|
77
|
+
"test:run": "vitest run"
|
|
78
|
+
}
|
|
79
|
+
}
|