@kernl-sdk/ai 0.4.0 → 0.4.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.
@@ -1,4 +1,4 @@
1
1
 
2
- > @kernl-sdk/ai@0.4.0 build /home/runner/work/kernl/kernl/packages/providers/ai
2
+ > @kernl-sdk/ai@0.4.1 build /home/runner/work/kernl/kernl/packages/providers/ai
3
3
  > tsc && tsc-alias --resolve-full-paths
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @kernl/ai
2
2
 
3
+ ## 0.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 58e9db2: Fix provider normalization and ThreadStreamEvent types
8
+ - Normalize AI SDK provider strings (`anthropic.messages` -> `anthropic`, etc.)
9
+ - Export `ThreadStreamEvent` from kernl for consumers
10
+ - Update `toUIMessageStream` to accept `ThreadStreamEvent` from `agent.stream()`
11
+ - Add `kernl` as dependency to `@kernl-sdk/ai` (breaking circular devDep)
12
+
13
+ - Updated dependencies [58e9db2]
14
+ - Updated dependencies [320b76a]
15
+ - kernl@0.12.1
16
+
3
17
  ## 0.4.0
4
18
 
5
19
  ### Minor Changes
@@ -1,5 +1,6 @@
1
1
  import type { Codec } from "@kernl-sdk/shared/lib";
2
2
  import { type LanguageModelStreamEvent } from "@kernl-sdk/protocol";
3
+ import { type ThreadStreamEvent } from "kernl";
3
4
  import { type UIMessageChunk } from "ai";
4
5
  /**
5
6
  * Convert kernl stream to AI SDK UIMessage stream.
@@ -14,7 +15,7 @@ import { type UIMessageChunk } from "ai";
14
15
  * return createUIMessageStreamResponse({ stream: ui });
15
16
  * ```
16
17
  */
17
- export declare function toUIMessageStream(stream: AsyncIterable<LanguageModelStreamEvent>): ReadableStream<UIMessageChunk>;
18
+ export declare function toUIMessageStream(stream: AsyncIterable<ThreadStreamEvent | LanguageModelStreamEvent>): ReadableStream<UIMessageChunk>;
18
19
  /**
19
20
  * Convert kernl's LanguageModelStreamEvent to AI SDK's UIMessageChunk format.
20
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ui-stream.d.ts","sourceRoot":"","sources":["../../src/convert/ui-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,IAAI,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,CAAC,wBAAwB,CAAC,GAC9C,cAAc,CAAC,cAAc,CAAC,CAWhC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAChC,wBAAwB,EACxB,cAAc,GAAG,IAAI,CAuHtB,CAAC"}
1
+ {"version":3,"file":"ui-stream.d.ts","sourceRoot":"","sources":["../../src/convert/ui-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,wBAAwB,EAAU,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,IAAI,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,GAClE,cAAc,CAAC,cAAc,CAAC,CAahC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAChC,wBAAwB,EACxB,cAAc,GAAG,IAAI,CAuHtB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { FAILED, } from "@kernl-sdk/protocol";
1
+ import { FAILED } from "@kernl-sdk/protocol";
2
2
  import { createUIMessageStream } from "ai";
3
3
  /**
4
4
  * Convert kernl stream to AI SDK UIMessage stream.
@@ -17,6 +17,8 @@ export function toUIMessageStream(stream) {
17
17
  return createUIMessageStream({
18
18
  async execute({ writer }) {
19
19
  for await (const event of stream) {
20
+ if (event.kind === "system")
21
+ continue;
20
22
  const chunk = STREAM_UI_PART.encode(event);
21
23
  if (chunk) {
22
24
  writer.write(chunk);
@@ -1 +1 @@
1
- {"version":3,"file":"language-model.d.ts","sourceRoot":"","sources":["../src/language-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAS7B;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAK1C,OAAO,CAAC,KAAK;IAJzB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEL,KAAK,EAAE,eAAe;IAK1C;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAiBjC;;OAEG;IACI,MAAM,CACX,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,wBAAwB,CAAC;CAkF3C"}
1
+ {"version":3,"file":"language-model.d.ts","sourceRoot":"","sources":["../src/language-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAU7B;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAK1C,OAAO,CAAC,KAAK;IAJzB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEL,KAAK,EAAE,eAAe;IAK1C;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAiBjC;;OAEG;IACI,MAAM,CACX,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,wBAAwB,CAAC;CAkF3C"}
@@ -4,6 +4,7 @@ import { TOOL } from "./convert/tools.js";
4
4
  import { MODEL_SETTINGS } from "./convert/settings.js";
5
5
  import { MODEL_RESPONSE, RESPONSE_FORMAT } from "./convert/response.js";
6
6
  import { convertStream } from "./convert/stream.js";
7
+ import { normalizeProvider } from "./util.js";
7
8
  /**
8
9
  * LanguageModel adapter for the AI SDK LanguageModelV3.
9
10
  */
