modelfusion 0.40.0 → 0.41.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 +14 -7
- package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.d.ts +3 -3
- package/core/FunctionEvent.d.ts +1 -1
- package/model-function/AsyncIterableResultPromise.d.ts +1 -1
- package/model-function/Delta.d.ts +8 -0
- package/model-function/ModelCallEvent.d.ts +1 -1
- package/model-function/ModelCallMetadata.d.ts +13 -0
- package/model-function/describe-image/ImageDescriptionEvent.d.ts +1 -1
- package/model-function/describe-image/ImageDescriptionModel.d.ts +6 -4
- package/model-function/describe-image/describeImage.cjs +7 -2
- package/model-function/describe-image/describeImage.d.ts +2 -2
- package/model-function/describe-image/describeImage.js +7 -2
- package/model-function/embed/EmbeddingEvent.d.ts +1 -1
- package/model-function/embed/EmbeddingModel.d.ts +6 -4
- package/model-function/embed/embed.cjs +16 -11
- package/model-function/embed/embed.d.ts +3 -3
- package/model-function/embed/embed.js +16 -11
- package/model-function/executeCall.cjs +26 -30
- package/model-function/executeCall.d.ts +19 -28
- package/model-function/executeCall.js +26 -30
- package/model-function/generate-image/ImageGenerationEvent.d.ts +1 -1
- package/model-function/generate-image/ImageGenerationModel.d.ts +6 -4
- package/model-function/generate-image/generateImage.cjs +7 -2
- package/model-function/generate-image/generateImage.d.ts +2 -2
- package/model-function/generate-image/generateImage.js +7 -2
- package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +6 -5
- package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +7 -5
- package/model-function/generate-structure/StructureFromTextGenerationModel.js +6 -5
- package/model-function/generate-structure/StructureGenerationEvent.d.ts +1 -1
- package/model-function/generate-structure/StructureGenerationModel.d.ts +15 -18
- package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +19 -17
- package/model-function/generate-structure/generateStructure.cjs +10 -8
- package/model-function/generate-structure/generateStructure.d.ts +2 -2
- package/model-function/generate-structure/generateStructure.js +10 -8
- package/model-function/generate-structure/generateStructureOrText.cjs +15 -8
- package/model-function/generate-structure/generateStructureOrText.d.ts +4 -4
- package/model-function/generate-structure/generateStructureOrText.js +15 -8
- package/model-function/generate-structure/streamStructure.cjs +4 -16
- package/model-function/generate-structure/streamStructure.d.ts +3 -7
- package/model-function/generate-structure/streamStructure.js +4 -16
- package/model-function/generate-text/TextGenerationEvent.d.ts +1 -1
- package/model-function/generate-text/TextGenerationModel.d.ts +18 -19
- package/model-function/generate-text/generateText.cjs +8 -9
- package/model-function/generate-text/generateText.d.ts +2 -2
- package/model-function/generate-text/generateText.js +8 -9
- package/model-function/generate-text/streamText.cjs +8 -21
- package/model-function/generate-text/streamText.d.ts +3 -7
- package/model-function/generate-text/streamText.js +8 -21
- package/model-function/index.cjs +2 -2
- package/model-function/index.d.ts +2 -2
- package/model-function/index.js +2 -2
- package/model-function/synthesize-speech/SpeechSynthesisEvent.d.ts +1 -1
- package/model-function/synthesize-speech/SpeechSynthesisModel.d.ts +3 -3
- package/model-function/synthesize-speech/synthesizeSpeech.cjs +7 -2
- package/model-function/synthesize-speech/synthesizeSpeech.d.ts +2 -2
- package/model-function/synthesize-speech/synthesizeSpeech.js +7 -2
- package/model-function/transcribe-speech/TranscriptionEvent.d.ts +1 -1
- package/model-function/transcribe-speech/TranscriptionModel.d.ts +6 -4
- package/model-function/transcribe-speech/transcribe.cjs +7 -2
- package/model-function/transcribe-speech/transcribe.d.ts +2 -2
- package/model-function/transcribe-speech/transcribe.js +7 -2
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +14 -18
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +11 -9
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +14 -18
- package/model-provider/cohere/CohereTextEmbeddingModel.cjs +13 -16
- package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +12 -10
- package/model-provider/cohere/CohereTextEmbeddingModel.js +13 -16
- package/model-provider/cohere/CohereTextGenerationModel.cjs +29 -29
- package/model-provider/cohere/CohereTextGenerationModel.d.ts +24 -22
- package/model-provider/cohere/CohereTextGenerationModel.js +29 -29
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.cjs +10 -17
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.d.ts +2 -2
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.js +10 -17
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.cjs +13 -16
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.d.ts +9 -7
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.js +13 -16
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +19 -25
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +8 -6
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +19 -25
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +18 -24
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +10 -8
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +18 -24
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +13 -16
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +8 -6
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +13 -16
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +31 -34
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +62 -60
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +31 -34
- package/model-provider/lmnt/LmntSpeechSynthesisModel.cjs +7 -12
- package/model-provider/lmnt/LmntSpeechSynthesisModel.d.ts +2 -2
- package/model-provider/lmnt/LmntSpeechSynthesisModel.js +7 -12
- package/model-provider/openai/OpenAIImageGenerationModel.cjs +8 -16
- package/model-provider/openai/OpenAIImageGenerationModel.d.ts +11 -11
- package/model-provider/openai/OpenAIImageGenerationModel.js +8 -16
- package/model-provider/openai/OpenAITextEmbeddingModel.cjs +18 -24
- package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +18 -16
- package/model-provider/openai/OpenAITextEmbeddingModel.js +18 -24
- package/model-provider/openai/OpenAITextGenerationModel.cjs +23 -27
- package/model-provider/openai/OpenAITextGenerationModel.d.ts +31 -33
- package/model-provider/openai/OpenAITextGenerationModel.js +23 -27
- package/model-provider/openai/OpenAITranscriptionModel.cjs +19 -28
- package/model-provider/openai/OpenAITranscriptionModel.d.ts +27 -7
- package/model-provider/openai/OpenAITranscriptionModel.js +19 -28
- package/model-provider/openai/chat/OpenAIChatModel.cjs +82 -86
- package/model-provider/openai/chat/OpenAIChatModel.d.ts +127 -50
- package/model-provider/openai/chat/OpenAIChatModel.js +83 -87
- package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +4 -3
- package/model-provider/openai/chat/OpenAIChatStreamIterable.d.ts +2 -2
- package/model-provider/openai/chat/OpenAIChatStreamIterable.js +2 -1
- package/model-provider/stability/StabilityImageGenerationModel.cjs +16 -21
- package/model-provider/stability/StabilityImageGenerationModel.d.ts +13 -11
- package/model-provider/stability/StabilityImageGenerationModel.js +16 -21
- package/package.json +1 -1
- package/prompt/PromptFormatTextGenerationModel.cjs +6 -19
- package/prompt/PromptFormatTextGenerationModel.d.ts +14 -10
- package/prompt/PromptFormatTextGenerationModel.js +6 -19
- package/prompt/PromptFormatTextStreamingModel.cjs +31 -0
- package/prompt/PromptFormatTextStreamingModel.d.ts +13 -0
- package/prompt/PromptFormatTextStreamingModel.js +27 -0
- package/prompt/chat/trimChatPrompt.d.ts +2 -2
- package/prompt/index.cjs +1 -0
- package/prompt/index.d.ts +1 -0
- package/prompt/index.js +1 -0
- package/retriever/Retriever.d.ts +3 -6
- package/retriever/retrieve.cjs +2 -2
- package/retriever/retrieve.d.ts +3 -3
- package/retriever/retrieve.js +2 -2
- package/tool/executeTool.cjs +2 -2
- package/tool/executeTool.js +2 -2
- package/tool/useTool.cjs +2 -4
- package/tool/useTool.d.ts +2 -2
- package/tool/useTool.js +2 -4
- package/tool/useToolOrGenerateText.d.ts +2 -2
- package/util/SafeResult.d.ts +1 -1
- package/util/runSafe.cjs +1 -1
- package/util/runSafe.js +1 -1
- package/vector-index/VectorIndexRetriever.cjs +0 -7
- package/vector-index/VectorIndexRetriever.d.ts +5 -5
- package/vector-index/VectorIndexRetriever.js +0 -7
- package/vector-index/upsertIntoVectorIndex.d.ts +4 -4
- package/model-function/DeltaEvent.d.ts +0 -7
- package/model-function/ModelFunctionOptions.d.ts +0 -4
- /package/model-function/{DeltaEvent.cjs → Delta.cjs} +0 -0
- /package/model-function/{DeltaEvent.js → Delta.js} +0 -0
- /package/model-function/{ModelFunctionOptions.cjs → ModelCallMetadata.cjs} +0 -0
- /package/model-function/{ModelFunctionOptions.js → ModelCallMetadata.js} +0 -0
package/README.md
CHANGED
@@ -114,9 +114,8 @@ const textStream = await streamText(
|
|
114
114
|
ModelFusion model functions return rich results that include the original response and metadata when you call `.asFullResponse()` before resolving the promise.
|
115
115
|
|
116
116
|
```ts
|
117
|
-
// access the full response and the metadata:
|
118
|
-
|
119
|
-
const { output, response, metadata } = await generateText(
|
117
|
+
// access the full response (needs to be typed) and the metadata:
|
118
|
+
const { value, response, metadata } = await generateText(
|
120
119
|
new OpenAITextGenerationModel({
|
121
120
|
model: "gpt-3.5-turbo-instruct",
|
122
121
|
maxCompletionTokens: 1000,
|
@@ -125,11 +124,12 @@ const { output, response, metadata } = await generateText(
|
|
125
124
|
"Write a short story about a robot learning to love:\n\n"
|
126
125
|
).asFullResponse();
|
127
126
|
|
128
|
-
|
127
|
+
console.log(metadata);
|
128
|
+
|
129
|
+
// cast to the response type:
|
130
|
+
for (const choice of (response as OpenAITextGenerationResponse).choices) {
|
129
131
|
console.log(choice.text);
|
130
132
|
}
|
131
|
-
|
132
|
-
console.log(`Duration: ${metadata.durationInMs}ms`);
|
133
133
|
```
|
134
134
|
|
135
135
|
### [Generate Structure](https://modelfusion.dev/guide/function/generate-structure#generatestructure)
|
@@ -381,6 +381,13 @@ Providers: [OpenAI (Dall·E)](https://modelfusion.dev/integration/model-provider
|
|
381
381
|
Create embeddings for text and other values. Embeddings are vectors that represent the essence of the values in the context of the model.
|
382
382
|
|
383
383
|
```ts
|
384
|
+
// embed single value:
|
385
|
+
const embedding = await embed(
|
386
|
+
new OpenAITextEmbeddingModel({ model: "text-embedding-ada-002" }),
|
387
|
+
"At first, Nox didn't know what to do with the pup."
|
388
|
+
);
|
389
|
+
|
390
|
+
// embed many values:
|
384
391
|
const embeddings = await embedMany(
|
385
392
|
new OpenAITextEmbeddingModel({ model: "text-embedding-ada-002" }),
|
386
393
|
[
|
@@ -456,7 +463,7 @@ Integrations: [Helicone](https://modelfusion.dev/integration/observability/helic
|
|
456
463
|
|
457
464
|
- [Model Functions](https://modelfusion.dev/guide/function/)
|
458
465
|
- [Generate and stream text](https://modelfusion.dev/guide/function/generate-text)
|
459
|
-
- [Generate structure](https://modelfusion.dev/guide/function/generate-structure)
|
466
|
+
- [Generate and stream structure](https://modelfusion.dev/guide/function/generate-structure)
|
460
467
|
- [Generate structure or text](https://modelfusion.dev/guide/function/generate-structure-or-text)
|
461
468
|
- [Embed Value](https://modelfusion.dev/guide/function/embed)
|
462
469
|
- [Tokenize Text](https://modelfusion.dev/guide/function/tokenize-text)
|
package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.d.ts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import { TextGenerationModel, TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
|
2
|
-
import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
|
3
1
|
import { Run } from "../../core/Run.js";
|
2
|
+
import { TextGenerationModel } from "../../model-function/generate-text/TextGenerationModel.js";
|
3
|
+
import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
|
4
4
|
/**
|
5
5
|
* Recursively summarizes a text using a text generation model, e.g. for summarization or text extraction.
|
6
6
|
* It automatically splits the text into optimal chunks that are small enough to be processed by the model,
|
@@ -8,7 +8,7 @@ import { Run } from "../../core/Run.js";
|
|
8
8
|
*/
|
9
9
|
export declare function summarizeRecursivelyWithTextGenerationAndTokenSplitting<PROMPT>({ text, model, prompt, tokenLimit, join, }: {
|
10
10
|
text: string;
|
11
|
-
model: TextGenerationModel<PROMPT
|
11
|
+
model: TextGenerationModel<PROMPT> & {
|
12
12
|
contextWindowSize: number;
|
13
13
|
tokenizer: FullTokenizer;
|
14
14
|
countPromptTokens: (prompt: PROMPT) => PromiseLike<number>;
|
package/core/FunctionEvent.d.ts
CHANGED
@@ -23,7 +23,7 @@ export interface BaseModelCallStartedEvent extends BaseFunctionStartedEvent {
|
|
23
23
|
export type BaseModelCallFinishedEventResult = {
|
24
24
|
status: "success";
|
25
25
|
response: unknown;
|
26
|
-
|
26
|
+
value: unknown;
|
27
27
|
/**
|
28
28
|
* Optional usage information for the model call. The type depends on the call type.
|
29
29
|
*/
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { ModelInformation } from "./ModelInformation.js";
|
2
|
+
export type ModelCallMetadata = {
|
3
|
+
model: ModelInformation;
|
4
|
+
callId: string;
|
5
|
+
runId?: string;
|
6
|
+
sessionId?: string;
|
7
|
+
userId?: string;
|
8
|
+
functionId?: string;
|
9
|
+
startTimestamp: Date;
|
10
|
+
finishTimestamp: Date;
|
11
|
+
durationInMs: number;
|
12
|
+
usage?: unknown;
|
13
|
+
};
|
@@ -1,8 +1,10 @@
|
|
1
|
-
import {
|
1
|
+
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
2
2
|
import { Model, ModelSettings } from "../Model.js";
|
3
3
|
export interface ImageDescriptionModelSettings extends ModelSettings {
|
4
4
|
}
|
5
|
-
export interface ImageDescriptionModel<DATA,
|
6
|
-
|
7
|
-
|
5
|
+
export interface ImageDescriptionModel<DATA, SETTINGS extends ImageDescriptionModelSettings = ImageDescriptionModelSettings> extends Model<SETTINGS> {
|
6
|
+
doDescribeImage: (data: DATA, options?: FunctionOptions) => PromiseLike<{
|
7
|
+
response: unknown;
|
8
|
+
description: string;
|
9
|
+
}>;
|
8
10
|
}
|
@@ -13,8 +13,13 @@ function describeImage(model, data, options) {
|
|
13
13
|
input: data,
|
14
14
|
model,
|
15
15
|
options,
|
16
|
-
generateResponse: (options) =>
|
17
|
-
|
16
|
+
generateResponse: async (options) => {
|
17
|
+
const result = await model.doDescribeImage(data, options);
|
18
|
+
return {
|
19
|
+
response: result.response,
|
20
|
+
extractedValue: result.description,
|
21
|
+
};
|
22
|
+
},
|
18
23
|
});
|
19
24
|
}
|
20
25
|
exports.describeImage = describeImage;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
2
2
|
import { ModelFunctionPromise } from "../executeCall.js";
|
3
3
|
import { ImageDescriptionModel, ImageDescriptionModelSettings } from "./ImageDescriptionModel.js";
|
4
4
|
/**
|
@@ -6,4 +6,4 @@ import { ImageDescriptionModel, ImageDescriptionModelSettings } from "./ImageDes
|
|
6
6
|
*
|
7
7
|
* Depending on the model, this can be used for image captioning, for describing the contents of an image, or for OCR.
|
8
8
|
*/
|
9
|
-
export declare function describeImage<DATA
|
9
|
+
export declare function describeImage<DATA>(model: ImageDescriptionModel<DATA, ImageDescriptionModelSettings>, data: DATA, options?: FunctionOptions): ModelFunctionPromise<string>;
|
@@ -10,7 +10,12 @@ export function describeImage(model, data, options) {
|
|
10
10
|
input: data,
|
11
11
|
model,
|
12
12
|
options,
|
13
|
-
generateResponse: (options) =>
|
14
|
-
|
13
|
+
generateResponse: async (options) => {
|
14
|
+
const result = await model.doDescribeImage(data, options);
|
15
|
+
return {
|
16
|
+
response: result.response,
|
17
|
+
extractedValue: result.description,
|
18
|
+
};
|
19
|
+
},
|
15
20
|
});
|
16
21
|
}
|
@@ -7,7 +7,7 @@ export interface EmbeddingStartedEvent extends BaseModelCallStartedEvent {
|
|
7
7
|
export type EmbeddingFinishedEventResult = {
|
8
8
|
status: "success";
|
9
9
|
response: unknown;
|
10
|
-
|
10
|
+
value: Vector | Array<Vector>;
|
11
11
|
} | {
|
12
12
|
status: "error";
|
13
13
|
error: unknown;
|
@@ -1,9 +1,9 @@
|
|
1
|
+
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
1
2
|
import { Vector } from "../../core/Vector.js";
|
2
|
-
import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
|
3
3
|
import { Model, ModelSettings } from "../Model.js";
|
4
4
|
export interface EmbeddingModelSettings extends ModelSettings {
|
5
5
|
}
|
6
|
-
export interface EmbeddingModel<VALUE,
|
6
|
+
export interface EmbeddingModel<VALUE, SETTINGS extends EmbeddingModelSettings = EmbeddingModelSettings> extends Model<SETTINGS> {
|
7
7
|
/**
|
8
8
|
* The size of the embedding vector.
|
9
9
|
*/
|
@@ -12,6 +12,8 @@ export interface EmbeddingModel<VALUE, RESPONSE, SETTINGS extends EmbeddingModel
|
|
12
12
|
* Limit of how many values can be sent in a single API call.
|
13
13
|
*/
|
14
14
|
readonly maxValuesPerCall: number | undefined;
|
15
|
-
|
16
|
-
|
15
|
+
doEmbedValues(values: VALUE[], options?: FunctionOptions): PromiseLike<{
|
16
|
+
response: unknown;
|
17
|
+
embeddings: Vector[];
|
18
|
+
}>;
|
17
19
|
}
|
@@ -20,7 +20,7 @@ function embedMany(model, values, options) {
|
|
20
20
|
input: values,
|
21
21
|
model,
|
22
22
|
options,
|
23
|
-
generateResponse: (options) => {
|
23
|
+
generateResponse: async (options) => {
|
24
24
|
// split the values into groups that are small enough to be sent in one call:
|
25
25
|
const maxValuesPerCall = model.maxValuesPerCall;
|
26
26
|
const valueGroups = [];
|
@@ -32,14 +32,16 @@ function embedMany(model, values, options) {
|
|
32
32
|
valueGroups.push(values.slice(i, i + maxValuesPerCall));
|
33
33
|
}
|
34
34
|
}
|
35
|
-
|
36
|
-
|
37
|
-
extractOutputValue: (result) => {
|
35
|
+
const responses = await Promise.all(valueGroups.map((valueGroup) => model.doEmbedValues(valueGroup, options)));
|
36
|
+
const rawResponses = responses.map((response) => response.response);
|
38
37
|
const embeddings = [];
|
39
|
-
for (const response of
|
40
|
-
embeddings.push(...
|
38
|
+
for (const response of responses) {
|
39
|
+
embeddings.push(...response.embeddings);
|
41
40
|
}
|
42
|
-
return
|
41
|
+
return {
|
42
|
+
response: rawResponses,
|
43
|
+
extractedValue: embeddings,
|
44
|
+
};
|
43
45
|
},
|
44
46
|
});
|
45
47
|
}
|
@@ -59,10 +61,13 @@ function embed(model, value, options) {
|
|
59
61
|
input: value,
|
60
62
|
model,
|
61
63
|
options,
|
62
|
-
generateResponse: async (options) =>
|
63
|
-
await model.
|
64
|
-
|
65
|
-
|
64
|
+
generateResponse: async (options) => {
|
65
|
+
const result = await model.doEmbedValues([value], options);
|
66
|
+
return {
|
67
|
+
response: result.response,
|
68
|
+
extractedValue: result.embeddings[0],
|
69
|
+
};
|
70
|
+
},
|
66
71
|
});
|
67
72
|
}
|
68
73
|
exports.embed = embed;
|
@@ -1,5 +1,5 @@
|
|
1
|
+
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
1
2
|
import { Vector } from "../../core/Vector.js";
|
2
|
-
import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
|
3
3
|
import { ModelFunctionPromise } from "../executeCall.js";
|
4
4
|
import { EmbeddingModel, EmbeddingModelSettings } from "./EmbeddingModel.js";
|
5
5
|
/**
|
@@ -14,7 +14,7 @@ import { EmbeddingModel, EmbeddingModelSettings } from "./EmbeddingModel.js";
|
|
14
14
|
* ]
|
15
15
|
* );
|
16
16
|
*/
|
17
|
-
export declare function embedMany<VALUE
|
17
|
+
export declare function embedMany<VALUE>(model: EmbeddingModel<VALUE, EmbeddingModelSettings>, values: VALUE[], options?: FunctionOptions): ModelFunctionPromise<Vector[]>;
|
18
18
|
/**
|
19
19
|
* Generate an embedding for a single value.
|
20
20
|
*
|
@@ -24,4 +24,4 @@ export declare function embedMany<VALUE, RESPONSE, SETTINGS extends EmbeddingMod
|
|
24
24
|
* "At first, Nox didn't know what to do with the pup."
|
25
25
|
* );
|
26
26
|
*/
|
27
|
-
export declare function embed<VALUE
|
27
|
+
export declare function embed<VALUE>(model: EmbeddingModel<VALUE, EmbeddingModelSettings>, value: VALUE, options?: FunctionOptions): ModelFunctionPromise<Vector>;
|
@@ -17,7 +17,7 @@ export function embedMany(model, values, options) {
|
|
17
17
|
input: values,
|
18
18
|
model,
|
19
19
|
options,
|
20
|
-
generateResponse: (options) => {
|
20
|
+
generateResponse: async (options) => {
|
21
21
|
// split the values into groups that are small enough to be sent in one call:
|
22
22
|
const maxValuesPerCall = model.maxValuesPerCall;
|
23
23
|
const valueGroups = [];
|
@@ -29,14 +29,16 @@ export function embedMany(model, values, options) {
|
|
29
29
|
valueGroups.push(values.slice(i, i + maxValuesPerCall));
|
30
30
|
}
|
31
31
|
}
|
32
|
-
|
33
|
-
|
34
|
-
extractOutputValue: (result) => {
|
32
|
+
const responses = await Promise.all(valueGroups.map((valueGroup) => model.doEmbedValues(valueGroup, options)));
|
33
|
+
const rawResponses = responses.map((response) => response.response);
|
35
34
|
const embeddings = [];
|
36
|
-
for (const response of
|
37
|
-
embeddings.push(...
|
35
|
+
for (const response of responses) {
|
36
|
+
embeddings.push(...response.embeddings);
|
38
37
|
}
|
39
|
-
return
|
38
|
+
return {
|
39
|
+
response: rawResponses,
|
40
|
+
extractedValue: embeddings,
|
41
|
+
};
|
40
42
|
},
|
41
43
|
});
|
42
44
|
}
|
@@ -55,9 +57,12 @@ export function embed(model, value, options) {
|
|
55
57
|
input: value,
|
56
58
|
model,
|
57
59
|
options,
|
58
|
-
generateResponse: async (options) =>
|
59
|
-
await model.
|
60
|
-
|
61
|
-
|
60
|
+
generateResponse: async (options) => {
|
61
|
+
const result = await model.doEmbedValues([value], options);
|
62
|
+
return {
|
63
|
+
response: result.response,
|
64
|
+
extractedValue: result.embeddings[0],
|
65
|
+
};
|
66
|
+
},
|
62
67
|
});
|
63
68
|
}
|
@@ -5,9 +5,9 @@ const nanoid_1 = require("nanoid");
|
|
5
5
|
const FunctionEventSource_js_1 = require("../core/FunctionEventSource.cjs");
|
6
6
|
const GlobalFunctionLogging_js_1 = require("../core/GlobalFunctionLogging.cjs");
|
7
7
|
const GlobalFunctionObservers_js_1 = require("../core/GlobalFunctionObservers.cjs");
|
8
|
+
const AbortError_js_1 = require("../core/api/AbortError.cjs");
|
8
9
|
const getFunctionCallLogger_js_1 = require("../core/getFunctionCallLogger.cjs");
|
9
10
|
const DurationMeasurement_js_1 = require("../util/DurationMeasurement.cjs");
|
10
|
-
const AbortError_js_1 = require("../core/api/AbortError.cjs");
|
11
11
|
const runSafe_js_1 = require("../util/runSafe.cjs");
|
12
12
|
class ModelFunctionPromise extends Promise {
|
13
13
|
constructor(fullPromise) {
|
@@ -21,50 +21,39 @@ class ModelFunctionPromise extends Promise {
|
|
21
21
|
writable: true,
|
22
22
|
value: fullPromise
|
23
23
|
});
|
24
|
-
Object.defineProperty(this, "
|
24
|
+
Object.defineProperty(this, "valuePromise", {
|
25
25
|
enumerable: true,
|
26
26
|
configurable: true,
|
27
27
|
writable: true,
|
28
28
|
value: void 0
|
29
29
|
});
|
30
|
-
this.
|
30
|
+
this.valuePromise = fullPromise.then((result) => result.value);
|
31
31
|
}
|
32
32
|
asFullResponse() {
|
33
33
|
return this.fullPromise;
|
34
34
|
}
|
35
35
|
then(onfulfilled, onrejected) {
|
36
|
-
return this.
|
36
|
+
return this.valuePromise.then(onfulfilled, onrejected);
|
37
37
|
}
|
38
38
|
catch(onrejected) {
|
39
|
-
return this.
|
39
|
+
return this.valuePromise.catch(onrejected);
|
40
40
|
}
|
41
41
|
finally(onfinally) {
|
42
|
-
return this.
|
42
|
+
return this.valuePromise.finally(onfinally);
|
43
43
|
}
|
44
44
|
}
|
45
45
|
exports.ModelFunctionPromise = ModelFunctionPromise;
|
46
|
-
function executeCall({ model, options, input, functionType, generateResponse,
|
46
|
+
function executeCall({ model, options, input, functionType, generateResponse, }) {
|
47
47
|
return new ModelFunctionPromise(doExecuteCall({
|
48
48
|
model,
|
49
49
|
options,
|
50
50
|
input,
|
51
51
|
functionType,
|
52
52
|
generateResponse,
|
53
|
-
extractOutputValue,
|
54
|
-
extractUsage,
|
55
53
|
}));
|
56
54
|
}
|
57
55
|
exports.executeCall = executeCall;
|
58
|
-
async function doExecuteCall({ model, options, input, functionType, generateResponse,
|
59
|
-
if (options?.settings != null) {
|
60
|
-
model = model.withSettings(options.settings);
|
61
|
-
options = {
|
62
|
-
functionId: options.functionId,
|
63
|
-
logging: options.logging,
|
64
|
-
observers: options.observers,
|
65
|
-
run: options.run,
|
66
|
-
};
|
67
|
-
}
|
56
|
+
async function doExecuteCall({ model, options, input, functionType, generateResponse, }) {
|
68
57
|
const run = options?.run;
|
69
58
|
const settings = model.settings;
|
70
59
|
const eventSource = new FunctionEventSource_js_1.FunctionEventSource({
|
@@ -95,11 +84,7 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
95
84
|
eventType: "started",
|
96
85
|
...startMetadata,
|
97
86
|
});
|
98
|
-
const result = await (0, runSafe_js_1.runSafe)(() => generateResponse(
|
99
|
-
functionId: options?.functionId,
|
100
|
-
settings,
|
101
|
-
run,
|
102
|
-
}));
|
87
|
+
const result = await (0, runSafe_js_1.runSafe)(() => generateResponse(options));
|
103
88
|
const finishMetadata = {
|
104
89
|
eventType: "finished",
|
105
90
|
...startMetadata,
|
@@ -127,9 +112,9 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
127
112
|
});
|
128
113
|
throw result.error;
|
129
114
|
}
|
130
|
-
const response = result.
|
131
|
-
const
|
132
|
-
const usage =
|
115
|
+
const response = result.value.response;
|
116
|
+
const value = result.value.extractedValue;
|
117
|
+
const usage = result.value.usage;
|
133
118
|
eventSource.notify({
|
134
119
|
...finishMetadata,
|
135
120
|
eventType: "finished",
|
@@ -137,12 +122,23 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
137
122
|
status: "success",
|
138
123
|
usage,
|
139
124
|
response,
|
140
|
-
|
125
|
+
value,
|
141
126
|
},
|
142
127
|
});
|
143
128
|
return {
|
144
|
-
|
129
|
+
value,
|
145
130
|
response,
|
146
|
-
metadata:
|
131
|
+
metadata: {
|
132
|
+
model: model.modelInformation,
|
133
|
+
callId: finishMetadata.callId,
|
134
|
+
runId: finishMetadata.runId,
|
135
|
+
sessionId: finishMetadata.sessionId,
|
136
|
+
userId: finishMetadata.userId,
|
137
|
+
functionId: finishMetadata.functionId,
|
138
|
+
startTimestamp: startMetadata.startTimestamp,
|
139
|
+
finishTimestamp: finishMetadata.finishTimestamp,
|
140
|
+
durationInMs: finishMetadata.durationInMs,
|
141
|
+
usage,
|
142
|
+
},
|
147
143
|
};
|
148
144
|
}
|
@@ -1,41 +1,32 @@
|
|
1
|
+
import { FunctionOptions } from "../core/FunctionOptions.js";
|
1
2
|
import { Model, ModelSettings } from "./Model.js";
|
2
3
|
import { ModelCallStartedEvent } from "./ModelCallEvent.js";
|
3
|
-
import {
|
4
|
-
|
5
|
-
export type ModelCallMetadata = {
|
6
|
-
callId: string;
|
7
|
-
runId?: string;
|
8
|
-
sessionId?: string;
|
9
|
-
userId?: string;
|
10
|
-
functionId?: string;
|
11
|
-
startTimestamp: Date;
|
12
|
-
finishTimestamp: Date;
|
13
|
-
durationInMs: number;
|
14
|
-
model: ModelInformation;
|
15
|
-
};
|
16
|
-
export declare class ModelFunctionPromise<OUTPUT, RESPONSE> extends Promise<OUTPUT> {
|
4
|
+
import { ModelCallMetadata } from "./ModelCallMetadata.js";
|
5
|
+
export declare class ModelFunctionPromise<VALUE> extends Promise<VALUE> {
|
17
6
|
private fullPromise;
|
18
|
-
private
|
7
|
+
private valuePromise;
|
19
8
|
constructor(fullPromise: Promise<{
|
20
|
-
|
21
|
-
response:
|
9
|
+
value: VALUE;
|
10
|
+
response: unknown;
|
22
11
|
metadata: ModelCallMetadata;
|
23
12
|
}>);
|
24
13
|
asFullResponse(): Promise<{
|
25
|
-
|
26
|
-
response:
|
14
|
+
value: VALUE;
|
15
|
+
response: unknown;
|
27
16
|
metadata: ModelCallMetadata;
|
28
17
|
}>;
|
29
|
-
then<TResult1 =
|
30
|
-
catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): Promise<
|
31
|
-
finally(onfinally?: (() => void) | undefined | null): Promise<
|
18
|
+
then<TResult1 = VALUE, TResult2 = never>(onfulfilled?: ((value: VALUE) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
|
19
|
+
catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): Promise<VALUE | TResult>;
|
20
|
+
finally(onfinally?: (() => void) | undefined | null): Promise<VALUE>;
|
32
21
|
}
|
33
|
-
export declare function executeCall<
|
22
|
+
export declare function executeCall<VALUE, MODEL extends Model<ModelSettings>>({ model, options, input, functionType, generateResponse, }: {
|
34
23
|
model: MODEL;
|
35
|
-
options?:
|
24
|
+
options?: FunctionOptions;
|
36
25
|
input: unknown;
|
37
26
|
functionType: ModelCallStartedEvent["functionType"];
|
38
|
-
generateResponse: (options
|
39
|
-
|
40
|
-
|
41
|
-
|
27
|
+
generateResponse: (options?: FunctionOptions) => PromiseLike<{
|
28
|
+
response: unknown;
|
29
|
+
extractedValue: VALUE;
|
30
|
+
usage?: unknown;
|
31
|
+
}>;
|
32
|
+
}): ModelFunctionPromise<VALUE>;
|
@@ -2,9 +2,9 @@ import { nanoid as createId } from "nanoid";
|
|
2
2
|
import { FunctionEventSource } from "../core/FunctionEventSource.js";
|
3
3
|
import { getGlobalFunctionLogging } from "../core/GlobalFunctionLogging.js";
|
4
4
|
import { getGlobalFunctionObservers } from "../core/GlobalFunctionObservers.js";
|
5
|
+
import { AbortError } from "../core/api/AbortError.js";
|
5
6
|
import { getFunctionCallLogger } from "../core/getFunctionCallLogger.js";
|
6
7
|
import { startDurationMeasurement } from "../util/DurationMeasurement.js";
|
7
|
-
import { AbortError } from "../core/api/AbortError.js";
|
8
8
|
import { runSafe } from "../util/runSafe.js";
|
9
9
|
export class ModelFunctionPromise extends Promise {
|
10
10
|
constructor(fullPromise) {
|
@@ -18,48 +18,37 @@ export class ModelFunctionPromise extends Promise {
|
|
18
18
|
writable: true,
|
19
19
|
value: fullPromise
|
20
20
|
});
|
21
|
-
Object.defineProperty(this, "
|
21
|
+
Object.defineProperty(this, "valuePromise", {
|
22
22
|
enumerable: true,
|
23
23
|
configurable: true,
|
24
24
|
writable: true,
|
25
25
|
value: void 0
|
26
26
|
});
|
27
|
-
this.
|
27
|
+
this.valuePromise = fullPromise.then((result) => result.value);
|
28
28
|
}
|
29
29
|
asFullResponse() {
|
30
30
|
return this.fullPromise;
|
31
31
|
}
|
32
32
|
then(onfulfilled, onrejected) {
|
33
|
-
return this.
|
33
|
+
return this.valuePromise.then(onfulfilled, onrejected);
|
34
34
|
}
|
35
35
|
catch(onrejected) {
|
36
|
-
return this.
|
36
|
+
return this.valuePromise.catch(onrejected);
|
37
37
|
}
|
38
38
|
finally(onfinally) {
|
39
|
-
return this.
|
39
|
+
return this.valuePromise.finally(onfinally);
|
40
40
|
}
|
41
41
|
}
|
42
|
-
export function executeCall({ model, options, input, functionType, generateResponse,
|
42
|
+
export function executeCall({ model, options, input, functionType, generateResponse, }) {
|
43
43
|
return new ModelFunctionPromise(doExecuteCall({
|
44
44
|
model,
|
45
45
|
options,
|
46
46
|
input,
|
47
47
|
functionType,
|
48
48
|
generateResponse,
|
49
|
-
extractOutputValue,
|
50
|
-
extractUsage,
|
51
49
|
}));
|
52
50
|
}
|
53
|
-
async function doExecuteCall({ model, options, input, functionType, generateResponse,
|
54
|
-
if (options?.settings != null) {
|
55
|
-
model = model.withSettings(options.settings);
|
56
|
-
options = {
|
57
|
-
functionId: options.functionId,
|
58
|
-
logging: options.logging,
|
59
|
-
observers: options.observers,
|
60
|
-
run: options.run,
|
61
|
-
};
|
62
|
-
}
|
51
|
+
async function doExecuteCall({ model, options, input, functionType, generateResponse, }) {
|
63
52
|
const run = options?.run;
|
64
53
|
const settings = model.settings;
|
65
54
|
const eventSource = new FunctionEventSource({
|
@@ -90,11 +79,7 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
90
79
|
eventType: "started",
|
91
80
|
...startMetadata,
|
92
81
|
});
|
93
|
-
const result = await runSafe(() => generateResponse(
|
94
|
-
functionId: options?.functionId,
|
95
|
-
settings,
|
96
|
-
run,
|
97
|
-
}));
|
82
|
+
const result = await runSafe(() => generateResponse(options));
|
98
83
|
const finishMetadata = {
|
99
84
|
eventType: "finished",
|
100
85
|
...startMetadata,
|
@@ -122,9 +107,9 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
122
107
|
});
|
123
108
|
throw result.error;
|
124
109
|
}
|
125
|
-
const response = result.
|
126
|
-
const
|
127
|
-
const usage =
|
110
|
+
const response = result.value.response;
|
111
|
+
const value = result.value.extractedValue;
|
112
|
+
const usage = result.value.usage;
|
128
113
|
eventSource.notify({
|
129
114
|
...finishMetadata,
|
130
115
|
eventType: "finished",
|
@@ -132,12 +117,23 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
|
|
132
117
|
status: "success",
|
133
118
|
usage,
|
134
119
|
response,
|
135
|
-
|
120
|
+
value,
|
136
121
|
},
|
137
122
|
});
|
138
123
|
return {
|
139
|
-
|
124
|
+
value,
|
140
125
|
response,
|
141
|
-
metadata:
|
126
|
+
metadata: {
|
127
|
+
model: model.modelInformation,
|
128
|
+
callId: finishMetadata.callId,
|
129
|
+
runId: finishMetadata.runId,
|
130
|
+
sessionId: finishMetadata.sessionId,
|
131
|
+
userId: finishMetadata.userId,
|
132
|
+
functionId: finishMetadata.functionId,
|
133
|
+
startTimestamp: startMetadata.startTimestamp,
|
134
|
+
finishTimestamp: finishMetadata.finishTimestamp,
|
135
|
+
durationInMs: finishMetadata.durationInMs,
|
136
|
+
usage,
|
137
|
+
},
|
142
138
|
};
|
143
139
|
}
|