modelfusion 0.92.0 → 0.93.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 +19 -19
- package/core/api/ApiCallError.cjs +9 -1
- package/core/api/ApiCallError.d.ts +4 -1
- package/core/api/ApiCallError.js +9 -1
- package/model-function/{PromptFormat.d.ts → PromptTemplate.d.ts} +2 -2
- package/model-function/generate-image/ImageGenerationModel.d.ts +2 -2
- package/model-function/generate-image/{PromptFormatImageGenerationModel.cjs → PromptTemplateImageGenerationModel.cjs} +11 -11
- package/model-function/generate-image/PromptTemplateImageGenerationModel.d.ts +20 -0
- package/model-function/generate-image/{PromptFormatImageGenerationModel.js → PromptTemplateImageGenerationModel.js} +9 -9
- package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +6 -6
- package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +4 -4
- package/model-function/generate-structure/StructureFromTextGenerationModel.js +6 -6
- package/model-function/generate-structure/{StructureFromTextPromptFormat.d.ts → StructureFromTextPromptTemplate.d.ts} +1 -1
- package/model-function/generate-structure/StructureFromTextStreamingModel.cjs +4 -4
- package/model-function/generate-structure/StructureFromTextStreamingModel.d.ts +2 -2
- package/model-function/generate-structure/StructureFromTextStreamingModel.js +4 -4
- package/model-function/generate-structure/index.cjs +1 -1
- package/model-function/generate-structure/index.d.ts +1 -1
- package/model-function/generate-structure/index.js +1 -1
- package/model-function/generate-structure/jsonStructurePrompt.d.ts +2 -2
- package/model-function/generate-text/{PromptFormatTextGenerationModel.cjs → PromptTemplateTextGenerationModel.cjs} +21 -21
- package/model-function/generate-text/PromptTemplateTextGenerationModel.d.ts +35 -0
- package/model-function/generate-text/{PromptFormatTextGenerationModel.js → PromptTemplateTextGenerationModel.js} +19 -19
- package/model-function/generate-text/PromptTemplateTextStreamingModel.cjs +38 -0
- package/model-function/generate-text/PromptTemplateTextStreamingModel.d.ts +16 -0
- package/model-function/generate-text/PromptTemplateTextStreamingModel.js +34 -0
- package/model-function/generate-text/TextGenerationModel.d.ts +3 -3
- package/model-function/generate-text/TextGenerationPromptTemplate.d.ts +11 -0
- package/model-function/generate-text/index.cjs +4 -4
- package/model-function/generate-text/index.d.ts +4 -4
- package/model-function/generate-text/index.js +4 -4
- package/model-function/generate-text/{prompt-format/AlpacaPromptFormat.cjs → prompt-template/AlpacaPromptTemplate.cjs} +5 -2
- package/model-function/generate-text/{prompt-format/AlpacaPromptFormat.d.ts → prompt-template/AlpacaPromptTemplate.d.ts} +5 -5
- package/model-function/generate-text/{prompt-format/AlpacaPromptFormat.js → prompt-template/AlpacaPromptTemplate.js} +5 -2
- package/model-function/generate-text/prompt-template/AlpacaPromptTemplate.test.cjs +31 -0
- package/model-function/generate-text/prompt-template/AlpacaPromptTemplate.test.js +29 -0
- package/model-function/generate-text/{prompt-format/ChatMLPromptFormat.cjs → prompt-template/ChatMLPromptTemplate.cjs} +5 -5
- package/model-function/generate-text/{prompt-format/ChatMLPromptFormat.d.ts → prompt-template/ChatMLPromptTemplate.d.ts} +7 -7
- package/model-function/generate-text/{prompt-format/ChatMLPromptFormat.js → prompt-template/ChatMLPromptTemplate.js} +5 -5
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.test.cjs +49 -0
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.test.js +47 -0
- package/model-function/generate-text/{prompt-format → prompt-template}/ChatPrompt.d.ts +1 -1
- package/model-function/generate-text/prompt-template/Content.js +1 -0
- package/model-function/generate-text/{prompt-format → prompt-template}/InstructionPrompt.d.ts +7 -0
- package/model-function/generate-text/prompt-template/InstructionPrompt.js +1 -0
- package/model-function/generate-text/{prompt-format/Llama2PromptFormat.cjs → prompt-template/Llama2PromptTemplate.cjs} +8 -7
- package/model-function/generate-text/{prompt-format/Llama2PromptFormat.d.ts → prompt-template/Llama2PromptTemplate.d.ts} +7 -6
- package/model-function/generate-text/{prompt-format/Llama2PromptFormat.js → prompt-template/Llama2PromptTemplate.js} +8 -7
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.test.cjs +49 -0
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.test.d.ts +1 -0
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.test.js +47 -0
- package/model-function/generate-text/{prompt-format/TextPromptFormat.cjs → prompt-template/TextPromptTemplate.cjs} +3 -0
- package/model-function/generate-text/{prompt-format/TextPromptFormat.d.ts → prompt-template/TextPromptTemplate.d.ts} +4 -4
- package/model-function/generate-text/{prompt-format/TextPromptFormat.js → prompt-template/TextPromptTemplate.js} +3 -0
- package/model-function/generate-text/prompt-template/TextPromptTemplate.test.cjs +49 -0
- package/model-function/generate-text/prompt-template/TextPromptTemplate.test.d.ts +1 -0
- package/model-function/generate-text/prompt-template/TextPromptTemplate.test.js +47 -0
- package/model-function/generate-text/{prompt-format/VicunaPromptFormat.d.ts → prompt-template/VicunaPromptTemplate.d.ts} +2 -2
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.test.cjs +21 -0
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.test.d.ts +1 -0
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.test.js +19 -0
- package/model-function/generate-text/{prompt-format → prompt-template}/index.cjs +6 -6
- package/model-function/generate-text/prompt-template/index.d.ts +10 -0
- package/model-function/generate-text/prompt-template/index.js +10 -0
- package/model-function/index.cjs +2 -2
- package/model-function/index.d.ts +2 -2
- package/model-function/index.js +2 -2
- package/model-provider/anthropic/{AnthropicPromptFormat.cjs → AnthropicPromptTemplate.cjs} +15 -8
- package/model-provider/anthropic/AnthropicPromptTemplate.d.ts +17 -0
- package/model-provider/anthropic/{AnthropicPromptFormat.js → AnthropicPromptTemplate.js} +15 -8
- package/model-provider/anthropic/AnthropicPromptTemplate.test.cjs +49 -0
- package/model-provider/anthropic/AnthropicPromptTemplate.test.d.ts +1 -0
- package/model-provider/anthropic/AnthropicPromptTemplate.test.js +47 -0
- package/model-provider/anthropic/AnthropicTextGenerationModel.cjs +12 -12
- package/model-provider/anthropic/AnthropicTextGenerationModel.d.ts +9 -9
- package/model-provider/anthropic/AnthropicTextGenerationModel.js +12 -12
- package/model-provider/anthropic/index.cjs +2 -2
- package/model-provider/anthropic/index.d.ts +1 -1
- package/model-provider/anthropic/index.js +1 -1
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +5 -5
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +4 -4
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +5 -5
- package/model-provider/automatic1111/Automatic1111ImageGenerationPrompt.d.ts +2 -2
- package/model-provider/cohere/CohereTextGenerationModel.cjs +10 -10
- package/model-provider/cohere/CohereTextGenerationModel.d.ts +7 -7
- package/model-provider/cohere/CohereTextGenerationModel.js +10 -10
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +4 -4
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +3 -3
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +4 -4
- package/model-provider/llamacpp/{LlamaCppBakLLaVA1Format.cjs → LlamaCppBakLLaVA1PromptTemplate.cjs} +1 -1
- package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.d.ts +11 -0
- package/model-provider/llamacpp/{LlamaCppBakLLaVA1Format.js → LlamaCppBakLLaVA1PromptTemplate.js} +1 -1
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +12 -12
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +7 -7
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +12 -12
- package/model-provider/llamacpp/index.cjs +2 -2
- package/model-provider/llamacpp/index.d.ts +1 -1
- package/model-provider/llamacpp/index.js +1 -1
- package/model-provider/ollama/OllamaError.cjs +25 -24
- package/model-provider/ollama/OllamaError.d.ts +1 -11
- package/model-provider/ollama/OllamaError.js +24 -22
- package/model-provider/ollama/OllamaTextGenerationModel.cjs +47 -10
- package/model-provider/ollama/OllamaTextGenerationModel.d.ts +12 -8
- package/model-provider/ollama/OllamaTextGenerationModel.js +48 -11
- package/model-provider/ollama/OllamaTextGenerationModel.test.cjs +63 -0
- package/model-provider/ollama/OllamaTextGenerationModel.test.d.ts +1 -0
- package/model-provider/ollama/OllamaTextGenerationModel.test.js +61 -0
- package/model-provider/ollama/index.cjs +1 -3
- package/model-provider/ollama/index.d.ts +1 -1
- package/model-provider/ollama/index.js +0 -1
- package/model-provider/openai/OpenAICompletionModel.cjs +10 -10
- package/model-provider/openai/OpenAICompletionModel.d.ts +7 -7
- package/model-provider/openai/OpenAICompletionModel.js +10 -10
- package/model-provider/openai/OpenAIError.cjs +13 -29
- package/model-provider/openai/OpenAIError.d.ts +2 -11
- package/model-provider/openai/OpenAIError.js +11 -26
- package/model-provider/openai/OpenAIImageGenerationModel.cjs +4 -4
- package/model-provider/openai/OpenAIImageGenerationModel.d.ts +3 -3
- package/model-provider/openai/OpenAIImageGenerationModel.js +4 -4
- package/model-provider/openai/chat/OpenAIChatFunctionCallStructureGenerationModel.cjs +16 -16
- package/model-provider/openai/chat/OpenAIChatFunctionCallStructureGenerationModel.d.ts +14 -14
- package/model-provider/openai/chat/OpenAIChatFunctionCallStructureGenerationModel.js +16 -16
- package/model-provider/openai/chat/OpenAIChatMessage.d.ts +1 -1
- package/model-provider/openai/chat/OpenAIChatModel.cjs +15 -15
- package/model-provider/openai/chat/OpenAIChatModel.d.ts +12 -12
- package/model-provider/openai/chat/OpenAIChatModel.js +15 -15
- package/model-provider/openai/chat/{OpenAIChatPromptFormat.cjs → OpenAIChatPromptTemplate.cjs} +1 -1
- package/model-provider/openai/chat/OpenAIChatPromptTemplate.d.ts +20 -0
- package/model-provider/openai/chat/{OpenAIChatPromptFormat.js → OpenAIChatPromptTemplate.js} +1 -1
- package/model-provider/openai/index.cjs +2 -4
- package/model-provider/openai/index.d.ts +2 -2
- package/model-provider/openai/index.js +1 -2
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.cjs +14 -14
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.d.ts +11 -11
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.js +14 -14
- package/model-provider/stability/StabilityImageGenerationModel.cjs +5 -5
- package/model-provider/stability/StabilityImageGenerationModel.d.ts +4 -4
- package/model-provider/stability/StabilityImageGenerationModel.js +5 -5
- package/model-provider/stability/StabilityImageGenerationPrompt.d.ts +2 -2
- package/model-provider/whispercpp/WhisperCppTranscriptionModel.cjs +5 -8
- package/model-provider/whispercpp/WhisperCppTranscriptionModel.js +5 -8
- package/package.json +5 -4
- package/tool/generate-tool-call/TextGenerationToolCallModel.d.ts +2 -2
- package/tool/generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.cjs +6 -6
- package/tool/generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.d.ts +4 -4
- package/tool/generate-tool-calls-or-text/TextGenerationToolCallsOrGenerateTextModel.js +6 -6
- package/util/AsyncQueue.test.cjs +20 -21
- package/util/AsyncQueue.test.js +9 -10
- package/util/isDeepEqualData.test.cjs +14 -15
- package/util/isDeepEqualData.test.js +14 -15
- package/util/runSafe.test.cjs +12 -13
- package/util/runSafe.test.js +6 -7
- package/model-function/generate-image/PromptFormatImageGenerationModel.d.ts +0 -20
- package/model-function/generate-text/PromptFormatTextGenerationModel.d.ts +0 -35
- package/model-function/generate-text/PromptFormatTextStreamingModel.cjs +0 -38
- package/model-function/generate-text/PromptFormatTextStreamingModel.d.ts +0 -16
- package/model-function/generate-text/PromptFormatTextStreamingModel.js +0 -34
- package/model-function/generate-text/TextGenerationPromptFormat.d.ts +0 -11
- package/model-function/generate-text/prompt-format/index.d.ts +0 -10
- package/model-function/generate-text/prompt-format/index.js +0 -10
- package/model-provider/anthropic/AnthropicPromptFormat.d.ts +0 -17
- package/model-provider/llamacpp/LlamaCppBakLLaVA1Format.d.ts +0 -11
- package/model-provider/openai/chat/OpenAIChatPromptFormat.d.ts +0 -20
- /package/model-function/{PromptFormat.cjs → PromptTemplate.cjs} +0 -0
- /package/model-function/{PromptFormat.js → PromptTemplate.js} +0 -0
- /package/model-function/generate-structure/{StructureFromTextPromptFormat.cjs → StructureFromTextPromptTemplate.cjs} +0 -0
- /package/model-function/generate-structure/{StructureFromTextPromptFormat.js → StructureFromTextPromptTemplate.js} +0 -0
- /package/model-function/generate-text/{TextGenerationPromptFormat.cjs → TextGenerationPromptTemplate.cjs} +0 -0
- /package/model-function/generate-text/{TextGenerationPromptFormat.js → TextGenerationPromptTemplate.js} +0 -0
- /package/model-function/generate-text/{prompt-format/Content.js → prompt-template/AlpacaPromptTemplate.test.d.ts} +0 -0
- /package/model-function/generate-text/{prompt-format/InstructionPrompt.js → prompt-template/ChatMLPromptTemplate.test.d.ts} +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/ChatPrompt.cjs +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/ChatPrompt.js +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/Content.cjs +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/Content.d.ts +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/InstructionPrompt.cjs +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/InvalidPromptError.cjs +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/InvalidPromptError.d.ts +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/InvalidPromptError.js +0 -0
- /package/model-function/generate-text/{prompt-format/VicunaPromptFormat.cjs → prompt-template/VicunaPromptTemplate.cjs} +0 -0
- /package/model-function/generate-text/{prompt-format/VicunaPromptFormat.js → prompt-template/VicunaPromptTemplate.js} +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/trimChatPrompt.cjs +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/trimChatPrompt.d.ts +0 -0
- /package/model-function/generate-text/{prompt-format → prompt-template}/trimChatPrompt.js +0 -0
@@ -1,8 +1,8 @@
|
|
1
|
-
import {
|
1
|
+
import { StructureFromTextPromptTemplate } from "../../model-function/generate-structure/StructureFromTextPromptTemplate.js";
|
2
2
|
import { StructureFromTextStreamingModel } from "../../model-function/generate-structure/StructureFromTextStreamingModel.js";
|
3
|
-
import {
|
3
|
+
import { PromptTemplateTextStreamingModel } from "../../model-function/generate-text/PromptTemplateTextStreamingModel.js";
|
4
4
|
import { TextGenerationModelSettings, TextStreamingModel } from "../../model-function/generate-text/TextGenerationModel.js";
|
5
|
-
import {
|
5
|
+
import { TextGenerationPromptTemplate } from "../../model-function/generate-text/TextGenerationPromptTemplate.js";
|
6
6
|
import { ToolCallGenerationModel } from "../../tool/generate-tool-call/ToolCallGenerationModel.js";
|
7
7
|
import { ToolCallsOrTextGenerationModel } from "../../tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.js";
|
8
8
|
import { AbstractOpenAIChatCallSettings, AbstractOpenAIChatModel, OpenAIChatPrompt } from "../openai/chat/AbstractOpenAIChatModel.js";
|
@@ -27,19 +27,19 @@ export declare class OpenAICompatibleChatModel extends AbstractOpenAIChatModel<O
|
|
27
27
|
readonly tokenizer: undefined;
|
28
28
|
readonly countPromptTokens: undefined;
|
29
29
|
get settingsForEvent(): Partial<OpenAICompatibleChatSettings>;
|
30
|
-
asStructureGenerationModel<INPUT_PROMPT>(
|
30
|
+
asStructureGenerationModel<INPUT_PROMPT>(promptTemplate: StructureFromTextPromptTemplate<INPUT_PROMPT, OpenAIChatPrompt>): StructureFromTextStreamingModel<INPUT_PROMPT, OpenAIChatPrompt, this>;
|
31
31
|
/**
|
32
|
-
* Returns this model with a text prompt
|
32
|
+
* Returns this model with a text prompt template.
|
33
33
|
*/
|
34
|
-
withTextPrompt():
|
34
|
+
withTextPrompt(): PromptTemplateTextStreamingModel<string, OpenAIChatPrompt, OpenAICompatibleChatSettings, this>;
|
35
35
|
/**
|
36
|
-
* Returns this model with an instruction prompt
|
36
|
+
* Returns this model with an instruction prompt template.
|
37
37
|
*/
|
38
|
-
withInstructionPrompt():
|
38
|
+
withInstructionPrompt(): PromptTemplateTextStreamingModel<import("../../index.js").MultiModalInstructionPrompt | import("../../index.js").TextInstructionPrompt, OpenAIChatPrompt, OpenAICompatibleChatSettings, this>;
|
39
39
|
/**
|
40
|
-
* Returns this model with a chat prompt
|
40
|
+
* Returns this model with a chat prompt template.
|
41
41
|
*/
|
42
|
-
withChatPrompt():
|
43
|
-
|
42
|
+
withChatPrompt(): PromptTemplateTextStreamingModel<import("../../index.js").TextChatPrompt | import("../../index.js").MultiModalChatPrompt, OpenAIChatPrompt, OpenAICompatibleChatSettings, this>;
|
43
|
+
withPromptTemplate<INPUT_PROMPT>(promptTemplate: TextGenerationPromptTemplate<INPUT_PROMPT, OpenAIChatPrompt>): PromptTemplateTextStreamingModel<INPUT_PROMPT, OpenAIChatPrompt, OpenAICompatibleChatSettings, this>;
|
44
44
|
withSettings(additionalSettings: Partial<OpenAICompatibleChatSettings>): this;
|
45
45
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { StructureFromTextStreamingModel } from "../../model-function/generate-structure/StructureFromTextStreamingModel.js";
|
2
|
-
import {
|
2
|
+
import { PromptTemplateTextStreamingModel } from "../../model-function/generate-text/PromptTemplateTextStreamingModel.js";
|
3
3
|
import { AbstractOpenAIChatModel, } from "../openai/chat/AbstractOpenAIChatModel.js";
|
4
|
-
import { chat, instruction, text, } from "../openai/chat/
|
4
|
+
import { chat, instruction, text, } from "../openai/chat/OpenAIChatPromptTemplate.js";
|
5
5
|
/**
|
6
6
|
* Create a text generation model that calls an API that is compatible with OpenAI's chat API.
|
7
7
|
*
|
@@ -55,39 +55,39 @@ export class OpenAICompatibleChatModel extends AbstractOpenAIChatModel {
|
|
55
55
|
];
|
56
56
|
return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
|
57
57
|
}
|
58
|
-
asStructureGenerationModel(
|
58
|
+
asStructureGenerationModel(promptTemplate) {
|
59
59
|
return new StructureFromTextStreamingModel({
|
60
60
|
model: this,
|
61
|
-
|
61
|
+
template: promptTemplate,
|
62
62
|
});
|
63
63
|
}
|
64
64
|
/**
|
65
|
-
* Returns this model with a text prompt
|
65
|
+
* Returns this model with a text prompt template.
|
66
66
|
*/
|
67
67
|
withTextPrompt() {
|
68
|
-
return this.
|
68
|
+
return this.withPromptTemplate(text());
|
69
69
|
}
|
70
70
|
/**
|
71
|
-
* Returns this model with an instruction prompt
|
71
|
+
* Returns this model with an instruction prompt template.
|
72
72
|
*/
|
73
73
|
withInstructionPrompt() {
|
74
|
-
return this.
|
74
|
+
return this.withPromptTemplate(instruction());
|
75
75
|
}
|
76
76
|
/**
|
77
|
-
* Returns this model with a chat prompt
|
77
|
+
* Returns this model with a chat prompt template.
|
78
78
|
*/
|
79
79
|
withChatPrompt() {
|
80
|
-
return this.
|
80
|
+
return this.withPromptTemplate(chat());
|
81
81
|
}
|
82
|
-
|
83
|
-
return new
|
82
|
+
withPromptTemplate(promptTemplate) {
|
83
|
+
return new PromptTemplateTextStreamingModel({
|
84
84
|
model: this.withSettings({
|
85
85
|
stopSequences: [
|
86
86
|
...(this.settings.stopSequences ?? []),
|
87
|
-
...
|
87
|
+
...promptTemplate.stopSequences,
|
88
88
|
],
|
89
89
|
}),
|
90
|
-
|
90
|
+
promptTemplate,
|
91
91
|
});
|
92
92
|
}
|
93
93
|
withSettings(additionalSettings) {
|
@@ -5,7 +5,7 @@ const zod_1 = require("zod");
|
|
5
5
|
const callWithRetryAndThrottle_js_1 = require("../../core/api/callWithRetryAndThrottle.cjs");
|
6
6
|
const postToApi_js_1 = require("../../core/api/postToApi.cjs");
|
7
7
|
const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
|
8
|
-
const
|
8
|
+
const PromptTemplateImageGenerationModel_js_1 = require("../../model-function/generate-image/PromptTemplateImageGenerationModel.cjs");
|
9
9
|
const StabilityApiConfiguration_js_1 = require("./StabilityApiConfiguration.cjs");
|
10
10
|
const StabilityError_js_1 = require("./StabilityError.cjs");
|
11
11
|
const StabilityImageGenerationPrompt_js_1 = require("./StabilityImageGenerationPrompt.cjs");
|
@@ -79,12 +79,12 @@ class StabilityImageGenerationModel extends AbstractModel_js_1.AbstractModel {
|
|
79
79
|
};
|
80
80
|
}
|
81
81
|
withTextPrompt() {
|
82
|
-
return this.
|
82
|
+
return this.withPromptTemplate((0, StabilityImageGenerationPrompt_js_1.mapBasicPromptToStabilityFormat)());
|
83
83
|
}
|
84
|
-
|
85
|
-
return new
|
84
|
+
withPromptTemplate(promptTemplate) {
|
85
|
+
return new PromptTemplateImageGenerationModel_js_1.PromptTemplateImageGenerationModel({
|
86
86
|
model: this,
|
87
|
-
|
87
|
+
promptTemplate,
|
88
88
|
});
|
89
89
|
}
|
90
90
|
withSettings(additionalSettings) {
|
@@ -2,9 +2,9 @@ import { z } from "zod";
|
|
2
2
|
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
3
3
|
import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
|
4
4
|
import { AbstractModel } from "../../model-function/AbstractModel.js";
|
5
|
-
import {
|
5
|
+
import { PromptTemplate } from "../../model-function/PromptTemplate.js";
|
6
6
|
import { ImageGenerationModel, ImageGenerationModelSettings } from "../../model-function/generate-image/ImageGenerationModel.js";
|
7
|
-
import {
|
7
|
+
import { PromptTemplateImageGenerationModel } from "../../model-function/generate-image/PromptTemplateImageGenerationModel.js";
|
8
8
|
import { StabilityImageGenerationPrompt } from "./StabilityImageGenerationPrompt.js";
|
9
9
|
/**
|
10
10
|
* Create an image generation model that calls the Stability AI image generation API.
|
@@ -44,8 +44,8 @@ export declare class StabilityImageGenerationModel extends AbstractModel<Stabili
|
|
44
44
|
};
|
45
45
|
base64Image: string;
|
46
46
|
}>;
|
47
|
-
withTextPrompt():
|
48
|
-
|
47
|
+
withTextPrompt(): PromptTemplateImageGenerationModel<string, StabilityImageGenerationPrompt, StabilityImageGenerationSettings, this>;
|
48
|
+
withPromptTemplate<INPUT_PROMPT>(promptTemplate: PromptTemplate<INPUT_PROMPT, StabilityImageGenerationPrompt>): PromptTemplateImageGenerationModel<INPUT_PROMPT, StabilityImageGenerationPrompt, StabilityImageGenerationSettings, this>;
|
49
49
|
withSettings(additionalSettings: StabilityImageGenerationSettings): this;
|
50
50
|
}
|
51
51
|
declare const stabilityImageGenerationModels: readonly ["stable-diffusion-v1-5", "stable-diffusion-512-v2-1", "stable-diffusion-xl-1024-v0-9", "stable-diffusion-xl-1024-v1-0"];
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
2
2
|
import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
|
3
3
|
import { createJsonResponseHandler, postJsonToApi, } from "../../core/api/postToApi.js";
|
4
4
|
import { AbstractModel } from "../../model-function/AbstractModel.js";
|
5
|
-
import {
|
5
|
+
import { PromptTemplateImageGenerationModel } from "../../model-function/generate-image/PromptTemplateImageGenerationModel.js";
|
6
6
|
import { StabilityApiConfiguration } from "./StabilityApiConfiguration.js";
|
7
7
|
import { failedStabilityCallResponseHandler } from "./StabilityError.js";
|
8
8
|
import { mapBasicPromptToStabilityFormat, } from "./StabilityImageGenerationPrompt.js";
|
@@ -76,12 +76,12 @@ export class StabilityImageGenerationModel extends AbstractModel {
|
|
76
76
|
};
|
77
77
|
}
|
78
78
|
withTextPrompt() {
|
79
|
-
return this.
|
79
|
+
return this.withPromptTemplate(mapBasicPromptToStabilityFormat());
|
80
80
|
}
|
81
|
-
|
82
|
-
return new
|
81
|
+
withPromptTemplate(promptTemplate) {
|
82
|
+
return new PromptTemplateImageGenerationModel({
|
83
83
|
model: this,
|
84
|
-
|
84
|
+
promptTemplate,
|
85
85
|
});
|
86
86
|
}
|
87
87
|
withSettings(additionalSettings) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { PromptTemplate } from "../../model-function/PromptTemplate.js";
|
2
2
|
export type StabilityImageGenerationPrompt = Array<{
|
3
3
|
text: string;
|
4
4
|
weight?: number;
|
@@ -6,4 +6,4 @@ export type StabilityImageGenerationPrompt = Array<{
|
|
6
6
|
/**
|
7
7
|
* Formats a basic text prompt as a Stability prompt.
|
8
8
|
*/
|
9
|
-
export declare function mapBasicPromptToStabilityFormat():
|
9
|
+
export declare function mapBasicPromptToStabilityFormat(): PromptTemplate<string, StabilityImageGenerationPrompt>;
|
@@ -72,15 +72,12 @@ class WhisperCppTranscriptionModel extends AbstractModel_js_1.AbstractModel {
|
|
72
72
|
}
|
73
73
|
}
|
74
74
|
exports.WhisperCppTranscriptionModel = WhisperCppTranscriptionModel;
|
75
|
-
const whisperCppTranscriptionJsonSchema = zod_1.z.union([
|
76
|
-
zod_1.z.object({ text: zod_1.z.string() }),
|
77
|
-
zod_1.z.object({ error: zod_1.z.string() }),
|
78
|
-
]);
|
75
|
+
const whisperCppTranscriptionJsonSchema = new ZodSchema_js_1.ZodSchema(zod_1.z.union([zod_1.z.object({ text: zod_1.z.string() }), zod_1.z.object({ error: zod_1.z.string() })]));
|
79
76
|
const successfulResponseHandler = async ({ response, url, requestBodyValues }) => {
|
80
77
|
const responseBody = await response.text();
|
81
78
|
const parsedResult = (0, parseJSON_js_1.safeParseJSON)({
|
82
79
|
text: responseBody,
|
83
|
-
schema:
|
80
|
+
schema: whisperCppTranscriptionJsonSchema,
|
84
81
|
});
|
85
82
|
if (!parsedResult.success) {
|
86
83
|
throw new ApiCallError_js_1.ApiCallError({
|
@@ -106,12 +103,12 @@ const successfulResponseHandler = async ({ response, url, requestBodyValues }) =
|
|
106
103
|
};
|
107
104
|
};
|
108
105
|
const failedResponseHandler = async ({ response, url, requestBodyValues, }) => {
|
109
|
-
const
|
106
|
+
const responseBody = await response.text();
|
110
107
|
return new ApiCallError_js_1.ApiCallError({
|
111
|
-
message,
|
108
|
+
message: responseBody,
|
112
109
|
url,
|
113
110
|
requestBodyValues,
|
114
111
|
statusCode: response.status,
|
115
|
-
responseBody
|
112
|
+
responseBody,
|
116
113
|
});
|
117
114
|
};
|
@@ -68,15 +68,12 @@ export class WhisperCppTranscriptionModel extends AbstractModel {
|
|
68
68
|
return new WhisperCppTranscriptionModel(Object.assign({}, this.settings, additionalSettings));
|
69
69
|
}
|
70
70
|
}
|
71
|
-
const whisperCppTranscriptionJsonSchema = z.union([
|
72
|
-
z.object({ text: z.string() }),
|
73
|
-
z.object({ error: z.string() }),
|
74
|
-
]);
|
71
|
+
const whisperCppTranscriptionJsonSchema = new ZodSchema(z.union([z.object({ text: z.string() }), z.object({ error: z.string() })]));
|
75
72
|
const successfulResponseHandler = async ({ response, url, requestBodyValues }) => {
|
76
73
|
const responseBody = await response.text();
|
77
74
|
const parsedResult = safeParseJSON({
|
78
75
|
text: responseBody,
|
79
|
-
schema:
|
76
|
+
schema: whisperCppTranscriptionJsonSchema,
|
80
77
|
});
|
81
78
|
if (!parsedResult.success) {
|
82
79
|
throw new ApiCallError({
|
@@ -102,12 +99,12 @@ const successfulResponseHandler = async ({ response, url, requestBodyValues }) =
|
|
102
99
|
};
|
103
100
|
};
|
104
101
|
const failedResponseHandler = async ({ response, url, requestBodyValues, }) => {
|
105
|
-
const
|
102
|
+
const responseBody = await response.text();
|
106
103
|
return new ApiCallError({
|
107
|
-
message,
|
104
|
+
message: responseBody,
|
108
105
|
url,
|
109
106
|
requestBodyValues,
|
110
107
|
statusCode: response.status,
|
111
|
-
responseBody
|
108
|
+
responseBody,
|
112
109
|
});
|
113
110
|
};
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "modelfusion",
|
3
3
|
"description": "The TypeScript library for building multi-modal AI applications.",
|
4
|
-
"version": "0.
|
4
|
+
"version": "0.93.0",
|
5
5
|
"author": "Lars Grammel",
|
6
6
|
"license": "MIT",
|
7
7
|
"keywords": [
|
@@ -62,8 +62,8 @@
|
|
62
62
|
"build": "npm run build:esm && npm run build:cjs",
|
63
63
|
"build:esm": "tsc --outDir dist/",
|
64
64
|
"build:cjs": "tsc --outDir build/cjs/ -p tsconfig.cjs.json && node bin/prepare-cjs.js",
|
65
|
-
"test": "vitest run src",
|
66
|
-
"test
|
65
|
+
"test": "vitest --config vitest.config.js --run src",
|
66
|
+
"test:watch": "vitest watch--config vitest.config.js",
|
67
67
|
"dist": "npm run clean && npm run lint && npm run test && npm run build && npm run dist:copy-files",
|
68
68
|
"dist:copy-files": "copyfiles package.json README.md LICENSE dist"
|
69
69
|
},
|
@@ -87,9 +87,10 @@
|
|
87
87
|
"fastify": "^4.0.0",
|
88
88
|
"husky": "^8.0.3",
|
89
89
|
"lint-staged": "15.1.0",
|
90
|
+
"msw": "2.0.10",
|
90
91
|
"prettier": "3.1.0",
|
91
92
|
"rimraf": "5.0.5",
|
92
93
|
"typescript": "5.2.2",
|
93
|
-
"vitest": "
|
94
|
+
"vitest": "1.0.4"
|
94
95
|
}
|
95
96
|
}
|
@@ -2,7 +2,7 @@ import { FunctionOptions } from "../../core/FunctionOptions.js";
|
|
2
2
|
import { TextGenerationModel, TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
|
3
3
|
import { ToolDefinition } from "../ToolDefinition.js";
|
4
4
|
import { ToolCallGenerationModel } from "./ToolCallGenerationModel.js";
|
5
|
-
export interface
|
5
|
+
export interface ToolCallPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT> {
|
6
6
|
createPrompt: (prompt: SOURCE_PROMPT, tool: ToolDefinition<string, unknown>) => TARGET_PROMPT;
|
7
7
|
extractToolCall: (response: string) => {
|
8
8
|
id: string;
|
@@ -14,7 +14,7 @@ export declare class TextGenerationToolCallModel<SOURCE_PROMPT, TARGET_PROMPT, M
|
|
14
14
|
private readonly format;
|
15
15
|
constructor({ model, format, }: {
|
16
16
|
model: MODEL;
|
17
|
-
format:
|
17
|
+
format: ToolCallPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT>;
|
18
18
|
});
|
19
19
|
get modelInformation(): import("../../index.js").ModelInformation;
|
20
20
|
get settings(): TextGenerationModelSettings;
|
@@ -4,21 +4,21 @@ exports.TextGenerationToolCallsOrGenerateTextModel = void 0;
|
|
4
4
|
const generateText_js_1 = require("../../model-function/generate-text/generateText.cjs");
|
5
5
|
const ToolCallsOrTextParseError_js_1 = require("./ToolCallsOrTextParseError.cjs");
|
6
6
|
class TextGenerationToolCallsOrGenerateTextModel {
|
7
|
-
constructor({ model,
|
7
|
+
constructor({ model, template, }) {
|
8
8
|
Object.defineProperty(this, "model", {
|
9
9
|
enumerable: true,
|
10
10
|
configurable: true,
|
11
11
|
writable: true,
|
12
12
|
value: void 0
|
13
13
|
});
|
14
|
-
Object.defineProperty(this, "
|
14
|
+
Object.defineProperty(this, "template", {
|
15
15
|
enumerable: true,
|
16
16
|
configurable: true,
|
17
17
|
writable: true,
|
18
18
|
value: void 0
|
19
19
|
});
|
20
20
|
this.model = model;
|
21
|
-
this.
|
21
|
+
this.template = template;
|
22
22
|
}
|
23
23
|
get modelInformation() {
|
24
24
|
return this.model.modelInformation;
|
@@ -30,12 +30,12 @@ class TextGenerationToolCallsOrGenerateTextModel {
|
|
30
30
|
return this.model.settingsForEvent;
|
31
31
|
}
|
32
32
|
async doGenerateToolCallsOrText(tools, prompt, options) {
|
33
|
-
const { response, value, metadata } = await (0, generateText_js_1.generateText)(this.model, this.
|
33
|
+
const { response, value, metadata } = await (0, generateText_js_1.generateText)(this.model, this.template.createPrompt(prompt, tools), {
|
34
34
|
...options,
|
35
35
|
returnType: "full",
|
36
36
|
});
|
37
37
|
try {
|
38
|
-
const { text, toolCalls } = this.
|
38
|
+
const { text, toolCalls } = this.template.extractToolCallsAndText(value);
|
39
39
|
return {
|
40
40
|
response,
|
41
41
|
text,
|
@@ -53,7 +53,7 @@ class TextGenerationToolCallsOrGenerateTextModel {
|
|
53
53
|
withSettings(additionalSettings) {
|
54
54
|
return new TextGenerationToolCallsOrGenerateTextModel({
|
55
55
|
model: this.model.withSettings(additionalSettings),
|
56
|
-
|
56
|
+
template: this.template,
|
57
57
|
});
|
58
58
|
}
|
59
59
|
}
|
@@ -2,7 +2,7 @@ import { FunctionOptions } from "../../core/FunctionOptions.js";
|
|
2
2
|
import { TextGenerationModel } from "../../model-function/generate-text/TextGenerationModel.js";
|
3
3
|
import { ToolDefinition } from "../ToolDefinition.js";
|
4
4
|
import { ToolCallsOrTextGenerationModel, ToolCallsOrTextGenerationModelSettings } from "./ToolCallsOrTextGenerationModel.js";
|
5
|
-
export interface
|
5
|
+
export interface ToolCallsOrGenerateTextPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT> {
|
6
6
|
createPrompt: (prompt: SOURCE_PROMPT, tools: Array<ToolDefinition<string, unknown>>) => TARGET_PROMPT;
|
7
7
|
extractToolCallsAndText: (response: string) => {
|
8
8
|
text: string | null;
|
@@ -15,10 +15,10 @@ export interface ToolCallsOrGenerateTextPromptFormat<SOURCE_PROMPT, TARGET_PROMP
|
|
15
15
|
}
|
16
16
|
export declare class TextGenerationToolCallsOrGenerateTextModel<SOURCE_PROMPT, TARGET_PROMPT, MODEL extends TextGenerationModel<TARGET_PROMPT, ToolCallsOrTextGenerationModelSettings>> implements ToolCallsOrTextGenerationModel<SOURCE_PROMPT, MODEL["settings"]> {
|
17
17
|
private readonly model;
|
18
|
-
private readonly
|
19
|
-
constructor({ model,
|
18
|
+
private readonly template;
|
19
|
+
constructor({ model, template, }: {
|
20
20
|
model: MODEL;
|
21
|
-
|
21
|
+
template: ToolCallsOrGenerateTextPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT>;
|
22
22
|
});
|
23
23
|
get modelInformation(): import("../../index.js").ModelInformation;
|
24
24
|
get settings(): ToolCallsOrTextGenerationModelSettings;
|
@@ -1,21 +1,21 @@
|
|
1
1
|
import { generateText } from "../../model-function/generate-text/generateText.js";
|
2
2
|
import { ToolCallsOrTextParseError } from "./ToolCallsOrTextParseError.js";
|
3
3
|
export class TextGenerationToolCallsOrGenerateTextModel {
|
4
|
-
constructor({ model,
|
4
|
+
constructor({ model, template, }) {
|
5
5
|
Object.defineProperty(this, "model", {
|
6
6
|
enumerable: true,
|
7
7
|
configurable: true,
|
8
8
|
writable: true,
|
9
9
|
value: void 0
|
10
10
|
});
|
11
|
-
Object.defineProperty(this, "
|
11
|
+
Object.defineProperty(this, "template", {
|
12
12
|
enumerable: true,
|
13
13
|
configurable: true,
|
14
14
|
writable: true,
|
15
15
|
value: void 0
|
16
16
|
});
|
17
17
|
this.model = model;
|
18
|
-
this.
|
18
|
+
this.template = template;
|
19
19
|
}
|
20
20
|
get modelInformation() {
|
21
21
|
return this.model.modelInformation;
|
@@ -27,12 +27,12 @@ export class TextGenerationToolCallsOrGenerateTextModel {
|
|
27
27
|
return this.model.settingsForEvent;
|
28
28
|
}
|
29
29
|
async doGenerateToolCallsOrText(tools, prompt, options) {
|
30
|
-
const { response, value, metadata } = await generateText(this.model, this.
|
30
|
+
const { response, value, metadata } = await generateText(this.model, this.template.createPrompt(prompt, tools), {
|
31
31
|
...options,
|
32
32
|
returnType: "full",
|
33
33
|
});
|
34
34
|
try {
|
35
|
-
const { text, toolCalls } = this.
|
35
|
+
const { text, toolCalls } = this.template.extractToolCallsAndText(value);
|
36
36
|
return {
|
37
37
|
response,
|
38
38
|
text,
|
@@ -50,7 +50,7 @@ export class TextGenerationToolCallsOrGenerateTextModel {
|
|
50
50
|
withSettings(additionalSettings) {
|
51
51
|
return new TextGenerationToolCallsOrGenerateTextModel({
|
52
52
|
model: this.model.withSettings(additionalSettings),
|
53
|
-
|
53
|
+
template: this.template,
|
54
54
|
});
|
55
55
|
}
|
56
56
|
}
|
package/util/AsyncQueue.test.cjs
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const vitest_1 = require("vitest");
|
4
3
|
const delay_js_1 = require("./delay.cjs");
|
5
4
|
const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
6
|
-
(
|
5
|
+
it("should receive values in order for single iterator created before pushing", async () => {
|
7
6
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
8
7
|
const receivedValues = [];
|
9
8
|
const receiveValuesPromise = (async () => {
|
@@ -16,9 +15,9 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
16
15
|
asyncQueue.push(3);
|
17
16
|
asyncQueue.close();
|
18
17
|
await receiveValuesPromise;
|
19
|
-
|
18
|
+
expect(receivedValues).toEqual([1, 2, 3]);
|
20
19
|
});
|
21
|
-
(
|
20
|
+
it("should receive values in order for single iterator created after closing", async () => {
|
22
21
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
23
22
|
asyncQueue.push(1);
|
24
23
|
asyncQueue.push(2);
|
@@ -31,9 +30,9 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
31
30
|
}
|
32
31
|
})();
|
33
32
|
await receiveValuesPromise;
|
34
|
-
|
33
|
+
expect(receivedValues).toEqual([1, 2, 3]);
|
35
34
|
});
|
36
|
-
(
|
35
|
+
it("should handle delayed pushing", async () => {
|
37
36
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
38
37
|
setTimeout(() => {
|
39
38
|
asyncQueue.push(1);
|
@@ -44,12 +43,12 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
44
43
|
for await (const value of asyncQueue) {
|
45
44
|
receivedValues.push(value);
|
46
45
|
}
|
47
|
-
|
46
|
+
expect(receivedValues).toEqual([1, 2]);
|
48
47
|
});
|
49
|
-
(
|
48
|
+
it("should error handling in consumer", async () => {
|
50
49
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
51
50
|
asyncQueue.push(1);
|
52
|
-
await
|
51
|
+
await expect((async () => {
|
53
52
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
54
53
|
for await (const _value of asyncQueue) {
|
55
54
|
throw new Error("Consumer error");
|
@@ -62,23 +61,23 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
62
61
|
for await (const value of asyncQueue) {
|
63
62
|
receivedValues.push(value);
|
64
63
|
}
|
65
|
-
|
64
|
+
expect(receivedValues).toEqual([1, 2]);
|
66
65
|
});
|
67
|
-
(
|
66
|
+
it("should behavior on empty queue closing", async () => {
|
68
67
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
69
68
|
asyncQueue.close();
|
70
69
|
const receivedValues = [];
|
71
70
|
for await (const value of asyncQueue) {
|
72
71
|
receivedValues.push(value);
|
73
72
|
}
|
74
|
-
|
73
|
+
expect(receivedValues).toEqual([]);
|
75
74
|
});
|
76
|
-
(
|
75
|
+
it("should multiple closings", async () => {
|
77
76
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
78
77
|
asyncQueue.close();
|
79
|
-
|
78
|
+
expect(() => asyncQueue.close()).not.toThrow();
|
80
79
|
});
|
81
|
-
(
|
80
|
+
it("should receive all values in multiple independent consumers", async () => {
|
82
81
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
83
82
|
const consumerPromises = [1, 2].map(async () => {
|
84
83
|
const receivedValues = [];
|
@@ -97,10 +96,10 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
97
96
|
asyncQueue.close();
|
98
97
|
const allReceivedValues = await Promise.all(consumerPromises);
|
99
98
|
allReceivedValues.forEach((receivedValues) => {
|
100
|
-
|
99
|
+
expect(receivedValues).toEqual([1, 2, 3]);
|
101
100
|
});
|
102
101
|
});
|
103
|
-
(
|
102
|
+
it("should each consumer receives all pushed values under varying conditions", async () => {
|
104
103
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
105
104
|
// Start the first consumer, which will await values.
|
106
105
|
const receivedValues1 = [];
|
@@ -128,11 +127,11 @@ const AsyncQueue_js_1 = require("./AsyncQueue.cjs");
|
|
128
127
|
asyncQueue.close();
|
129
128
|
await Promise.all([consumer1, consumer2]);
|
130
129
|
// Both consumers should have received all values, even if they started at different times.
|
131
|
-
|
132
|
-
|
130
|
+
expect(receivedValues1).toEqual([1, 2, 3]);
|
131
|
+
expect(receivedValues2).toEqual([1, 2, 3]); // This will likely fail because consumer2 started late.
|
133
132
|
});
|
134
|
-
(
|
133
|
+
it("should throw error when pushing to a closed queue", async () => {
|
135
134
|
const asyncQueue = new AsyncQueue_js_1.AsyncQueue();
|
136
135
|
asyncQueue.close();
|
137
|
-
|
136
|
+
expect(() => asyncQueue.push(1)).toThrowError("Cannot push value to closed queue.");
|
138
137
|
});
|
package/util/AsyncQueue.test.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
import { expect, test } from "vitest";
|
2
1
|
import { delay } from "./delay.js";
|
3
2
|
import { AsyncQueue } from "./AsyncQueue.js";
|
4
|
-
|
3
|
+
it("should receive values in order for single iterator created before pushing", async () => {
|
5
4
|
const asyncQueue = new AsyncQueue();
|
6
5
|
const receivedValues = [];
|
7
6
|
const receiveValuesPromise = (async () => {
|
@@ -16,7 +15,7 @@ test("receive values in order for single iterator created before pushing", async
|
|
16
15
|
await receiveValuesPromise;
|
17
16
|
expect(receivedValues).toEqual([1, 2, 3]);
|
18
17
|
});
|
19
|
-
|
18
|
+
it("should receive values in order for single iterator created after closing", async () => {
|
20
19
|
const asyncQueue = new AsyncQueue();
|
21
20
|
asyncQueue.push(1);
|
22
21
|
asyncQueue.push(2);
|
@@ -31,7 +30,7 @@ test("receive values in order for single iterator created after closing", async
|
|
31
30
|
await receiveValuesPromise;
|
32
31
|
expect(receivedValues).toEqual([1, 2, 3]);
|
33
32
|
});
|
34
|
-
|
33
|
+
it("should handle delayed pushing", async () => {
|
35
34
|
const asyncQueue = new AsyncQueue();
|
36
35
|
setTimeout(() => {
|
37
36
|
asyncQueue.push(1);
|
@@ -44,7 +43,7 @@ test("handle delayed pushing", async () => {
|
|
44
43
|
}
|
45
44
|
expect(receivedValues).toEqual([1, 2]);
|
46
45
|
});
|
47
|
-
|
46
|
+
it("should error handling in consumer", async () => {
|
48
47
|
const asyncQueue = new AsyncQueue();
|
49
48
|
asyncQueue.push(1);
|
50
49
|
await expect((async () => {
|
@@ -62,7 +61,7 @@ test("error handling in consumer", async () => {
|
|
62
61
|
}
|
63
62
|
expect(receivedValues).toEqual([1, 2]);
|
64
63
|
});
|
65
|
-
|
64
|
+
it("should behavior on empty queue closing", async () => {
|
66
65
|
const asyncQueue = new AsyncQueue();
|
67
66
|
asyncQueue.close();
|
68
67
|
const receivedValues = [];
|
@@ -71,12 +70,12 @@ test("behavior on empty queue closing", async () => {
|
|
71
70
|
}
|
72
71
|
expect(receivedValues).toEqual([]);
|
73
72
|
});
|
74
|
-
|
73
|
+
it("should multiple closings", async () => {
|
75
74
|
const asyncQueue = new AsyncQueue();
|
76
75
|
asyncQueue.close();
|
77
76
|
expect(() => asyncQueue.close()).not.toThrow();
|
78
77
|
});
|
79
|
-
|
78
|
+
it("should receive all values in multiple independent consumers", async () => {
|
80
79
|
const asyncQueue = new AsyncQueue();
|
81
80
|
const consumerPromises = [1, 2].map(async () => {
|
82
81
|
const receivedValues = [];
|
@@ -98,7 +97,7 @@ test("receive all values in multiple independent consumers", async () => {
|
|
98
97
|
expect(receivedValues).toEqual([1, 2, 3]);
|
99
98
|
});
|
100
99
|
});
|
101
|
-
|
100
|
+
it("should each consumer receives all pushed values under varying conditions", async () => {
|
102
101
|
const asyncQueue = new AsyncQueue();
|
103
102
|
// Start the first consumer, which will await values.
|
104
103
|
const receivedValues1 = [];
|
@@ -129,7 +128,7 @@ test("each consumer receives all pushed values under varying conditions", async
|
|
129
128
|
expect(receivedValues1).toEqual([1, 2, 3]);
|
130
129
|
expect(receivedValues2).toEqual([1, 2, 3]); // This will likely fail because consumer2 started late.
|
131
130
|
});
|
132
|
-
|
131
|
+
it("should throw error when pushing to a closed queue", async () => {
|
133
132
|
const asyncQueue = new AsyncQueue();
|
134
133
|
asyncQueue.close();
|
135
134
|
expect(() => asyncQueue.push(1)).toThrowError("Cannot push value to closed queue.");
|