@patternzones/koine-sdk 2.0.4 → 2.2.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 CHANGED
@@ -76,6 +76,27 @@ Creates a client instance with the given configuration. The config is validated
76
76
  | `KoineError` | Error class with typed `code` property |
77
77
  | `KoineErrorCode` | Union type of all possible error codes |
78
78
 
79
+ ## Error Handling & Retries
80
+
81
+ The SDK does not automatically retry failed requests. When the gateway returns `429 Too Many Requests` (concurrency limit exceeded), your application should implement retry logic:
82
+
83
+ ```typescript
84
+ async function generateWithRetry(prompt: string, maxRetries = 3) {
85
+ for (let i = 0; i < maxRetries; i++) {
86
+ try {
87
+ return await koine.generateText({ prompt });
88
+ } catch (error) {
89
+ if (error instanceof KoineError && error.code === 'CONCURRENCY_LIMIT_ERROR') {
90
+ await new Promise(r => setTimeout(r, 1000 * (i + 1))); // Exponential backoff
91
+ continue;
92
+ }
93
+ throw error;
94
+ }
95
+ }
96
+ throw new Error('Max retries exceeded');
97
+ }
98
+ ```
99
+
79
100
  ## Documentation
80
101
 
81
102
  See the [SDK Guide](https://github.com/pattern-zones-co/koine/blob/main/docs/sdk-guide.md) for:
package/dist/client.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { type GenerateObjectOptions, type GenerateObjectResult, generateObject } from "./object.js";
2
+ import { type StreamObjectOptions, streamObject } from "./stream-object.js";
2
3
  import { type StreamTextOptions, streamText } from "./stream/index.js";
3
4
  import { type GenerateTextOptions, type GenerateTextResult, generateText } from "./text.js";
4
- import type { KoineConfig, KoineStreamResult } from "./types.js";
5
- export { generateText, streamText, generateObject };
6
- export type { GenerateTextOptions, GenerateTextResult, StreamTextOptions, GenerateObjectOptions, GenerateObjectResult, };
5
+ import type { KoineConfig, KoineStreamObjectResult, KoineStreamResult } from "./types.js";
6
+ export { generateText, streamText, generateObject, streamObject };
7
+ export type { GenerateTextOptions, GenerateTextResult, StreamTextOptions, GenerateObjectOptions, GenerateObjectResult, StreamObjectOptions, };
7
8
  /**
8
9
  * Koine client interface returned by createKoine.
9
10
  */
@@ -33,6 +34,15 @@ export interface KoineClient {
33
34
  * @throws {KoineError} With code 'VALIDATION_ERROR' if response doesn't match schema
34
35
  */
35
36
  generateObject<T>(options: GenerateObjectOptions<T>): Promise<GenerateObjectResult<T>>;
37
+ /**
38
+ * Streams structured JSON objects from Koine gateway service.
39
+ *
40
+ * @typeParam T - The type of the expected response object, inferred from schema
41
+ * @param options - Request options including Zod schema
42
+ * @returns KoineStreamObjectResult with partialObjectStream, object, sessionId, usage
43
+ * @throws {KoineError} When connection fails or stream encounters an error
44
+ */
45
+ streamObject<T>(options: StreamObjectOptions<T>): Promise<KoineStreamObjectResult<T>>;
36
46
  }
37
47
  /**
38
48
  * Creates a Koine client instance with the given configuration.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,YAAY,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACpD,YAAY,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAExE;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnE;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,EACf,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAU5D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,YAAY,EACZ,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EACX,WAAW,EACX,uBAAuB,EACvB,iBAAiB,EACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;AAClE,YAAY,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACnB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAExE;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEnE;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,EACf,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpC;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,EACb,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAY5D"}
package/dist/client.js CHANGED
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateObject = exports.streamText = exports.generateText = void 0;
3
+ exports.streamObject = exports.generateObject = exports.streamText = exports.generateText = void 0;
4
4
  exports.createKoine = createKoine;
5
5
  // Import and re-export functions from the new modules
6
6
  const http_js_1 = require("./http.js");
7
7
  const object_js_1 = require("./object.js");
8
8
  Object.defineProperty(exports, "generateObject", { enumerable: true, get: function () { return object_js_1.generateObject; } });
9
+ const stream_object_js_1 = require("./stream-object.js");
10
+ Object.defineProperty(exports, "streamObject", { enumerable: true, get: function () { return stream_object_js_1.streamObject; } });
9
11
  const index_js_1 = require("./stream/index.js");
10
12
  Object.defineProperty(exports, "streamText", { enumerable: true, get: function () { return index_js_1.streamText; } });
11
13
  const text_js_1 = require("./text.js");
@@ -41,6 +43,7 @@ function createKoine(config) {
41
43
  generateText: (options) => (0, text_js_1.generateText)(config, options),
42
44
  streamText: (options) => (0, index_js_1.streamText)(config, options),
43
45
  generateObject: (options) => (0, object_js_1.generateObject)(config, options),
46
+ streamObject: (options) => (0, stream_object_js_1.streamObject)(config, options),
44
47
  };
45
48
  }
46
49
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAoFA,kCAUC;AA9FD,sDAAsD;AACtD,uCAA2C;AAC3C,2CAIqB;AAUc,+FAXlC,0BAAc,OAWkC;AATjD,gDAAuE;AAShD,2FATU,qBAAU,OASV;AARjC,uCAImB;AAIV,6FALR,sBAAY,OAKQ;AA4CrB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,WAAW,CAAC,MAAmB;IAC9C,wCAAwC;IACxC,IAAA,wBAAc,EAAC,MAAM,CAAC,CAAC;IAEvB,OAAO;QACN,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,sBAAY,EAAC,MAAM,EAAE,OAAO,CAAC;QACxD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,MAAM,EAAE,OAAO,CAAC;QACpD,cAAc,EAAE,CAAI,OAAiC,EAAE,EAAE,CACxD,IAAA,0BAAc,EAAC,MAAM,EAAE,OAAO,CAAC;KAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAsGA,kCAYC;AAlHD,sDAAsD;AACtD,uCAA2C;AAC3C,2CAIqB;AAec,+FAhBlC,0BAAc,OAgBkC;AAdjD,yDAA4E;AAczB,6FAdhB,+BAAY,OAcgB;AAb/D,gDAAuE;AAahD,2FAbU,qBAAU,OAaV;AAZjC,uCAImB;AAQV,6FATR,sBAAY,OASQ;AAyDrB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,WAAW,CAAC,MAAmB;IAC9C,wCAAwC;IACxC,IAAA,wBAAc,EAAC,MAAM,CAAC,CAAC;IAEvB,OAAO;QACN,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,sBAAY,EAAC,MAAM,EAAE,OAAO,CAAC;QACxD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,MAAM,EAAE,OAAO,CAAC;QACpD,cAAc,EAAE,CAAI,OAAiC,EAAE,EAAE,CACxD,IAAA,0BAAc,EAAC,MAAM,EAAE,OAAO,CAAC;QAChC,YAAY,EAAE,CAAI,OAA+B,EAAE,EAAE,CACpD,IAAA,+BAAY,EAAC,MAAM,EAAE,OAAO,CAAC;KAC9B,CAAC;AACH,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Known error codes returned by the SDK and gateway.
3
3
  */
4
- export type KoineErrorCode = "HTTP_ERROR" | "INVALID_RESPONSE" | "INVALID_CONFIG" | "VALIDATION_ERROR" | "STREAM_ERROR" | "SSE_PARSE_ERROR" | "NO_SESSION" | "NO_USAGE" | "NO_RESPONSE_BODY" | "TIMEOUT" | "NETWORK_ERROR" | "INVALID_PARAMS" | "AUTH_ERROR" | "UNAUTHORIZED" | "SERVER_ERROR" | "SCHEMA_ERROR" | "RATE_LIMITED" | "CONTEXT_OVERFLOW";
4
+ export type KoineErrorCode = "HTTP_ERROR" | "INVALID_RESPONSE" | "INVALID_CONFIG" | "VALIDATION_ERROR" | "STREAM_ERROR" | "SSE_PARSE_ERROR" | "NO_SESSION" | "NO_USAGE" | "NO_OBJECT" | "NO_RESPONSE_BODY" | "TIMEOUT" | "NETWORK_ERROR" | "INVALID_PARAMS" | "AUTH_ERROR" | "UNAUTHORIZED" | "SERVER_ERROR" | "SCHEMA_ERROR" | "RATE_LIMITED" | "CONTEXT_OVERFLOW";
5
5
  /**
6
6
  * Custom error class for Koine client errors.
7
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAEvB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,iBAAiB,GACjB,YAAY,GACZ,UAAU,GACV,kBAAkB,GAClB,SAAS,GACT,eAAe,GAEf,gBAAgB,GAChB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,kBAAkB,CAAC;AAEtB;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM;CAQnE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAEvB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,iBAAiB,GACjB,YAAY,GACZ,UAAU,GACV,WAAW,GACX,kBAAkB,GAClB,SAAS,GACT,eAAe,GAEf,gBAAgB,GAChB,YAAY,GACZ,cAAc,GACd,cAAc,GACd,cAAc,GACd,cAAc,GACd,kBAAkB,CAAC;AAEtB;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM;CAQnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAyBA;;;;;;;;;;;;;GAaG;AACH,MAAa,UAAW,SAAQ,KAAK;IAC3B,IAAI,CAAiB;IACrB,OAAO,CAAU;IAE1B,YAAY,OAAe,EAAE,IAAoB,EAAE,OAAgB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,sEAAsE;QACtE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD;AAZD,gCAYC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AA0BA;;;;;;;;;;;;;GAaG;AACH,MAAa,UAAW,SAAQ,KAAK;IAC3B,IAAI,CAAiB;IACrB,OAAO,CAAU;IAE1B,YAAY,OAAe,EAAE,IAAoB,EAAE,OAAgB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,sEAAsE;QACtE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD;AAZD,gCAYC"}
package/dist/index.d.ts CHANGED
@@ -21,10 +21,10 @@
21
21
  * console.log(result.text);
22
22
  * ```
23
23
  */
24
- export type { KoineConfig, KoineUsage, KoineStreamResult } from "./types.js";
24
+ export type { KoineConfig, KoineUsage, KoineStreamResult, KoineStreamObjectResult, } from "./types.js";
25
25
  export { KoineError } from "./errors.js";
26
26
  export type { KoineErrorCode } from "./errors.js";
27
27
  export { createKoine } from "./client.js";
28
- export type { KoineClient, GenerateTextOptions, GenerateTextResult, StreamTextOptions, GenerateObjectOptions, GenerateObjectResult, } from "./client.js";
29
- export { generateText, streamText, generateObject } from "./client.js";
28
+ export type { KoineClient, GenerateTextOptions, GenerateTextResult, StreamTextOptions, GenerateObjectOptions, GenerateObjectResult, StreamObjectOptions, } from "./client.js";
29
+ export { generateText, streamText, generateObject, streamObject, } from "./client.js";
30
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,EACX,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,uBAAuB,GACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACN,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,GACZ,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -23,7 +23,7 @@
23
23
  * ```
24
24
  */
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.generateObject = exports.streamText = exports.generateText = exports.createKoine = exports.KoineError = void 0;
26
+ exports.streamObject = exports.generateObject = exports.streamText = exports.generateText = exports.createKoine = exports.KoineError = void 0;
27
27
  // Errors
28
28
  var errors_js_1 = require("./errors.js");
29
29
  Object.defineProperty(exports, "KoineError", { enumerable: true, get: function () { return errors_js_1.KoineError; } });
@@ -35,4 +35,5 @@ var client_js_2 = require("./client.js");
35
35
  Object.defineProperty(exports, "generateText", { enumerable: true, get: function () { return client_js_2.generateText; } });
36
36
  Object.defineProperty(exports, "streamText", { enumerable: true, get: function () { return client_js_2.streamText; } });
37
37
  Object.defineProperty(exports, "generateObject", { enumerable: true, get: function () { return client_js_2.generateObject; } });
38
+ Object.defineProperty(exports, "streamObject", { enumerable: true, get: function () { return client_js_2.streamObject; } });
38
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAKH,SAAS;AACT,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AAGnB,mCAAmC;AACnC,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AAUpB,sDAAsD;AACtD,yCAAuE;AAA9D,yGAAA,YAAY,OAAA;AAAE,uGAAA,UAAU,OAAA;AAAE,2GAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAUH,SAAS;AACT,yCAAyC;AAAhC,uGAAA,UAAU,OAAA;AAGnB,mCAAmC;AACnC,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AAWpB,sDAAsD;AACtD,yCAKqB;AAJpB,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,yGAAA,YAAY,OAAA"}
@@ -0,0 +1,39 @@
1
+ import type { z } from "zod";
2
+ import type { KoineConfig, KoineStreamObjectResult } from "./types.js";
3
+ /**
4
+ * Streams structured JSON objects from Koine gateway service.
5
+ *
6
+ * @typeParam T - The type of the expected response object, inferred from schema
7
+ * @param config - Client configuration including baseUrl, authKey, and timeout
8
+ * @param options - Request options
9
+ * @param options.prompt - The user prompt describing what to extract
10
+ * @param options.schema - Zod schema defining the expected response structure
11
+ * @param options.system - Optional system prompt for context
12
+ * @param options.sessionId - Optional session ID to continue a conversation
13
+ * @param options.signal - Optional AbortSignal for cancellation
14
+ * @returns KoineStreamObjectResult containing:
15
+ * - partialObjectStream: ReadableStream of partial objects (async iterable)
16
+ * - object: Promise that resolves to final validated object
17
+ * - sessionId: Promise that resolves early when session event arrives
18
+ * - usage: Promise that resolves when stream completes
19
+ * @throws {KoineError} When connection fails or stream encounters an error
20
+ * @throws {KoineError} With code 'VALIDATION_ERROR' if final object fails schema validation
21
+ * @throws {KoineError} With code 'NO_OBJECT' if stream ends without receiving final object
22
+ */
23
+ export declare function streamObject<T>(config: KoineConfig, options: StreamObjectOptions<T>): Promise<KoineStreamObjectResult<T>>;
24
+ /**
25
+ * Request options for streaming object generation.
26
+ */
27
+ export interface StreamObjectOptions<T> {
28
+ /** The user prompt describing what to extract */
29
+ prompt: string;
30
+ /** Zod schema defining the expected response structure */
31
+ schema: z.ZodSchema<T>;
32
+ /** Optional system prompt for context */
33
+ system?: string;
34
+ /** Optional session ID to continue a conversation */
35
+ sessionId?: string;
36
+ /** Optional AbortSignal for cancellation */
37
+ signal?: AbortSignal;
38
+ }
39
+ //# sourceMappingURL=stream-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-object.d.ts","sourceRoot":"","sources":["../src/stream-object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAW7B,OAAO,KAAK,EAEX,WAAW,EACX,uBAAuB,EAMvB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,YAAY,CAAC,CAAC,EACnC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAiPrC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACrC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB"}
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.streamObject = streamObject;
4
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
5
+ const errors_js_1 = require("./errors.js");
6
+ const http_js_1 = require("./http.js");
7
+ const sse_js_1 = require("./stream/sse.js");
8
+ /** Events where parse errors must propagate (vs partial-object which can log and continue) */
9
+ const CRITICAL_EVENTS = new Set([
10
+ "session",
11
+ "result",
12
+ "error",
13
+ "done",
14
+ "object",
15
+ ]);
16
+ /**
17
+ * Streams structured JSON objects from Koine gateway service.
18
+ *
19
+ * @typeParam T - The type of the expected response object, inferred from schema
20
+ * @param config - Client configuration including baseUrl, authKey, and timeout
21
+ * @param options - Request options
22
+ * @param options.prompt - The user prompt describing what to extract
23
+ * @param options.schema - Zod schema defining the expected response structure
24
+ * @param options.system - Optional system prompt for context
25
+ * @param options.sessionId - Optional session ID to continue a conversation
26
+ * @param options.signal - Optional AbortSignal for cancellation
27
+ * @returns KoineStreamObjectResult containing:
28
+ * - partialObjectStream: ReadableStream of partial objects (async iterable)
29
+ * - object: Promise that resolves to final validated object
30
+ * - sessionId: Promise that resolves early when session event arrives
31
+ * - usage: Promise that resolves when stream completes
32
+ * @throws {KoineError} When connection fails or stream encounters an error
33
+ * @throws {KoineError} With code 'VALIDATION_ERROR' if final object fails schema validation
34
+ * @throws {KoineError} With code 'NO_OBJECT' if stream ends without receiving final object
35
+ */
36
+ async function streamObject(config, options) {
37
+ (0, http_js_1.validateConfig)(config);
38
+ // Convert Zod schema to JSON Schema for the gateway service
39
+ const jsonSchema = (0, zod_to_json_schema_1.zodToJsonSchema)(options.schema, {
40
+ $refStrategy: "none",
41
+ target: "jsonSchema7",
42
+ });
43
+ const response = await (0, http_js_1.safeFetch)(`${config.baseUrl}/stream-object`, {
44
+ method: "POST",
45
+ headers: {
46
+ "Content-Type": "application/json",
47
+ Authorization: `Bearer ${config.authKey}`,
48
+ },
49
+ body: JSON.stringify({
50
+ system: options.system,
51
+ prompt: options.prompt,
52
+ schema: jsonSchema,
53
+ sessionId: options.sessionId,
54
+ model: config.model,
55
+ }),
56
+ signal: (0, http_js_1.createAbortSignal)(config.timeout, options.signal),
57
+ }, config.timeout);
58
+ if (!response.ok) {
59
+ const errorBody = await (0, http_js_1.safeJsonParse)(response);
60
+ throw new errors_js_1.KoineError(errorBody?.error || `HTTP ${response.status} ${response.statusText}`, (0, http_js_1.toErrorCode)(errorBody?.code, "HTTP_ERROR"), errorBody?.rawText);
61
+ }
62
+ if (!response.body) {
63
+ throw new errors_js_1.KoineError("No response body from Koine gateway", "NO_RESPONSE_BODY");
64
+ }
65
+ // Set up promises for session, usage, and final object
66
+ let resolveSessionId;
67
+ let rejectSessionId;
68
+ const sessionIdPromise = new Promise((resolve, reject) => {
69
+ resolveSessionId = resolve;
70
+ rejectSessionId = reject;
71
+ });
72
+ let resolveUsage;
73
+ let rejectUsage;
74
+ const usagePromise = new Promise((resolve, reject) => {
75
+ resolveUsage = resolve;
76
+ rejectUsage = reject;
77
+ });
78
+ let resolveObject;
79
+ let rejectObject;
80
+ const objectPromise = new Promise((resolve, reject) => {
81
+ resolveObject = resolve;
82
+ rejectObject = reject;
83
+ });
84
+ let sessionIdReceived = false;
85
+ let usageReceived = false;
86
+ let objectReceived = false;
87
+ // Transform SSE events into partial objects
88
+ const partialObjectStream = response.body
89
+ .pipeThrough((0, sse_js_1.createSSEParser)())
90
+ .pipeThrough(new TransformStream({
91
+ transform(sseEvent, controller) {
92
+ const isCriticalEvent = CRITICAL_EVENTS.has(sseEvent.event);
93
+ try {
94
+ switch (sseEvent.event) {
95
+ case "session": {
96
+ const parsed = JSON.parse(sseEvent.data);
97
+ if (!sessionIdReceived) {
98
+ sessionIdReceived = true;
99
+ resolveSessionId(parsed.sessionId);
100
+ }
101
+ break;
102
+ }
103
+ case "partial-object": {
104
+ const parsed = JSON.parse(sseEvent.data);
105
+ // Skip null/non-object partials (can happen during early JSON parsing)
106
+ if (parsed.parsed === null ||
107
+ typeof parsed.parsed !== "object") {
108
+ break;
109
+ }
110
+ // Try to validate partial object with Zod (warn on failure, don't stop)
111
+ const partialResult = options.schema.safeParse(parsed.parsed);
112
+ if (partialResult.success) {
113
+ controller.enqueue(partialResult.data);
114
+ }
115
+ else {
116
+ // Partial objects may not fully validate during streaming - expected.
117
+ // Enqueue raw parsed data for consumers to handle incrementally.
118
+ controller.enqueue(parsed.parsed);
119
+ }
120
+ break;
121
+ }
122
+ case "object": {
123
+ const parsed = JSON.parse(sseEvent.data);
124
+ // Validate final object strictly with Zod
125
+ const finalResult = options.schema.safeParse(parsed.object);
126
+ if (finalResult.success) {
127
+ objectReceived = true;
128
+ resolveObject(finalResult.data);
129
+ }
130
+ else {
131
+ const error = new errors_js_1.KoineError(`Response validation failed: ${finalResult.error.message}`, "VALIDATION_ERROR", JSON.stringify(parsed.object));
132
+ objectReceived = true;
133
+ rejectObject(error);
134
+ }
135
+ break;
136
+ }
137
+ case "result": {
138
+ const parsed = JSON.parse(sseEvent.data);
139
+ usageReceived = true;
140
+ resolveUsage(parsed.usage);
141
+ if (!sessionIdReceived) {
142
+ sessionIdReceived = true;
143
+ resolveSessionId(parsed.sessionId);
144
+ }
145
+ break;
146
+ }
147
+ case "error": {
148
+ const parsed = JSON.parse(sseEvent.data);
149
+ const error = new errors_js_1.KoineError(parsed.error, (0, http_js_1.toErrorCode)(parsed.code, "STREAM_ERROR"));
150
+ usageReceived = true;
151
+ rejectUsage(error);
152
+ if (!objectReceived) {
153
+ objectReceived = true;
154
+ rejectObject(error);
155
+ }
156
+ if (!sessionIdReceived) {
157
+ rejectSessionId(error);
158
+ }
159
+ controller.error(error);
160
+ break;
161
+ }
162
+ case "done": {
163
+ break;
164
+ }
165
+ }
166
+ }
167
+ catch (parseError) {
168
+ const parseErrorMessage = parseError instanceof Error
169
+ ? parseError.message
170
+ : String(parseError);
171
+ if (isCriticalEvent) {
172
+ const error = new errors_js_1.KoineError(`Failed to parse critical SSE event '${sseEvent.event}': ${parseErrorMessage}`, "SSE_PARSE_ERROR", sseEvent.data);
173
+ if (!usageReceived) {
174
+ usageReceived = true;
175
+ rejectUsage(error);
176
+ }
177
+ if (!objectReceived) {
178
+ objectReceived = true;
179
+ rejectObject(error);
180
+ }
181
+ if (!sessionIdReceived) {
182
+ rejectSessionId(error);
183
+ }
184
+ controller.error(error);
185
+ }
186
+ else {
187
+ // Non-critical event (partial-object) - log warning but continue
188
+ console.warn(`[Koine SDK] Failed to parse SSE partial-object event: ${parseErrorMessage}. Raw data: ${sseEvent.data?.substring(0, 100)}`);
189
+ }
190
+ }
191
+ },
192
+ flush() {
193
+ // Handle promises that were never resolved/rejected
194
+ if (!sessionIdReceived) {
195
+ rejectSessionId(new errors_js_1.KoineError("Stream ended without session ID", "NO_SESSION"));
196
+ }
197
+ if (!usageReceived) {
198
+ rejectUsage(new errors_js_1.KoineError("Stream ended without usage information", "NO_USAGE"));
199
+ }
200
+ if (!objectReceived) {
201
+ rejectObject(new errors_js_1.KoineError("Stream ended without final object", "NO_OBJECT"));
202
+ }
203
+ },
204
+ }));
205
+ // Augment the stream with Symbol.asyncIterator for ergonomic for-await-of usage
206
+ const iterablePartialObjectStream = Object.assign(partialObjectStream, {
207
+ async *[Symbol.asyncIterator]() {
208
+ const reader = partialObjectStream.getReader();
209
+ try {
210
+ while (true) {
211
+ const { done, value } = await reader.read();
212
+ if (done)
213
+ return;
214
+ yield value;
215
+ }
216
+ }
217
+ finally {
218
+ reader.releaseLock();
219
+ }
220
+ },
221
+ });
222
+ return {
223
+ partialObjectStream: iterablePartialObjectStream,
224
+ object: objectPromise,
225
+ sessionId: sessionIdPromise,
226
+ usage: usagePromise,
227
+ };
228
+ }
229
+ //# sourceMappingURL=stream-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-object.js","sourceRoot":"","sources":["../src/stream-object.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -71,4 +71,27 @@ export interface SSEErrorEvent {
71
71
  readonly error: string;
72
72
  readonly code?: string;
73
73
  }
74
+ /**
75
+ * SSE event types from Koine gateway /stream-object endpoint (internal).
76
+ */
77
+ export interface SSEPartialObjectEvent {
78
+ readonly partial: string;
79
+ readonly parsed: unknown;
80
+ }
81
+ export interface SSEObjectEvent {
82
+ readonly object: unknown;
83
+ }
84
+ /**
85
+ * Result from streaming object generation.
86
+ */
87
+ export interface KoineStreamObjectResult<T> {
88
+ /** Stream of partial objects as they arrive. Supports both ReadableStream methods and async iteration. */
89
+ readonly partialObjectStream: ReadableStream<T> & AsyncIterable<T>;
90
+ /** Final validated object (resolves when stream completes via object event, rejects with KoineError if validation fails) */
91
+ readonly object: Promise<T>;
92
+ /** Session ID for conversation continuity (resolves early in stream, after session event) */
93
+ readonly sessionId: Promise<string>;
94
+ /** Usage stats (resolves when stream completes via result event) */
95
+ readonly usage: Promise<KoineUsage>;
96
+ }
74
97
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,sGAAsG;IACtG,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpE,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,sGAAsG;IACtG,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpE,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACzC,0GAA0G;IAC1G,QAAQ,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACnE,4HAA4H;IAC5H,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CACpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternzones/koine-sdk",
3
- "version": "2.0.4",
3
+ "version": "2.2.0",
4
4
  "description": "TypeScript SDK for Koine gateway",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,6 +26,7 @@
26
26
  "lint": "biome check .",
27
27
  "example:hello": "bun --env-file=../../../.env run examples/hello.ts",
28
28
  "example:stream": "bun --env-file=../../../.env run examples/stream.ts",
29
+ "example:stream-object": "bun --env-file=../../../.env run examples/stream-object.ts",
29
30
  "example:recipe": "bun --env-file=../../../.env run examples/extract-recipe.ts",
30
31
  "example:conversation": "bun --env-file=../../../.env run examples/conversation.ts"
31
32
  },