@@ -14,7 +15,7 @@ export class AISDKLanguageModel {
14
15
  modelId;
15
16
  constructor(model) {
16
17
  this.model = model;
17
- this.provider = model.provider;
18
+ this.provider = normalizeProvider(model.provider);
18
19
  this.modelId = model.modelId;
19
20
  }
20
21
  /**
package/dist/util.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Normalize AI SDK provider strings to base provider ID.
3
+ *
4
+ * AI SDK returns provider strings like:
5
+ * - "anthropic.messages" -> "anthropic"
6
+ * - "openai.responses" -> "openai"
7
+ * - "google.generative-ai" -> "google"
8
+ */
9
+ export declare function normalizeProvider(provider: string): string;
10
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D"}
package/dist/util.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalize AI SDK provider strings to base provider ID.
3
+ *
4
+ * AI SDK returns provider strings like:
5
+ * - "anthropic.messages" -> "anthropic"
6
+ * - "openai.responses" -> "openai"
7
+ * - "google.generative-ai" -> "google"
8
+ */
9
+ export function normalizeProvider(provider) {
10
+ const dot = provider.indexOf(".");
11
+ return dot !== -1 ? provider.slice(0, dot) : provider;
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kernl-sdk/ai",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Vercel AI SDK adapter for kernl",
5
5
  "keywords": [
6
6
  "kernl",
@@ -70,7 +70,8 @@
70
70
  "dependencies": {
71
71
  "@kernl-sdk/protocol": "0.5.0",
72
72
  "@kernl-sdk/retrieval": "0.1.9",
73
- "@kernl-sdk/shared": "^0.4.0"
73
+ "@kernl-sdk/shared": "^0.4.0",
74
+ "kernl": "0.12.1"
74
75
  },
75
76
  "scripts": {
76
77
  "build": "tsc && tsc-alias --resolve-full-paths",
@@ -1,8 +1,6 @@
1
1
  import type { Codec } from "@kernl-sdk/shared/lib";
2
- import {
3
- type LanguageModelStreamEvent,
4
- FAILED,
5
- } from "@kernl-sdk/protocol";
2
+ import { type LanguageModelStreamEvent, FAILED } from "@kernl-sdk/protocol";
3
+ import { type ThreadStreamEvent } from "kernl";
6
4
  import { createUIMessageStream, type UIMessageChunk } from "ai";
7
5
 
8
6
  /**
@@ -19,11 +17,13 @@ import { createUIMessageStream, type UIMessageChunk } from "ai";
19
17
  * ```
20
18
  */
21
19
  export function toUIMessageStream(
22
- stream: AsyncIterable<LanguageModelStreamEvent>,
20
+ stream: AsyncIterable<ThreadStreamEvent | LanguageModelStreamEvent>,
23
21
  ): ReadableStream<UIMessageChunk> {
24
22
  return createUIMessageStream({
25
23
  async execute({ writer }) {
26
24
  for await (const event of stream) {
25
+ if (event.kind === "system") continue;
26
+
27
27
  const chunk = STREAM_UI_PART.encode(event);
28
28
  if (chunk) {
29
29
  writer.write(chunk);
@@ -13,6 +13,7 @@ import { TOOL } from "./convert/tools";
13
13
  import { MODEL_SETTINGS } from "./convert/settings";
14
14
  import { MODEL_RESPONSE, RESPONSE_FORMAT } from "./convert/response";
15
15
  import { convertStream } from "./convert/stream";
16
+ import { normalizeProvider } from "./util";
16
17
 
17
18
  /**
18
19
  * LanguageModel adapter for the AI SDK LanguageModelV3.
@@ -23,7 +24,7 @@ export class AISDKLanguageModel implements LanguageModel {
23
24
  readonly modelId: string;
24
25
 
25
26
  constructor(private model: LanguageModelV3) {
26
- this.provider = model.provider;
27
+ this.provider = normalizeProvider(model.provider);
27
28
  this.modelId = model.modelId;
28
29
  }
29
30
 
package/src/util.ts ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Normalize AI SDK provider strings to base provider ID.
3
+ *
4
+ * AI SDK returns provider strings like:
5
+ * - "anthropic.messages" -> "anthropic"
6
+ * - "openai.responses" -> "openai"
7
+ * - "google.generative-ai" -> "google"
8
+ */
9
+ export function normalizeProvider(provider: string): string {
10
+ const dot = provider.indexOf(".");
11
+ return dot !== -1 ? provider.slice(0, dot) : provider;
12
+ }