@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,77 @@
|
|
|
1
|
+
import type { LanguageModelV3 } from "@ai-sdk/provider";
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
LanguageModel,
|
|
5
|
+
LanguageModelRequest,
|
|
6
|
+
LanguageModelResponse,
|
|
7
|
+
LanguageModelStreamEvent,
|
|
8
|
+
} from "@kernl-sdk/protocol";
|
|
9
|
+
|
|
10
|
+
import { MESSAGE } from "./convert/message";
|
|
11
|
+
import { TOOL } from "./convert/tools";
|
|
12
|
+
import { MODEL_SETTINGS } from "./convert/settings";
|
|
13
|
+
import { MODEL_RESPONSE } from "./convert/response";
|
|
14
|
+
import { convertStream } from "./convert/stream";
|
|
15
|
+
import { wrapError } from "./error";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* LanguageModel adapter for the AI SDK LanguageModelV3.
|
|
19
|
+
*/
|
|
20
|
+
export class AISDKLanguageModel implements LanguageModel {
|
|
21
|
+
readonly spec = "1.0" as const;
|
|
22
|
+
readonly provider: string;
|
|
23
|
+
readonly modelId: string;
|
|
24
|
+
|
|
25
|
+
constructor(private model: LanguageModelV3) {
|
|
26
|
+
this.provider = model.provider;
|
|
27
|
+
this.modelId = model.modelId;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get a response from the model.
|
|
32
|
+
*/
|
|
33
|
+
async generate(
|
|
34
|
+
request: LanguageModelRequest,
|
|
35
|
+
): Promise<LanguageModelResponse> {
|
|
36
|
+
try {
|
|
37
|
+
const messages = request.input.map(MESSAGE.encode);
|
|
38
|
+
const tools = request.tools ? request.tools.map(TOOL.encode) : undefined;
|
|
39
|
+
const settings = MODEL_SETTINGS.encode(request.settings);
|
|
40
|
+
|
|
41
|
+
const result = await this.model.doGenerate({
|
|
42
|
+
prompt: messages,
|
|
43
|
+
tools,
|
|
44
|
+
...settings,
|
|
45
|
+
abortSignal: request.abort,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return MODEL_RESPONSE.decode(result);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
throw wrapError(error, "generate");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Get a streamed response from the model.
|
|
56
|
+
*/
|
|
57
|
+
async *stream(
|
|
58
|
+
request: LanguageModelRequest,
|
|
59
|
+
): AsyncIterable<LanguageModelStreamEvent> {
|
|
60
|
+
try {
|
|
61
|
+
const messages = request.input.map(MESSAGE.encode);
|
|
62
|
+
const tools = request.tools ? request.tools.map(TOOL.encode) : undefined;
|
|
63
|
+
const settings = MODEL_SETTINGS.encode(request.settings);
|
|
64
|
+
|
|
65
|
+
const stream = await this.model.doStream({
|
|
66
|
+
prompt: messages,
|
|
67
|
+
tools,
|
|
68
|
+
...settings,
|
|
69
|
+
abortSignal: request.abort,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
yield* convertStream(stream.stream);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
throw wrapError(error, "stream");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { anthropic as createAnthropicModel } from "@ai-sdk/anthropic";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Create a Kernl-compatible Anthropic language model.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { anthropic } from '@kernl-sdk/ai/anthropic';
|
|
10
|
+
*
|
|
11
|
+
* const claude = anthropic('claude-3-5-sonnet-20241022');
|
|
12
|
+
* const response = await claude.generate([...], {});
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function anthropic(modelId: string) {
|
|
16
|
+
const model = createAnthropicModel(modelId);
|
|
17
|
+
return new AISDKLanguageModel(model);
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { google as createGoogleModel } from "@ai-sdk/google";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Create a Kernl-compatible Google Generative AI language model.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { google } from '@kernl-sdk/ai/google';
|
|
10
|
+
*
|
|
11
|
+
* const gemini = google('gemini-2.0-flash-exp');
|
|
12
|
+
* const response = await gemini.generate([...], {});
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function google(modelId: string) {
|
|
16
|
+
const model = createGoogleModel(modelId);
|
|
17
|
+
return new AISDKLanguageModel(model);
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { openai as createOpenAIModel } from "@ai-sdk/openai";
|
|
2
|
+
import { AISDKLanguageModel } from "../language-model";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Create a Kernl-compatible OpenAI language model.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { openai } from '@kernl-sdk/ai/openai';
|
|
10
|
+
*
|
|
11
|
+
* const gpt4 = openai('gpt-4-turbo');
|
|
12
|
+
* const response = await gpt4.generate([...], {});
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function openai(modelId: string) {
|
|
16
|
+
const model = createOpenAIModel(modelId);
|
|
17
|
+
return new AISDKLanguageModel(model);
|
|
18
|
+
}
|
package/src/types.ts
ADDED
|
File without changes
|
package/tsconfig.json
ADDED
package/vitest.config.ts
ADDED