@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 +21 -0
- package/dist/client.d.ts +13 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -1
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/stream-object.d.ts +39 -0
- package/dist/stream-object.d.ts.map +1 -0
- package/dist/stream-object.js +229 -0
- package/dist/stream-object.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
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.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;
|
|
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
|
*
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,YAAY,
|
|
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;;;
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
},
|