modelfusion 0.104.0 → 0.105.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/CHANGELOG.md +49 -0
- package/model-function/Delta.d.ts +1 -2
- package/model-function/executeStreamCall.cjs +6 -4
- package/model-function/executeStreamCall.d.ts +2 -2
- package/model-function/executeStreamCall.js +6 -4
- package/model-function/generate-speech/streamSpeech.cjs +1 -2
- package/model-function/generate-speech/streamSpeech.js +1 -2
- package/model-function/generate-structure/StructureFromTextStreamingModel.cjs +25 -29
- package/model-function/generate-structure/StructureFromTextStreamingModel.d.ts +3 -1
- package/model-function/generate-structure/StructureFromTextStreamingModel.js +25 -29
- package/model-function/generate-structure/StructureGenerationModel.d.ts +2 -0
- package/model-function/generate-structure/streamStructure.cjs +7 -8
- package/model-function/generate-structure/streamStructure.d.ts +1 -1
- package/model-function/generate-structure/streamStructure.js +7 -8
- package/model-function/generate-text/PromptTemplateFullTextModel.cjs +35 -0
- package/model-function/generate-text/PromptTemplateFullTextModel.d.ts +41 -0
- package/model-function/generate-text/PromptTemplateFullTextModel.js +31 -0
- package/model-function/generate-text/PromptTemplateTextStreamingModel.cjs +3 -0
- package/model-function/generate-text/PromptTemplateTextStreamingModel.d.ts +2 -1
- package/model-function/generate-text/PromptTemplateTextStreamingModel.js +3 -0
- package/model-function/generate-text/TextGenerationModel.d.ts +2 -1
- package/model-function/generate-text/index.cjs +1 -0
- package/model-function/generate-text/index.d.ts +1 -0
- package/model-function/generate-text/index.js +1 -0
- package/model-function/generate-text/prompt-template/AlpacaPromptTemplate.cjs +2 -2
- package/model-function/generate-text/prompt-template/AlpacaPromptTemplate.js +1 -1
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.cjs +8 -5
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.js +7 -4
- package/model-function/generate-text/prompt-template/ChatPrompt.cjs +42 -0
- package/model-function/generate-text/prompt-template/ChatPrompt.d.ts +27 -5
- package/model-function/generate-text/prompt-template/ChatPrompt.js +41 -1
- package/model-function/generate-text/prompt-template/{Content.cjs → ContentPart.cjs} +1 -1
- package/model-function/generate-text/prompt-template/ContentPart.d.ts +30 -0
- package/model-function/generate-text/prompt-template/{Content.js → ContentPart.js} +1 -1
- package/model-function/generate-text/prompt-template/InstructionPrompt.d.ts +3 -2
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.cjs +7 -4
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.js +5 -2
- package/model-function/generate-text/prompt-template/NeuralChatPromptTemplate.cjs +8 -4
- package/model-function/generate-text/prompt-template/NeuralChatPromptTemplate.js +6 -2
- package/model-function/generate-text/prompt-template/TextPromptTemplate.cjs +8 -4
- package/model-function/generate-text/prompt-template/TextPromptTemplate.js +6 -2
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.cjs +7 -3
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.js +6 -2
- package/model-function/generate-text/prompt-template/index.cjs +1 -1
- package/model-function/generate-text/prompt-template/index.d.ts +1 -1
- package/model-function/generate-text/prompt-template/index.js +1 -1
- package/model-function/generate-text/streamText.cjs +27 -28
- package/model-function/generate-text/streamText.d.ts +1 -0
- package/model-function/generate-text/streamText.js +27 -28
- package/model-provider/anthropic/AnthropicPromptTemplate.cjs +7 -3
- package/model-provider/anthropic/AnthropicPromptTemplate.js +5 -1
- package/model-provider/anthropic/AnthropicTextGenerationModel.cjs +8 -14
- package/model-provider/anthropic/AnthropicTextGenerationModel.d.ts +11 -2
- package/model-provider/anthropic/AnthropicTextGenerationModel.js +8 -14
- package/model-provider/anthropic/AnthropicTextGenerationModel.test.cjs +44 -0
- package/model-provider/anthropic/AnthropicTextGenerationModel.test.js +42 -0
- package/model-provider/cohere/CohereTextGenerationModel.cjs +6 -44
- package/model-provider/cohere/CohereTextGenerationModel.d.ts +45 -11
- package/model-provider/cohere/CohereTextGenerationModel.js +7 -45
- package/model-provider/cohere/CohereTextGenerationModel.test.cjs +33 -0
- package/model-provider/cohere/CohereTextGenerationModel.test.d.ts +1 -0
- package/model-provider/cohere/CohereTextGenerationModel.test.js +31 -0
- package/model-provider/elevenlabs/ElevenLabsSpeechModel.cjs +1 -2
- package/model-provider/elevenlabs/ElevenLabsSpeechModel.js +1 -2
- package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.cjs +6 -1
- package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.js +6 -1
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +7 -14
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +157 -6
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +8 -15
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.test.cjs +37 -0
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.test.d.ts +1 -0
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.test.js +35 -0
- package/model-provider/mistral/MistralChatModel.cjs +30 -104
- package/model-provider/mistral/MistralChatModel.d.ts +47 -14
- package/model-provider/mistral/MistralChatModel.js +30 -104
- package/model-provider/mistral/MistralChatModel.test.cjs +51 -0
- package/model-provider/mistral/MistralChatModel.test.d.ts +1 -0
- package/model-provider/mistral/MistralChatModel.test.js +49 -0
- package/model-provider/mistral/MistralPromptTemplate.cjs +11 -4
- package/model-provider/mistral/MistralPromptTemplate.js +9 -2
- package/model-provider/ollama/OllamaChatModel.cjs +7 -43
- package/model-provider/ollama/OllamaChatModel.d.ts +61 -9
- package/model-provider/ollama/OllamaChatModel.js +7 -43
- package/model-provider/ollama/OllamaChatModel.test.cjs +27 -0
- package/model-provider/ollama/OllamaChatModel.test.d.ts +1 -0
- package/model-provider/ollama/OllamaChatModel.test.js +25 -0
- package/model-provider/ollama/OllamaChatPromptTemplate.cjs +34 -4
- package/model-provider/ollama/OllamaChatPromptTemplate.js +34 -4
- package/model-provider/ollama/OllamaCompletionModel.cjs +22 -43
- package/model-provider/ollama/OllamaCompletionModel.d.ts +65 -9
- package/model-provider/ollama/OllamaCompletionModel.js +23 -44
- package/model-provider/ollama/OllamaCompletionModel.test.cjs +101 -13
- package/model-provider/ollama/OllamaCompletionModel.test.js +78 -13
- package/model-provider/openai/{chat/AbstractOpenAIChatModel.cjs → AbstractOpenAIChatModel.cjs} +71 -15
- package/model-provider/openai/{chat/AbstractOpenAIChatModel.d.ts → AbstractOpenAIChatModel.d.ts} +273 -19
- package/model-provider/openai/{chat/AbstractOpenAIChatModel.js → AbstractOpenAIChatModel.js} +71 -15
- package/model-provider/openai/{chat/OpenAIChatFunctionCallStructureGenerationModel.cjs → OpenAIChatFunctionCallStructureGenerationModel.cjs} +18 -2
- package/model-provider/openai/{chat/OpenAIChatFunctionCallStructureGenerationModel.d.ts → OpenAIChatFunctionCallStructureGenerationModel.d.ts} +41 -11
- package/model-provider/openai/{chat/OpenAIChatFunctionCallStructureGenerationModel.js → OpenAIChatFunctionCallStructureGenerationModel.js} +18 -2
- package/model-provider/openai/{chat/OpenAIChatMessage.d.ts → OpenAIChatMessage.d.ts} +3 -3
- package/model-provider/openai/{chat/OpenAIChatModel.cjs → OpenAIChatModel.cjs} +5 -5
- package/model-provider/openai/{chat/OpenAIChatModel.d.ts → OpenAIChatModel.d.ts} +12 -12
- package/model-provider/openai/{chat/OpenAIChatModel.js → OpenAIChatModel.js} +5 -5
- package/model-provider/openai/OpenAIChatModel.test.cjs +94 -0
- package/model-provider/openai/OpenAIChatModel.test.d.ts +1 -0
- package/model-provider/openai/OpenAIChatModel.test.js +92 -0
- package/model-provider/openai/OpenAIChatPromptTemplate.cjs +114 -0
- package/model-provider/openai/{chat/OpenAIChatPromptTemplate.d.ts → OpenAIChatPromptTemplate.d.ts} +3 -3
- package/model-provider/openai/OpenAIChatPromptTemplate.js +107 -0
- package/model-provider/openai/OpenAICompletionModel.cjs +32 -84
- package/model-provider/openai/OpenAICompletionModel.d.ts +27 -10
- package/model-provider/openai/OpenAICompletionModel.js +33 -85
- package/model-provider/openai/OpenAICompletionModel.test.cjs +53 -0
- package/model-provider/openai/OpenAICompletionModel.test.d.ts +1 -0
- package/model-provider/openai/OpenAICompletionModel.test.js +51 -0
- package/model-provider/openai/OpenAICostCalculator.cjs +1 -1
- package/model-provider/openai/OpenAICostCalculator.js +1 -1
- package/model-provider/openai/OpenAIFacade.cjs +2 -2
- package/model-provider/openai/OpenAIFacade.d.ts +3 -3
- package/model-provider/openai/OpenAIFacade.js +2 -2
- package/model-provider/openai/OpenAITranscriptionModel.d.ts +6 -6
- package/model-provider/openai/TikTokenTokenizer.d.ts +1 -1
- package/model-provider/openai/{chat/countOpenAIChatMessageTokens.cjs → countOpenAIChatMessageTokens.cjs} +2 -2
- package/model-provider/openai/{chat/countOpenAIChatMessageTokens.js → countOpenAIChatMessageTokens.js} +2 -2
- package/model-provider/openai/index.cjs +6 -6
- package/model-provider/openai/index.d.ts +5 -6
- package/model-provider/openai/index.js +5 -5
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.cjs +4 -4
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.d.ts +6 -6
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.js +4 -4
- package/package.json +5 -5
- package/test/JsonTestServer.cjs +33 -0
- package/test/JsonTestServer.d.ts +7 -0
- package/test/JsonTestServer.js +29 -0
- package/test/StreamingTestServer.cjs +55 -0
- package/test/StreamingTestServer.d.ts +7 -0
- package/test/StreamingTestServer.js +51 -0
- package/test/arrayFromAsync.cjs +13 -0
- package/test/arrayFromAsync.d.ts +1 -0
- package/test/arrayFromAsync.js +9 -0
- package/util/streaming/createEventSourceResponseHandler.cjs +9 -0
- package/util/streaming/createEventSourceResponseHandler.d.ts +4 -0
- package/util/streaming/createEventSourceResponseHandler.js +5 -0
- package/util/streaming/createJsonStreamResponseHandler.cjs +9 -0
- package/util/streaming/createJsonStreamResponseHandler.d.ts +4 -0
- package/util/streaming/createJsonStreamResponseHandler.js +5 -0
- package/util/streaming/parseEventSourceStreamAsAsyncIterable.cjs +52 -0
- package/util/streaming/parseEventSourceStreamAsAsyncIterable.d.ts +6 -0
- package/util/streaming/parseEventSourceStreamAsAsyncIterable.js +48 -0
- package/util/streaming/parseJsonStreamAsAsyncIterable.cjs +21 -0
- package/util/streaming/parseJsonStreamAsAsyncIterable.d.ts +6 -0
- package/util/streaming/parseJsonStreamAsAsyncIterable.js +17 -0
- package/model-function/generate-text/prompt-template/Content.d.ts +0 -25
- package/model-provider/openai/chat/OpenAIChatModel.test.cjs +0 -61
- package/model-provider/openai/chat/OpenAIChatModel.test.js +0 -59
- package/model-provider/openai/chat/OpenAIChatPromptTemplate.cjs +0 -70
- package/model-provider/openai/chat/OpenAIChatPromptTemplate.js +0 -63
- package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +0 -156
- package/model-provider/openai/chat/OpenAIChatStreamIterable.d.ts +0 -19
- package/model-provider/openai/chat/OpenAIChatStreamIterable.js +0 -152
- /package/model-provider/{openai/chat/OpenAIChatModel.test.d.ts → anthropic/AnthropicTextGenerationModel.test.d.ts} +0 -0
- /package/model-provider/openai/{chat/OpenAIChatMessage.cjs → OpenAIChatMessage.cjs} +0 -0
- /package/model-provider/openai/{chat/OpenAIChatMessage.js → OpenAIChatMessage.js} +0 -0
- /package/model-provider/openai/{chat/countOpenAIChatMessageTokens.d.ts → countOpenAIChatMessageTokens.d.ts} +0 -0
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.chat = exports.instruction = exports.text = void 0;
|
4
|
-
const
|
4
|
+
const ContentPart_js_1 = require("./ContentPart.cjs");
|
5
|
+
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
5
6
|
const START_SEGMENT = "<|im_start|>";
|
6
7
|
const END_SEGMENT = "<|im_end|>";
|
7
8
|
function segmentStart(role) {
|
@@ -40,7 +41,7 @@ function instruction() {
|
|
40
41
|
return {
|
41
42
|
stopSequences: [END_SEGMENT],
|
42
43
|
format(prompt) {
|
43
|
-
const instruction = (0,
|
44
|
+
const instruction = (0, ContentPart_js_1.validateContentIsString)(prompt.instruction, prompt);
|
44
45
|
return (segment("system", prompt.system) +
|
45
46
|
segment("user", instruction) +
|
46
47
|
segmentStart("assistant") +
|
@@ -69,14 +70,16 @@ function chat() {
|
|
69
70
|
for (const { role, content } of prompt.messages) {
|
70
71
|
switch (role) {
|
71
72
|
case "user": {
|
72
|
-
|
73
|
-
text += segment("user", textContent);
|
73
|
+
text += segment("user", (0, ContentPart_js_1.validateContentIsString)(content, prompt));
|
74
74
|
break;
|
75
75
|
}
|
76
76
|
case "assistant": {
|
77
|
-
text += segment("assistant", content);
|
77
|
+
text += segment("assistant", (0, ContentPart_js_1.validateContentIsString)(content, prompt));
|
78
78
|
break;
|
79
79
|
}
|
80
|
+
case "tool": {
|
81
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Tool messages are not supported.", prompt);
|
82
|
+
}
|
80
83
|
default: {
|
81
84
|
const _exhaustiveCheck = role;
|
82
85
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import { validateContentIsString } from "./
|
1
|
+
import { validateContentIsString } from "./ContentPart.js";
|
2
|
+
import { InvalidPromptError } from "./InvalidPromptError.js";
|
2
3
|
const START_SEGMENT = "<|im_start|>";
|
3
4
|
const END_SEGMENT = "<|im_end|>";
|
4
5
|
function segmentStart(role) {
|
@@ -64,14 +65,16 @@ export function chat() {
|
|
64
65
|
for (const { role, content } of prompt.messages) {
|
65
66
|
switch (role) {
|
66
67
|
case "user": {
|
67
|
-
|
68
|
-
text += segment("user", textContent);
|
68
|
+
text += segment("user", validateContentIsString(content, prompt));
|
69
69
|
break;
|
70
70
|
}
|
71
71
|
case "assistant": {
|
72
|
-
text += segment("assistant", content);
|
72
|
+
text += segment("assistant", validateContentIsString(content, prompt));
|
73
73
|
break;
|
74
74
|
}
|
75
|
+
case "tool": {
|
76
|
+
throw new InvalidPromptError("Tool messages are not supported.", prompt);
|
77
|
+
}
|
75
78
|
default: {
|
76
79
|
const _exhaustiveCheck = role;
|
77
80
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,2 +1,44 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ChatMessage = void 0;
|
4
|
+
exports.ChatMessage = {
|
5
|
+
user({ text }) {
|
6
|
+
return {
|
7
|
+
role: "user",
|
8
|
+
content: text,
|
9
|
+
};
|
10
|
+
},
|
11
|
+
tool({ toolResults, }) {
|
12
|
+
return {
|
13
|
+
role: "tool",
|
14
|
+
content: createToolContent({ toolResults }),
|
15
|
+
};
|
16
|
+
},
|
17
|
+
assistant({ text, toolResults, }) {
|
18
|
+
return {
|
19
|
+
role: "assistant",
|
20
|
+
content: createAssistantContent({ text, toolResults }),
|
21
|
+
};
|
22
|
+
},
|
23
|
+
};
|
24
|
+
function createToolContent({ toolResults, }) {
|
25
|
+
const toolContent = [];
|
26
|
+
for (const { result, toolCall } of toolResults ?? []) {
|
27
|
+
toolContent.push({
|
28
|
+
type: "tool-response",
|
29
|
+
id: toolCall.id,
|
30
|
+
response: result,
|
31
|
+
});
|
32
|
+
}
|
33
|
+
return toolContent;
|
34
|
+
}
|
35
|
+
function createAssistantContent({ text, toolResults, }) {
|
36
|
+
const content = [];
|
37
|
+
if (text != null) {
|
38
|
+
content.push({ type: "text", text });
|
39
|
+
}
|
40
|
+
for (const { toolCall } of toolResults ?? []) {
|
41
|
+
content.push({ type: "tool-call", ...toolCall });
|
42
|
+
}
|
43
|
+
return content;
|
44
|
+
}
|
@@ -1,10 +1,14 @@
|
|
1
|
-
import {
|
1
|
+
import { ToolCallResult } from "../../../tool/ToolCallResult.js";
|
2
|
+
import { ImagePart, TextPart, ToolCallPart, ToolResponsePart } from "./ContentPart.js";
|
2
3
|
/**
|
3
|
-
* A chat prompt is a combination of a system message and a list
|
4
|
+
* A chat prompt is a combination of a system message and a list
|
5
|
+
* of user, assistant, and tool messages.
|
4
6
|
*
|
5
7
|
* The user messages can contain multi-modal content.
|
8
|
+
* The assistant messages can contain tool calls.
|
6
9
|
*
|
7
|
-
* Note: Not all models and prompt formats support multi-modal inputs.
|
10
|
+
* Note: Not all models and prompt formats support multi-modal inputs and tool calls.
|
11
|
+
* The validation happens at runtime.
|
8
12
|
*
|
9
13
|
* @example
|
10
14
|
* ```ts
|
@@ -22,6 +26,9 @@ export interface ChatPrompt {
|
|
22
26
|
system?: string;
|
23
27
|
messages: Array<ChatMessage>;
|
24
28
|
}
|
29
|
+
export type UserContent = string | Array<TextPart | ImagePart>;
|
30
|
+
export type AssistantContent = string | Array<TextPart | ToolCallPart>;
|
31
|
+
export type ToolContent = Array<ToolResponsePart>;
|
25
32
|
/**
|
26
33
|
* A message in a chat prompt.
|
27
34
|
*
|
@@ -29,8 +36,23 @@ export interface ChatPrompt {
|
|
29
36
|
*/
|
30
37
|
export type ChatMessage = {
|
31
38
|
role: "user";
|
32
|
-
content:
|
39
|
+
content: UserContent;
|
33
40
|
} | {
|
34
41
|
role: "assistant";
|
35
|
-
content:
|
42
|
+
content: AssistantContent;
|
43
|
+
} | {
|
44
|
+
role: "tool";
|
45
|
+
content: ToolContent;
|
46
|
+
};
|
47
|
+
export declare const ChatMessage: {
|
48
|
+
user({ text }: {
|
49
|
+
text: string;
|
50
|
+
}): ChatMessage;
|
51
|
+
tool({ toolResults, }: {
|
52
|
+
toolResults: ToolCallResult<string, unknown, unknown>[] | null;
|
53
|
+
}): ChatMessage;
|
54
|
+
assistant({ text, toolResults, }: {
|
55
|
+
text: string | null;
|
56
|
+
toolResults: ToolCallResult<string, unknown, unknown>[] | null;
|
57
|
+
}): ChatMessage;
|
36
58
|
};
|
@@ -1 +1,41 @@
|
|
1
|
-
export {
|
1
|
+
export const ChatMessage = {
|
2
|
+
user({ text }) {
|
3
|
+
return {
|
4
|
+
role: "user",
|
5
|
+
content: text,
|
6
|
+
};
|
7
|
+
},
|
8
|
+
tool({ toolResults, }) {
|
9
|
+
return {
|
10
|
+
role: "tool",
|
11
|
+
content: createToolContent({ toolResults }),
|
12
|
+
};
|
13
|
+
},
|
14
|
+
assistant({ text, toolResults, }) {
|
15
|
+
return {
|
16
|
+
role: "assistant",
|
17
|
+
content: createAssistantContent({ text, toolResults }),
|
18
|
+
};
|
19
|
+
},
|
20
|
+
};
|
21
|
+
function createToolContent({ toolResults, }) {
|
22
|
+
const toolContent = [];
|
23
|
+
for (const { result, toolCall } of toolResults ?? []) {
|
24
|
+
toolContent.push({
|
25
|
+
type: "tool-response",
|
26
|
+
id: toolCall.id,
|
27
|
+
response: result,
|
28
|
+
});
|
29
|
+
}
|
30
|
+
return toolContent;
|
31
|
+
}
|
32
|
+
function createAssistantContent({ text, toolResults, }) {
|
33
|
+
const content = [];
|
34
|
+
if (text != null) {
|
35
|
+
content.push({ type: "text", text });
|
36
|
+
}
|
37
|
+
for (const { toolCall } of toolResults ?? []) {
|
38
|
+
content.push({ type: "tool-call", ...toolCall });
|
39
|
+
}
|
40
|
+
return content;
|
41
|
+
}
|
@@ -4,7 +4,7 @@ exports.validateContentIsString = void 0;
|
|
4
4
|
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
5
5
|
function validateContentIsString(content, prompt) {
|
6
6
|
if (typeof content !== "string") {
|
7
|
-
throw new InvalidPromptError_js_1.InvalidPromptError("
|
7
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Only text prompts are are supported by this prompt template.", prompt);
|
8
8
|
}
|
9
9
|
return content;
|
10
10
|
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
export interface TextPart {
|
2
|
+
type: "text";
|
3
|
+
/**
|
4
|
+
* The text content.
|
5
|
+
*/
|
6
|
+
text: string;
|
7
|
+
}
|
8
|
+
export interface ImagePart {
|
9
|
+
type: "image";
|
10
|
+
/**
|
11
|
+
* Base-64 encoded image.
|
12
|
+
*/
|
13
|
+
base64Image: string;
|
14
|
+
/**
|
15
|
+
* Optional mime type of the image.
|
16
|
+
*/
|
17
|
+
mimeType?: string;
|
18
|
+
}
|
19
|
+
export interface ToolCallPart {
|
20
|
+
type: "tool-call";
|
21
|
+
id: string;
|
22
|
+
name: string;
|
23
|
+
args: unknown;
|
24
|
+
}
|
25
|
+
export interface ToolResponsePart {
|
26
|
+
type: "tool-response";
|
27
|
+
id: string;
|
28
|
+
response: unknown;
|
29
|
+
}
|
30
|
+
export declare function validateContentIsString(content: string | unknown, prompt: unknown): string;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { InvalidPromptError } from "./InvalidPromptError.js";
|
2
2
|
export function validateContentIsString(content, prompt) {
|
3
3
|
if (typeof content !== "string") {
|
4
|
-
throw new InvalidPromptError("
|
4
|
+
throw new InvalidPromptError("Only text prompts are are supported by this prompt template.", prompt);
|
5
5
|
}
|
6
6
|
return content;
|
7
7
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { ImagePart, TextPart } from "./ContentPart";
|
2
2
|
/**
|
3
3
|
* A single text instruction prompt. It can contain an optional system message to define
|
4
4
|
* the role and behavior of the language model.
|
@@ -22,10 +22,11 @@ export interface InstructionPrompt {
|
|
22
22
|
/**
|
23
23
|
* The instruction for the model.
|
24
24
|
*/
|
25
|
-
instruction:
|
25
|
+
instruction: InstructionContent;
|
26
26
|
/**
|
27
27
|
* Response prefix that will be injected in the prompt at the beginning of the response.
|
28
28
|
* This is useful for guiding the model by starting its response with a specific text.
|
29
29
|
*/
|
30
30
|
responsePrefix?: string;
|
31
31
|
}
|
32
|
+
export type InstructionContent = string | Array<TextPart | ImagePart>;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.validateLlama2Prompt = exports.chat = exports.instruction = exports.text = void 0;
|
4
|
-
const
|
4
|
+
const ContentPart_js_1 = require("./ContentPart.cjs");
|
5
5
|
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
6
6
|
// see https://github.com/facebookresearch/llama/blob/6c7fe276574e78057f917549435a2554000a876d/llama/generation.py#L44
|
7
7
|
const BEGIN_SEGMENT = "<s>";
|
@@ -48,7 +48,7 @@ function instruction() {
|
|
48
48
|
return {
|
49
49
|
stopSequences: [END_SEGMENT],
|
50
50
|
format(prompt) {
|
51
|
-
const instruction = (0,
|
51
|
+
const instruction = (0, ContentPart_js_1.validateContentIsString)(prompt.instruction, prompt);
|
52
52
|
return `${BEGIN_SEGMENT}${BEGIN_INSTRUCTION}${prompt.system != null
|
53
53
|
? `${BEGIN_SYSTEM}${prompt.system}${END_SYSTEM}`
|
54
54
|
: ""}${instruction}${END_INSTRUCTION}${prompt.responsePrefix ?? ""}`;
|
@@ -80,14 +80,17 @@ function chat() {
|
|
80
80
|
for (const { role, content } of prompt.messages) {
|
81
81
|
switch (role) {
|
82
82
|
case "user": {
|
83
|
-
const textContent = (0,
|
83
|
+
const textContent = (0, ContentPart_js_1.validateContentIsString)(content, prompt);
|
84
84
|
text += `${BEGIN_SEGMENT}${BEGIN_INSTRUCTION}${textContent}${END_INSTRUCTION}`;
|
85
85
|
break;
|
86
86
|
}
|
87
87
|
case "assistant": {
|
88
|
-
text += `${content}${END_SEGMENT}`;
|
88
|
+
text += `${(0, ContentPart_js_1.validateContentIsString)(content, prompt)}${END_SEGMENT}`;
|
89
89
|
break;
|
90
90
|
}
|
91
|
+
case "tool": {
|
92
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Tool messages are not supported.", prompt);
|
93
|
+
}
|
91
94
|
default: {
|
92
95
|
const _exhaustiveCheck = role;
|
93
96
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { validateContentIsString } from "./
|
1
|
+
import { validateContentIsString } from "./ContentPart.js";
|
2
2
|
import { InvalidPromptError } from "./InvalidPromptError.js";
|
3
3
|
// see https://github.com/facebookresearch/llama/blob/6c7fe276574e78057f917549435a2554000a876d/llama/generation.py#L44
|
4
4
|
const BEGIN_SEGMENT = "<s>";
|
@@ -80,9 +80,12 @@ export function chat() {
|
|
80
80
|
break;
|
81
81
|
}
|
82
82
|
case "assistant": {
|
83
|
-
text += `${content}${END_SEGMENT}`;
|
83
|
+
text += `${validateContentIsString(content, prompt)}${END_SEGMENT}`;
|
84
84
|
break;
|
85
85
|
}
|
86
|
+
case "tool": {
|
87
|
+
throw new InvalidPromptError("Tool messages are not supported.", prompt);
|
88
|
+
}
|
86
89
|
default: {
|
87
90
|
const _exhaustiveCheck = role;
|
88
91
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.chat = exports.instruction = exports.text = void 0;
|
4
|
-
const
|
4
|
+
const ContentPart_js_1 = require("./ContentPart.cjs");
|
5
|
+
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
5
6
|
const roleNames = {
|
6
7
|
system: "System",
|
7
8
|
user: "User",
|
@@ -36,7 +37,7 @@ exports.text = text;
|
|
36
37
|
const instruction = () => ({
|
37
38
|
stopSequences: [],
|
38
39
|
format(prompt) {
|
39
|
-
const instruction = (0,
|
40
|
+
const instruction = (0, ContentPart_js_1.validateContentIsString)(prompt.instruction, prompt);
|
40
41
|
return (segment("system", prompt.system) +
|
41
42
|
segment("user", instruction) +
|
42
43
|
segmentStart("assistant") +
|
@@ -58,14 +59,17 @@ function chat() {
|
|
58
59
|
for (const { role, content } of prompt.messages) {
|
59
60
|
switch (role) {
|
60
61
|
case "user": {
|
61
|
-
const textContent = (0,
|
62
|
+
const textContent = (0, ContentPart_js_1.validateContentIsString)(content, prompt);
|
62
63
|
text += segment("user", textContent);
|
63
64
|
break;
|
64
65
|
}
|
65
66
|
case "assistant": {
|
66
|
-
text += segment("assistant", content);
|
67
|
+
text += segment("assistant", (0, ContentPart_js_1.validateContentIsString)(content, prompt));
|
67
68
|
break;
|
68
69
|
}
|
70
|
+
case "tool": {
|
71
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Tool messages are not supported.", prompt);
|
72
|
+
}
|
69
73
|
default: {
|
70
74
|
const _exhaustiveCheck = role;
|
71
75
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import { validateContentIsString } from "./
|
1
|
+
import { validateContentIsString } from "./ContentPart.js";
|
2
|
+
import { InvalidPromptError } from "./InvalidPromptError.js";
|
2
3
|
const roleNames = {
|
3
4
|
system: "System",
|
4
5
|
user: "User",
|
@@ -58,9 +59,12 @@ export function chat() {
|
|
58
59
|
break;
|
59
60
|
}
|
60
61
|
case "assistant": {
|
61
|
-
text += segment("assistant", content);
|
62
|
+
text += segment("assistant", validateContentIsString(content, prompt));
|
62
63
|
break;
|
63
64
|
}
|
65
|
+
case "tool": {
|
66
|
+
throw new InvalidPromptError("Tool messages are not supported.", prompt);
|
67
|
+
}
|
64
68
|
default: {
|
65
69
|
const _exhaustiveCheck = role;
|
66
70
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.chat = exports.instruction = exports.text = void 0;
|
4
|
-
const
|
4
|
+
const ContentPart_js_1 = require("./ContentPart.cjs");
|
5
|
+
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
5
6
|
/**
|
6
7
|
* Formats a text prompt as a basic text prompt. Does not change the text prompt in any way.
|
7
8
|
*/
|
@@ -20,7 +21,7 @@ const instruction = () => ({
|
|
20
21
|
if (prompt.system != null) {
|
21
22
|
text += `${prompt.system}\n\n`;
|
22
23
|
}
|
23
|
-
text += `${(0,
|
24
|
+
text += `${(0, ContentPart_js_1.validateContentIsString)(prompt.instruction, prompt)}\n\n`;
|
24
25
|
if (prompt.responsePrefix != null) {
|
25
26
|
text += prompt.responsePrefix;
|
26
27
|
}
|
@@ -43,13 +44,16 @@ const chat = ({ user = "user", assistant = "assistant", system, } = {}) => ({
|
|
43
44
|
for (const { role, content } of prompt.messages) {
|
44
45
|
switch (role) {
|
45
46
|
case "user": {
|
46
|
-
text += `${user}:\n${(0,
|
47
|
+
text += `${user}:\n${(0, ContentPart_js_1.validateContentIsString)(content, prompt)}\n\n`;
|
47
48
|
break;
|
48
49
|
}
|
49
50
|
case "assistant": {
|
50
|
-
text += `${assistant}:\n${content}\n\n`;
|
51
|
+
text += `${assistant}:\n${(0, ContentPart_js_1.validateContentIsString)(content, prompt)}\n\n`;
|
51
52
|
break;
|
52
53
|
}
|
54
|
+
case "tool": {
|
55
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Tool messages are not supported.", prompt);
|
56
|
+
}
|
53
57
|
default: {
|
54
58
|
const _exhaustiveCheck = role;
|
55
59
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import { validateContentIsString } from "./
|
1
|
+
import { validateContentIsString } from "./ContentPart.js";
|
2
|
+
import { InvalidPromptError } from "./InvalidPromptError.js";
|
2
3
|
/**
|
3
4
|
* Formats a text prompt as a basic text prompt. Does not change the text prompt in any way.
|
4
5
|
*/
|
@@ -42,9 +43,12 @@ export const chat = ({ user = "user", assistant = "assistant", system, } = {}) =
|
|
42
43
|
break;
|
43
44
|
}
|
44
45
|
case "assistant": {
|
45
|
-
text += `${assistant}:\n${content}\n\n`;
|
46
|
+
text += `${assistant}:\n${validateContentIsString(content, prompt)}\n\n`;
|
46
47
|
break;
|
47
48
|
}
|
49
|
+
case "tool": {
|
50
|
+
throw new InvalidPromptError("Tool messages are not supported.", prompt);
|
51
|
+
}
|
48
52
|
default: {
|
49
53
|
const _exhaustiveCheck = role;
|
50
54
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,7 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.chat = void 0;
|
4
|
-
const
|
4
|
+
const ContentPart_js_1 = require("./ContentPart.cjs");
|
5
|
+
const InvalidPromptError_js_1 = require("./InvalidPromptError.cjs");
|
5
6
|
// default Vicuna 1 system message
|
6
7
|
const DEFAULT_SYSTEM_MESSAGE = "A chat between a curious user and an artificial intelligence assistant. " +
|
7
8
|
"The assistant gives helpful, detailed, and polite answers to the user's questions.";
|
@@ -27,14 +28,17 @@ function chat() {
|
|
27
28
|
for (const { role, content } of prompt.messages) {
|
28
29
|
switch (role) {
|
29
30
|
case "user": {
|
30
|
-
const textContent = (0,
|
31
|
+
const textContent = (0, ContentPart_js_1.validateContentIsString)(content, prompt);
|
31
32
|
text += `USER: ${textContent}\n`;
|
32
33
|
break;
|
33
34
|
}
|
34
35
|
case "assistant": {
|
35
|
-
text += `ASSISTANT: ${content}\n`;
|
36
|
+
text += `ASSISTANT: ${(0, ContentPart_js_1.validateContentIsString)(content, prompt)}\n`;
|
36
37
|
break;
|
37
38
|
}
|
39
|
+
case "tool": {
|
40
|
+
throw new InvalidPromptError_js_1.InvalidPromptError("Tool messages are not supported.", prompt);
|
41
|
+
}
|
38
42
|
default: {
|
39
43
|
const _exhaustiveCheck = role;
|
40
44
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import { validateContentIsString } from "./
|
1
|
+
import { validateContentIsString } from "./ContentPart.js";
|
2
|
+
import { InvalidPromptError } from "./InvalidPromptError.js";
|
2
3
|
// default Vicuna 1 system message
|
3
4
|
const DEFAULT_SYSTEM_MESSAGE = "A chat between a curious user and an artificial intelligence assistant. " +
|
4
5
|
"The assistant gives helpful, detailed, and polite answers to the user's questions.";
|
@@ -29,9 +30,12 @@ export function chat() {
|
|
29
30
|
break;
|
30
31
|
}
|
31
32
|
case "assistant": {
|
32
|
-
text += `ASSISTANT: ${content}\n`;
|
33
|
+
text += `ASSISTANT: ${validateContentIsString(content, prompt)}\n`;
|
33
34
|
break;
|
34
35
|
}
|
36
|
+
case "tool": {
|
37
|
+
throw new InvalidPromptError("Tool messages are not supported.", prompt);
|
38
|
+
}
|
35
39
|
default: {
|
36
40
|
const _exhaustiveCheck = role;
|
37
41
|
throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
|
@@ -30,7 +30,7 @@ exports.VicunaPrompt = exports.TextPrompt = exports.NeuralChatPrompt = exports.L
|
|
30
30
|
exports.AlpacaPrompt = __importStar(require("./AlpacaPromptTemplate.cjs"));
|
31
31
|
exports.ChatMLPrompt = __importStar(require("./ChatMLPromptTemplate.cjs"));
|
32
32
|
__exportStar(require("./ChatPrompt.cjs"), exports);
|
33
|
-
__exportStar(require("./
|
33
|
+
__exportStar(require("./ContentPart.cjs"), exports);
|
34
34
|
__exportStar(require("./InstructionPrompt.cjs"), exports);
|
35
35
|
__exportStar(require("./InvalidPromptError.cjs"), exports);
|
36
36
|
exports.Llama2Prompt = __importStar(require("./Llama2PromptTemplate.cjs"));
|
@@ -1,7 +1,7 @@
|
|
1
1
|
export * as AlpacaPrompt from "./AlpacaPromptTemplate.js";
|
2
2
|
export * as ChatMLPrompt from "./ChatMLPromptTemplate.js";
|
3
3
|
export * from "./ChatPrompt.js";
|
4
|
-
export * from "./
|
4
|
+
export * from "./ContentPart.js";
|
5
5
|
export * from "./InstructionPrompt.js";
|
6
6
|
export * from "./InvalidPromptError.js";
|
7
7
|
export * as Llama2Prompt from "./Llama2PromptTemplate.js";
|
@@ -1,7 +1,7 @@
|
|
1
1
|
export * as AlpacaPrompt from "./AlpacaPromptTemplate.js";
|
2
2
|
export * as ChatMLPrompt from "./ChatMLPromptTemplate.js";
|
3
3
|
export * from "./ChatPrompt.js";
|
4
|
-
export * from "./
|
4
|
+
export * from "./ContentPart.js";
|
5
5
|
export * from "./InstructionPrompt.js";
|
6
6
|
export * from "./InvalidPromptError.js";
|
7
7
|
export * as Llama2Prompt from "./Llama2PromptTemplate.js";
|
@@ -5,9 +5,12 @@ const executeStreamCall_js_1 = require("../executeStreamCall.cjs");
|
|
5
5
|
async function streamText(model, prompt, options) {
|
6
6
|
const shouldTrimWhitespace = model.settings.trimWhitespace ?? true;
|
7
7
|
let accumulatedText = "";
|
8
|
-
let lastFullDelta;
|
9
8
|
let isFirstDelta = true;
|
10
9
|
let trailingWhitespace = "";
|
10
|
+
let resolveText;
|
11
|
+
const textPromise = new Promise((resolve) => {
|
12
|
+
resolveText = resolve;
|
13
|
+
});
|
11
14
|
const fullResponse = await (0, executeStreamCall_js_1.executeStreamCall)({
|
12
15
|
functionType: "stream-text",
|
13
16
|
input: prompt,
|
@@ -15,39 +18,35 @@ async function streamText(model, prompt, options) {
|
|
15
18
|
options,
|
16
19
|
startStream: async (options) => model.doStreamText(prompt, options),
|
17
20
|
processDelta: (delta) => {
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
: "";
|
35
|
-
textDelta = textDelta.trimEnd();
|
36
|
-
}
|
37
|
-
isFirstDelta = false;
|
38
|
-
accumulatedText += textDelta;
|
39
|
-
return textDelta;
|
21
|
+
let textDelta = model.extractTextDelta(delta.deltaValue);
|
22
|
+
if (textDelta == null || textDelta.length === 0) {
|
23
|
+
return undefined;
|
24
|
+
}
|
25
|
+
if (shouldTrimWhitespace) {
|
26
|
+
textDelta = isFirstDelta
|
27
|
+
? // remove leading whitespace:
|
28
|
+
textDelta.trimStart()
|
29
|
+
: // restore trailing whitespace from previous chunk:
|
30
|
+
trailingWhitespace + textDelta;
|
31
|
+
// trim trailing whitespace and store it for the next chunk:
|
32
|
+
const trailingWhitespaceMatch = textDelta.match(/\s+$/);
|
33
|
+
trailingWhitespace = trailingWhitespaceMatch
|
34
|
+
? trailingWhitespaceMatch[0]
|
35
|
+
: "";
|
36
|
+
textDelta = textDelta.trimEnd();
|
40
37
|
}
|
41
|
-
|
38
|
+
isFirstDelta = false;
|
39
|
+
accumulatedText += textDelta;
|
40
|
+
return textDelta;
|
41
|
+
},
|
42
|
+
onDone: () => {
|
43
|
+
resolveText(accumulatedText);
|
42
44
|
},
|
43
|
-
getResult: () => ({
|
44
|
-
response: lastFullDelta,
|
45
|
-
value: accumulatedText,
|
46
|
-
}),
|
47
45
|
});
|
48
46
|
return options?.fullResponse
|
49
47
|
? {
|
50
48
|
textStream: fullResponse.value,
|
49
|
+
text: textPromise,
|
51
50
|
metadata: fullResponse.metadata,
|
52
51
|
}
|
53
52
|
: fullResponse.value;
|
@@ -33,5 +33,6 @@ export declare function streamText<PROMPT>(model: TextStreamingModel<PROMPT>, pr
|
|
33
33
|
fullResponse: true;
|
34
34
|
}): Promise<{
|
35
35
|
textStream: AsyncIterable<string>;
|
36
|
+
text: PromiseLike<string>;
|
36
37
|
metadata: Omit<ModelCallMetadata, "durationInMs" | "finishTimestamp">;
|
37
38
|
}>;
|