modelfusion 0.47.1 → 0.47.3
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 +38 -37
- package/core/api/loadApiKey.cjs +7 -1
- package/core/api/loadApiKey.js +7 -1
- package/core/structure/Schema.d.ts +5 -5
- package/core/structure/UncheckedSchema.cjs +2 -2
- package/core/structure/UncheckedSchema.d.ts +2 -2
- package/core/structure/UncheckedSchema.js +2 -2
- package/core/structure/ZodSchema.cjs +2 -5
- package/core/structure/ZodSchema.d.ts +2 -2
- package/core/structure/ZodSchema.js +2 -5
- package/event-source/readEventSource.cjs +5 -8
- package/event-source/readEventSource.d.ts +1 -1
- package/event-source/readEventSource.js +5 -5
- package/event-source/readEventSourceStream.cjs +3 -6
- package/event-source/readEventSourceStream.js +3 -3
- package/guard/fixStructure.cjs +50 -0
- package/guard/fixStructure.d.ts +50 -0
- package/guard/fixStructure.js +50 -0
- package/guard/guard.d.ts +1 -1
- package/model-function/generate-structure/generateStructure.cjs +1 -1
- package/model-function/generate-structure/generateStructure.js +1 -1
- package/model-function/generate-structure/generateStructureOrText.cjs +1 -1
- package/model-function/generate-structure/generateStructureOrText.js +1 -1
- package/model-function/generate-structure/streamStructure.cjs +1 -1
- package/model-function/generate-structure/streamStructure.js +1 -1
- package/model-provider/anthropic/AnthropicError.cjs +7 -14
- package/model-provider/anthropic/AnthropicError.js +7 -11
- package/model-provider/anthropic/AnthropicTextGenerationModel.cjs +2 -15
- package/model-provider/anthropic/AnthropicTextGenerationModel.js +2 -12
- package/model-provider/automatic1111/Automatic1111Error.cjs +2 -5
- package/model-provider/automatic1111/Automatic1111Error.d.ts +1 -1
- package/model-provider/automatic1111/Automatic1111Error.js +2 -2
- package/model-provider/cohere/CohereError.cjs +2 -5
- package/model-provider/cohere/CohereError.js +2 -2
- package/model-provider/cohere/CohereTextEmbeddingModel.cjs +8 -11
- package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +1 -1
- package/model-provider/cohere/CohereTextEmbeddingModel.js +1 -1
- package/model-provider/cohere/CohereTextGenerationModel.cjs +22 -21
- package/model-provider/cohere/CohereTextGenerationModel.js +22 -18
- package/model-provider/cohere/CohereTokenizer.cjs +12 -15
- package/model-provider/cohere/CohereTokenizer.d.ts +1 -1
- package/model-provider/cohere/CohereTokenizer.js +1 -1
- package/model-provider/huggingface/HuggingFaceError.cjs +7 -31
- package/model-provider/huggingface/HuggingFaceError.js +7 -28
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.cjs +3 -6
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.d.ts +1 -1
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.js +1 -1
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +2 -5
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +1 -1
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +1 -1
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +3 -6
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +1 -1
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +1 -1
- package/model-provider/llamacpp/LlamaCppError.cjs +7 -30
- package/model-provider/llamacpp/LlamaCppError.js +7 -27
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +3 -6
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +1 -1
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +1 -1
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +53 -66
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +1 -1
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +3 -13
- package/model-provider/llamacpp/LlamaCppTokenizer.cjs +3 -6
- package/model-provider/llamacpp/LlamaCppTokenizer.d.ts +1 -1
- package/model-provider/llamacpp/LlamaCppTokenizer.js +1 -1
- package/model-provider/openai/OpenAIError.cjs +2 -5
- package/model-provider/openai/OpenAIError.js +2 -2
- package/model-provider/openai/OpenAITextEmbeddingModel.cjs +11 -14
- package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +1 -1
- package/model-provider/openai/OpenAITextEmbeddingModel.js +1 -1
- package/model-provider/openai/OpenAITextGenerationModel.cjs +26 -39
- package/model-provider/openai/OpenAITextGenerationModel.d.ts +1 -1
- package/model-provider/openai/OpenAITextGenerationModel.js +3 -13
- package/model-provider/openai/OpenAITranscriptionModel.cjs +20 -23
- package/model-provider/openai/OpenAITranscriptionModel.d.ts +1 -1
- package/model-provider/openai/OpenAITranscriptionModel.js +1 -1
- package/model-provider/openai/TikTokenTokenizer.cjs +12 -8
- package/model-provider/openai/TikTokenTokenizer.d.ts +0 -3
- package/model-provider/openai/TikTokenTokenizer.js +9 -8
- package/model-provider/openai/chat/OpenAIChatModel.cjs +21 -21
- package/model-provider/openai/chat/OpenAIChatModel.d.ts +1 -1
- package/model-provider/openai/chat/OpenAIChatModel.js +2 -2
- package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +2 -6
- package/model-provider/openai/chat/OpenAIChatStreamIterable.js +2 -3
- package/model-provider/stability/StabilityError.cjs +2 -5
- package/model-provider/stability/StabilityError.js +2 -2
- package/package.json +1 -1
- package/util/JSONParseError.cjs +33 -0
- package/util/JSONParseError.d.ts +9 -0
- package/util/JSONParseError.js +29 -0
- package/util/index.cjs +2 -0
- package/util/index.d.ts +2 -0
- package/util/index.js +2 -0
- package/util/parseJSON.cjs +67 -0
- package/util/parseJSON.d.ts +18 -0
- package/util/parseJSON.js +58 -0
- package/vector-index/memory/MemoryVectorIndex.cjs +7 -10
- package/vector-index/memory/MemoryVectorIndex.js +3 -3
@@ -1,10 +1,7 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
3
|
exports.OpenAITranscriptionResponseFormat = exports.OpenAITranscriptionModel = exports.calculateOpenAITranscriptionCostInMillicents = exports.OPENAI_TRANSCRIPTION_MODELS = void 0;
|
7
|
-
const zod_1 =
|
4
|
+
const zod_1 = require("zod");
|
8
5
|
const callWithRetryAndThrottle_js_1 = require("../../core/api/callWithRetryAndThrottle.cjs");
|
9
6
|
const postToApi_js_1 = require("../../core/api/postToApi.cjs");
|
10
7
|
const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
|
@@ -125,27 +122,27 @@ async function callOpenAITranscriptionAPI({ api = new OpenAIApiConfiguration_js_
|
|
125
122
|
abortSignal,
|
126
123
|
});
|
127
124
|
}
|
128
|
-
const openAITranscriptionJsonSchema = zod_1.
|
129
|
-
text: zod_1.
|
125
|
+
const openAITranscriptionJsonSchema = zod_1.z.object({
|
126
|
+
text: zod_1.z.string(),
|
130
127
|
});
|
131
|
-
const openAITranscriptionVerboseJsonSchema = zod_1.
|
132
|
-
task: zod_1.
|
133
|
-
language: zod_1.
|
134
|
-
duration: zod_1.
|
135
|
-
segments: zod_1.
|
136
|
-
id: zod_1.
|
137
|
-
seek: zod_1.
|
138
|
-
start: zod_1.
|
139
|
-
end: zod_1.
|
140
|
-
text: zod_1.
|
141
|
-
tokens: zod_1.
|
142
|
-
temperature: zod_1.
|
143
|
-
avg_logprob: zod_1.
|
144
|
-
compression_ratio: zod_1.
|
145
|
-
no_speech_prob: zod_1.
|
146
|
-
transient: zod_1.
|
128
|
+
const openAITranscriptionVerboseJsonSchema = zod_1.z.object({
|
129
|
+
task: zod_1.z.literal("transcribe"),
|
130
|
+
language: zod_1.z.string(),
|
131
|
+
duration: zod_1.z.number(),
|
132
|
+
segments: zod_1.z.array(zod_1.z.object({
|
133
|
+
id: zod_1.z.number(),
|
134
|
+
seek: zod_1.z.number(),
|
135
|
+
start: zod_1.z.number(),
|
136
|
+
end: zod_1.z.number(),
|
137
|
+
text: zod_1.z.string(),
|
138
|
+
tokens: zod_1.z.array(zod_1.z.number()),
|
139
|
+
temperature: zod_1.z.number(),
|
140
|
+
avg_logprob: zod_1.z.number(),
|
141
|
+
compression_ratio: zod_1.z.number(),
|
142
|
+
no_speech_prob: zod_1.z.number(),
|
143
|
+
transient: zod_1.z.boolean().optional(),
|
147
144
|
})),
|
148
|
-
text: zod_1.
|
145
|
+
text: zod_1.z.string(),
|
149
146
|
});
|
150
147
|
exports.OpenAITranscriptionResponseFormat = {
|
151
148
|
json: {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/// <reference types="node" />
|
2
|
-
import z from "zod";
|
2
|
+
import { z } from "zod";
|
3
3
|
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
4
4
|
import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
|
5
5
|
import { ResponseHandler } from "../../core/api/postToApi.js";
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import z from "zod";
|
1
|
+
import { z } from "zod";
|
2
2
|
import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
|
3
3
|
import { createJsonResponseHandler, createTextResponseHandler, postToApi, } from "../../core/api/postToApi.js";
|
4
4
|
import { AbstractModel } from "../../model-function/AbstractModel.js";
|
@@ -1,7 +1,13 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
6
|
exports.TikTokenTokenizer = void 0;
|
4
|
-
const
|
7
|
+
const lite_1 = require("js-tiktoken/lite");
|
8
|
+
const cl100k_base_1 = __importDefault(require("js-tiktoken/ranks/cl100k_base"));
|
9
|
+
const p50k_base_1 = __importDefault(require("js-tiktoken/ranks/p50k_base"));
|
10
|
+
const r50k_base_1 = __importDefault(require("js-tiktoken/ranks/r50k_base"));
|
5
11
|
const never_js_1 = require("../../util/never.cjs");
|
6
12
|
/**
|
7
13
|
* TikToken tokenizer for OpenAI language models.
|
@@ -29,9 +35,7 @@ class TikTokenTokenizer {
|
|
29
35
|
writable: true,
|
30
36
|
value: void 0
|
31
37
|
});
|
32
|
-
this.tiktoken =
|
33
|
-
? getEncodingNameForModel(options.model)
|
34
|
-
: options.encoding);
|
38
|
+
this.tiktoken = new lite_1.Tiktoken(getTiktokenBPE(options.model));
|
35
39
|
}
|
36
40
|
async tokenize(text) {
|
37
41
|
return this.tiktoken.encode(text);
|
@@ -50,12 +54,12 @@ class TikTokenTokenizer {
|
|
50
54
|
exports.TikTokenTokenizer = TikTokenTokenizer;
|
51
55
|
// implemented here (instead of using js-tiktoken) to be able to quickly updated it
|
52
56
|
// when new models are released
|
53
|
-
function
|
57
|
+
function getTiktokenBPE(model) {
|
54
58
|
switch (model) {
|
55
59
|
case "code-davinci-002":
|
56
60
|
case "text-davinci-002":
|
57
61
|
case "text-davinci-003": {
|
58
|
-
return
|
62
|
+
return p50k_base_1.default;
|
59
63
|
}
|
60
64
|
case "ada":
|
61
65
|
case "babbage":
|
@@ -64,7 +68,7 @@ function getEncodingNameForModel(model) {
|
|
64
68
|
case "text-ada-001":
|
65
69
|
case "text-babbage-001":
|
66
70
|
case "text-curie-001": {
|
67
|
-
return
|
71
|
+
return r50k_base_1.default;
|
68
72
|
}
|
69
73
|
case "babbage-002":
|
70
74
|
case "davinci-002":
|
@@ -81,7 +85,7 @@ function getEncodingNameForModel(model) {
|
|
81
85
|
case "gpt-4-32k-0314":
|
82
86
|
case "gpt-4-32k-0613":
|
83
87
|
case "text-embedding-ada-002": {
|
84
|
-
return
|
88
|
+
return cl100k_base_1.default;
|
85
89
|
}
|
86
90
|
default: {
|
87
91
|
(0, never_js_1.never)(model);
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { TiktokenEncoding } from "js-tiktoken";
|
2
1
|
import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
|
3
2
|
import { OpenAITextEmbeddingModelType } from "./OpenAITextEmbeddingModel.js";
|
4
3
|
import { OpenAITextGenerationBaseModelType } from "./OpenAITextGenerationModel.js";
|
@@ -24,8 +23,6 @@ export declare class TikTokenTokenizer implements FullTokenizer {
|
|
24
23
|
*/
|
25
24
|
constructor(options: {
|
26
25
|
model: OpenAIChatBaseModelType | OpenAITextGenerationBaseModelType | OpenAITextEmbeddingModelType;
|
27
|
-
} | {
|
28
|
-
encoding: TiktokenEncoding;
|
29
26
|
});
|
30
27
|
private readonly tiktoken;
|
31
28
|
tokenize(text: string): Promise<number[]>;
|
@@ -1,4 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import { Tiktoken } from "js-tiktoken/lite";
|
2
|
+
import cl100k_base from "js-tiktoken/ranks/cl100k_base";
|
3
|
+
import p50k_base from "js-tiktoken/ranks/p50k_base";
|
4
|
+
import r50k_base from "js-tiktoken/ranks/r50k_base";
|
2
5
|
import { never } from "../../util/never.js";
|
3
6
|
/**
|
4
7
|
* TikToken tokenizer for OpenAI language models.
|
@@ -26,9 +29,7 @@ export class TikTokenTokenizer {
|
|
26
29
|
writable: true,
|
27
30
|
value: void 0
|
28
31
|
});
|
29
|
-
this.tiktoken =
|
30
|
-
? getEncodingNameForModel(options.model)
|
31
|
-
: options.encoding);
|
32
|
+
this.tiktoken = new Tiktoken(getTiktokenBPE(options.model));
|
32
33
|
}
|
33
34
|
async tokenize(text) {
|
34
35
|
return this.tiktoken.encode(text);
|
@@ -46,12 +47,12 @@ export class TikTokenTokenizer {
|
|
46
47
|
}
|
47
48
|
// implemented here (instead of using js-tiktoken) to be able to quickly updated it
|
48
49
|
// when new models are released
|
49
|
-
function
|
50
|
+
function getTiktokenBPE(model) {
|
50
51
|
switch (model) {
|
51
52
|
case "code-davinci-002":
|
52
53
|
case "text-davinci-002":
|
53
54
|
case "text-davinci-003": {
|
54
|
-
return
|
55
|
+
return p50k_base;
|
55
56
|
}
|
56
57
|
case "ada":
|
57
58
|
case "babbage":
|
@@ -60,7 +61,7 @@ function getEncodingNameForModel(model) {
|
|
60
61
|
case "text-ada-001":
|
61
62
|
case "text-babbage-001":
|
62
63
|
case "text-curie-001": {
|
63
|
-
return
|
64
|
+
return r50k_base;
|
64
65
|
}
|
65
66
|
case "babbage-002":
|
66
67
|
case "davinci-002":
|
@@ -77,7 +78,7 @@ function getEncodingNameForModel(model) {
|
|
77
78
|
case "gpt-4-32k-0314":
|
78
79
|
case "gpt-4-32k-0613":
|
79
80
|
case "text-embedding-ada-002": {
|
80
|
-
return
|
81
|
+
return cl100k_base;
|
81
82
|
}
|
82
83
|
default: {
|
83
84
|
never(model);
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.OpenAIChatResponseFormat = exports.OpenAIChatModel = exports.calculateOpenAIChatCostInMillicents = exports.isOpenAIChatModel = exports.getOpenAIChatModelInformation = exports.OPENAI_CHAT_MODELS = void 0;
|
7
7
|
const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
|
8
|
-
const zod_1 =
|
8
|
+
const zod_1 = require("zod");
|
9
9
|
const callWithRetryAndThrottle_js_1 = require("../../../core/api/callWithRetryAndThrottle.cjs");
|
10
10
|
const postToApi_js_1 = require("../../../core/api/postToApi.cjs");
|
11
11
|
const AbstractModel_js_1 = require("../../../model-function/AbstractModel.cjs");
|
@@ -270,7 +270,7 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
|
|
270
270
|
catch (error) {
|
271
271
|
throw new StructureParseError_js_1.StructureParseError({
|
272
272
|
structureName: structureDefinition.name,
|
273
|
-
valueText
|
273
|
+
valueText,
|
274
274
|
cause: error,
|
275
275
|
});
|
276
276
|
}
|
@@ -370,30 +370,30 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
|
|
370
370
|
}
|
371
371
|
}
|
372
372
|
exports.OpenAIChatModel = OpenAIChatModel;
|
373
|
-
const openAIChatResponseSchema = zod_1.
|
374
|
-
id: zod_1.
|
375
|
-
object: zod_1.
|
376
|
-
created: zod_1.
|
377
|
-
model: zod_1.
|
378
|
-
choices: zod_1.
|
379
|
-
message: zod_1.
|
380
|
-
role: zod_1.
|
381
|
-
content: zod_1.
|
382
|
-
function_call: zod_1.
|
373
|
+
const openAIChatResponseSchema = zod_1.z.object({
|
374
|
+
id: zod_1.z.string(),
|
375
|
+
object: zod_1.z.literal("chat.completion"),
|
376
|
+
created: zod_1.z.number(),
|
377
|
+
model: zod_1.z.string(),
|
378
|
+
choices: zod_1.z.array(zod_1.z.object({
|
379
|
+
message: zod_1.z.object({
|
380
|
+
role: zod_1.z.literal("assistant"),
|
381
|
+
content: zod_1.z.string().nullable(),
|
382
|
+
function_call: zod_1.z
|
383
383
|
.object({
|
384
|
-
name: zod_1.
|
385
|
-
arguments: zod_1.
|
384
|
+
name: zod_1.z.string(),
|
385
|
+
arguments: zod_1.z.string(),
|
386
386
|
})
|
387
387
|
.optional(),
|
388
388
|
}),
|
389
|
-
index: zod_1.
|
390
|
-
logprobs: zod_1.
|
391
|
-
finish_reason: zod_1.
|
389
|
+
index: zod_1.z.number(),
|
390
|
+
logprobs: zod_1.z.nullable(zod_1.z.any()),
|
391
|
+
finish_reason: zod_1.z.string(),
|
392
392
|
})),
|
393
|
-
usage: zod_1.
|
394
|
-
prompt_tokens: zod_1.
|
395
|
-
completion_tokens: zod_1.
|
396
|
-
total_tokens: zod_1.
|
393
|
+
usage: zod_1.z.object({
|
394
|
+
prompt_tokens: zod_1.z.number(),
|
395
|
+
completion_tokens: zod_1.z.number(),
|
396
|
+
total_tokens: zod_1.z.number(),
|
397
397
|
}),
|
398
398
|
});
|
399
399
|
async function callOpenAIChatCompletionAPI({ api = new OpenAIApiConfiguration_js_1.OpenAIApiConfiguration(), abortSignal, responseFormat, model, messages, functions, functionCall, temperature, topP, n, stop, maxTokens, presencePenalty, frequencyPenalty, logitBias, user, }) {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import SecureJSON from "secure-json-parse";
|
2
|
-
import z from "zod";
|
2
|
+
import { z } from "zod";
|
3
3
|
import { callWithRetryAndThrottle } from "../../../core/api/callWithRetryAndThrottle.js";
|
4
4
|
import { createJsonResponseHandler, postJsonToApi, } from "../../../core/api/postToApi.js";
|
5
5
|
import { AbstractModel } from "../../../model-function/AbstractModel.js";
|
@@ -261,7 +261,7 @@ export class OpenAIChatModel extends AbstractModel {
|
|
261
261
|
catch (error) {
|
262
262
|
throw new StructureParseError({
|
263
263
|
structureName: structureDefinition.name,
|
264
|
-
valueText
|
264
|
+
valueText,
|
265
265
|
cause: error,
|
266
266
|
});
|
267
267
|
}
|
@@ -1,13 +1,10 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
3
|
exports.createOpenAIChatDeltaIterableQueue = void 0;
|
7
|
-
const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
|
8
4
|
const zod_1 = require("zod");
|
9
5
|
const AsyncQueue_js_1 = require("../../../event-source/AsyncQueue.cjs");
|
10
6
|
const parseEventSourceStream_js_1 = require("../../../event-source/parseEventSourceStream.cjs");
|
7
|
+
const parseJSON_js_1 = require("../../../util/parseJSON.cjs");
|
11
8
|
const chatResponseStreamEventSchema = zod_1.z.object({
|
12
9
|
choices: zod_1.z.array(zod_1.z.object({
|
13
10
|
delta: zod_1.z.object({
|
@@ -41,8 +38,7 @@ async function createOpenAIChatDeltaIterableQueue(stream, extractDeltaValue) {
|
|
41
38
|
queue.close();
|
42
39
|
return;
|
43
40
|
}
|
44
|
-
const
|
45
|
-
const parseResult = chatResponseStreamEventSchema.safeParse(json);
|
41
|
+
const parseResult = (0, parseJSON_js_1.safeParseJsonWithZod)(data, chatResponseStreamEventSchema);
|
46
42
|
if (!parseResult.success) {
|
47
43
|
queue.push({
|
48
44
|
type: "error",
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import SecureJSON from "secure-json-parse";
|
2
1
|
import { z } from "zod";
|
3
2
|
import { AsyncQueue } from "../../../event-source/AsyncQueue.js";
|
4
3
|
import { parseEventSourceStream } from "../../../event-source/parseEventSourceStream.js";
|
4
|
+
import { safeParseJsonWithZod } from "../../../util/parseJSON.js";
|
5
5
|
const chatResponseStreamEventSchema = z.object({
|
6
6
|
choices: z.array(z.object({
|
7
7
|
delta: z.object({
|
@@ -35,8 +35,7 @@ export async function createOpenAIChatDeltaIterableQueue(stream, extractDeltaVal
|
|
35
35
|
queue.close();
|
36
36
|
return;
|
37
37
|
}
|
38
|
-
const
|
39
|
-
const parseResult = chatResponseStreamEventSchema.safeParse(json);
|
38
|
+
const parseResult = safeParseJsonWithZod(data, chatResponseStreamEventSchema);
|
40
39
|
if (!parseResult.success) {
|
41
40
|
queue.push({
|
42
41
|
type: "error",
|
@@ -1,12 +1,9 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
-
};
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
3
|
exports.failedStabilityCallResponseHandler = exports.StabilityError = exports.stabilityErrorDataSchema = void 0;
|
7
|
-
const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
|
8
4
|
const zod_1 = require("zod");
|
9
5
|
const ApiCallError_js_1 = require("../../core/api/ApiCallError.cjs");
|
6
|
+
const parseJSON_js_1 = require("../../util/parseJSON.cjs");
|
10
7
|
exports.stabilityErrorDataSchema = zod_1.z.object({
|
11
8
|
message: zod_1.z.string(),
|
12
9
|
});
|
@@ -25,7 +22,7 @@ class StabilityError extends ApiCallError_js_1.ApiCallError {
|
|
25
22
|
exports.StabilityError = StabilityError;
|
26
23
|
const failedStabilityCallResponseHandler = async ({ response, url, requestBodyValues }) => {
|
27
24
|
const responseBody = await response.text();
|
28
|
-
const parsedError =
|
25
|
+
const parsedError = (0, parseJSON_js_1.parseJsonWithZod)(responseBody, exports.stabilityErrorDataSchema);
|
29
26
|
return new StabilityError({
|
30
27
|
url,
|
31
28
|
requestBodyValues,
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import SecureJSON from "secure-json-parse";
|
2
1
|
import { z } from "zod";
|
3
2
|
import { ApiCallError } from "../../core/api/ApiCallError.js";
|
3
|
+
import { parseJsonWithZod } from "../../util/parseJSON.js";
|
4
4
|
export const stabilityErrorDataSchema = z.object({
|
5
5
|
message: z.string(),
|
6
6
|
});
|
@@ -18,7 +18,7 @@ export class StabilityError extends ApiCallError {
|
|
18
18
|
}
|
19
19
|
export const failedStabilityCallResponseHandler = async ({ response, url, requestBodyValues }) => {
|
20
20
|
const responseBody = await response.text();
|
21
|
-
const parsedError =
|
21
|
+
const parsedError = parseJsonWithZod(responseBody, stabilityErrorDataSchema);
|
22
22
|
return new StabilityError({
|
23
23
|
url,
|
24
24
|
requestBodyValues,
|
package/package.json
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.JSONParseError = void 0;
|
4
|
+
const getErrorMessage_js_1 = require("./getErrorMessage.cjs");
|
5
|
+
class JSONParseError extends Error {
|
6
|
+
constructor({ valueText, cause }) {
|
7
|
+
super(`JSON parsing failed: ` +
|
8
|
+
`Value: ${valueText}.\n` +
|
9
|
+
`Error message: ${(0, getErrorMessage_js_1.getErrorMessage)(cause)}`);
|
10
|
+
Object.defineProperty(this, "structureName", {
|
11
|
+
enumerable: true,
|
12
|
+
configurable: true,
|
13
|
+
writable: true,
|
14
|
+
value: void 0
|
15
|
+
});
|
16
|
+
Object.defineProperty(this, "cause", {
|
17
|
+
enumerable: true,
|
18
|
+
configurable: true,
|
19
|
+
writable: true,
|
20
|
+
value: void 0
|
21
|
+
});
|
22
|
+
Object.defineProperty(this, "valueText", {
|
23
|
+
enumerable: true,
|
24
|
+
configurable: true,
|
25
|
+
writable: true,
|
26
|
+
value: void 0
|
27
|
+
});
|
28
|
+
this.name = "JSONParseError";
|
29
|
+
this.cause = cause;
|
30
|
+
this.valueText = valueText;
|
31
|
+
}
|
32
|
+
}
|
33
|
+
exports.JSONParseError = JSONParseError;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { getErrorMessage } from "./getErrorMessage.js";
|
2
|
+
export class JSONParseError extends Error {
|
3
|
+
constructor({ valueText, cause }) {
|
4
|
+
super(`JSON parsing failed: ` +
|
5
|
+
`Value: ${valueText}.\n` +
|
6
|
+
`Error message: ${getErrorMessage(cause)}`);
|
7
|
+
Object.defineProperty(this, "structureName", {
|
8
|
+
enumerable: true,
|
9
|
+
configurable: true,
|
10
|
+
writable: true,
|
11
|
+
value: void 0
|
12
|
+
});
|
13
|
+
Object.defineProperty(this, "cause", {
|
14
|
+
enumerable: true,
|
15
|
+
configurable: true,
|
16
|
+
writable: true,
|
17
|
+
value: void 0
|
18
|
+
});
|
19
|
+
Object.defineProperty(this, "valueText", {
|
20
|
+
enumerable: true,
|
21
|
+
configurable: true,
|
22
|
+
writable: true,
|
23
|
+
value: void 0
|
24
|
+
});
|
25
|
+
this.name = "JSONParseError";
|
26
|
+
this.cause = cause;
|
27
|
+
this.valueText = valueText;
|
28
|
+
}
|
29
|
+
}
|
package/util/index.cjs
CHANGED
@@ -14,5 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./JSONParseError.cjs"), exports);
|
17
18
|
__exportStar(require("./cosineSimilarity.cjs"), exports);
|
18
19
|
__exportStar(require("./getAudioFileExtension.cjs"), exports);
|
20
|
+
__exportStar(require("./parseJSON.cjs"), exports);
|
package/util/index.d.ts
CHANGED
package/util/index.js
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.safeParseJsonWithSchema = exports.safeParseJsonWithZod = exports.parseJsonWithZod = void 0;
|
7
|
+
const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
|
8
|
+
const JSONParseError_js_1 = require("./JSONParseError.cjs");
|
9
|
+
function parseJsonWithZod(json, schema) {
|
10
|
+
try {
|
11
|
+
const parsedJson = secure_json_parse_1.default.parse(json);
|
12
|
+
return schema.parse(parsedJson);
|
13
|
+
}
|
14
|
+
catch (error) {
|
15
|
+
throw new JSONParseError_js_1.JSONParseError({
|
16
|
+
valueText: json,
|
17
|
+
cause: error,
|
18
|
+
});
|
19
|
+
}
|
20
|
+
}
|
21
|
+
exports.parseJsonWithZod = parseJsonWithZod;
|
22
|
+
function safeParseJsonWithZod(json, schema) {
|
23
|
+
try {
|
24
|
+
const parsedJson = secure_json_parse_1.default.parse(json);
|
25
|
+
const validationResult = schema.safeParse(parsedJson);
|
26
|
+
if (validationResult.success) {
|
27
|
+
return validationResult;
|
28
|
+
}
|
29
|
+
return {
|
30
|
+
success: false,
|
31
|
+
error: new JSONParseError_js_1.JSONParseError({
|
32
|
+
valueText: json,
|
33
|
+
cause: validationResult.error,
|
34
|
+
}),
|
35
|
+
};
|
36
|
+
}
|
37
|
+
catch (error) {
|
38
|
+
throw new JSONParseError_js_1.JSONParseError({
|
39
|
+
valueText: json,
|
40
|
+
cause: error,
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
44
|
+
exports.safeParseJsonWithZod = safeParseJsonWithZod;
|
45
|
+
function safeParseJsonWithSchema(json, schema) {
|
46
|
+
try {
|
47
|
+
const parsedJson = secure_json_parse_1.default.parse(json);
|
48
|
+
const validationResult = schema.validate(parsedJson);
|
49
|
+
if (validationResult.success) {
|
50
|
+
return validationResult;
|
51
|
+
}
|
52
|
+
return {
|
53
|
+
success: false,
|
54
|
+
error: new JSONParseError_js_1.JSONParseError({
|
55
|
+
valueText: json,
|
56
|
+
cause: validationResult.error,
|
57
|
+
}),
|
58
|
+
};
|
59
|
+
}
|
60
|
+
catch (error) {
|
61
|
+
throw new JSONParseError_js_1.JSONParseError({
|
62
|
+
valueText: json,
|
63
|
+
cause: error,
|
64
|
+
});
|
65
|
+
}
|
66
|
+
}
|
67
|
+
exports.safeParseJsonWithSchema = safeParseJsonWithSchema;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { z } from "zod";
|
2
|
+
import { Schema } from "../core/structure/Schema.js";
|
3
|
+
import { JSONParseError } from "./JSONParseError.js";
|
4
|
+
export declare function parseJsonWithZod<T>(json: string, schema: z.Schema<T>): T;
|
5
|
+
export declare function safeParseJsonWithZod<T>(json: string, schema: z.Schema<T>): {
|
6
|
+
success: true;
|
7
|
+
data: T;
|
8
|
+
} | {
|
9
|
+
success: false;
|
10
|
+
error: JSONParseError;
|
11
|
+
};
|
12
|
+
export declare function safeParseJsonWithSchema<T>(json: string, schema: Schema<T>): {
|
13
|
+
success: true;
|
14
|
+
data: T;
|
15
|
+
} | {
|
16
|
+
success: false;
|
17
|
+
error: JSONParseError;
|
18
|
+
};
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import SecureJSON from "secure-json-parse";
|
2
|
+
import { JSONParseError } from "./JSONParseError.js";
|
3
|
+
export function parseJsonWithZod(json, schema) {
|
4
|
+
try {
|
5
|
+
const parsedJson = SecureJSON.parse(json);
|
6
|
+
return schema.parse(parsedJson);
|
7
|
+
}
|
8
|
+
catch (error) {
|
9
|
+
throw new JSONParseError({
|
10
|
+
valueText: json,
|
11
|
+
cause: error,
|
12
|
+
});
|
13
|
+
}
|
14
|
+
}
|
15
|
+
export function safeParseJsonWithZod(json, schema) {
|
16
|
+
try {
|
17
|
+
const parsedJson = SecureJSON.parse(json);
|
18
|
+
const validationResult = schema.safeParse(parsedJson);
|
19
|
+
if (validationResult.success) {
|
20
|
+
return validationResult;
|
21
|
+
}
|
22
|
+
return {
|
23
|
+
success: false,
|
24
|
+
error: new JSONParseError({
|
25
|
+
valueText: json,
|
26
|
+
cause: validationResult.error,
|
27
|
+
}),
|
28
|
+
};
|
29
|
+
}
|
30
|
+
catch (error) {
|
31
|
+
throw new JSONParseError({
|
32
|
+
valueText: json,
|
33
|
+
cause: error,
|
34
|
+
});
|
35
|
+
}
|
36
|
+
}
|
37
|
+
export function safeParseJsonWithSchema(json, schema) {
|
38
|
+
try {
|
39
|
+
const parsedJson = SecureJSON.parse(json);
|
40
|
+
const validationResult = schema.validate(parsedJson);
|
41
|
+
if (validationResult.success) {
|
42
|
+
return validationResult;
|
43
|
+
}
|
44
|
+
return {
|
45
|
+
success: false,
|
46
|
+
error: new JSONParseError({
|
47
|
+
valueText: json,
|
48
|
+
cause: validationResult.error,
|
49
|
+
}),
|
50
|
+
};
|
51
|
+
}
|
52
|
+
catch (error) {
|
53
|
+
throw new JSONParseError({
|
54
|
+
valueText: json,
|
55
|
+
cause: error,
|
56
|
+
});
|
57
|
+
}
|
58
|
+
}
|