modelfusion 0.14.0 → 0.16.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.
Files changed (39) hide show
  1. package/README.md +11 -5
  2. package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.cjs +1 -1
  3. package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.js +1 -1
  4. package/model-function/Model.d.ts +2 -2
  5. package/model-function/generate-text/TextGenerationModel.d.ts +15 -15
  6. package/model-function/generate-text/generateText.cjs +2 -2
  7. package/model-function/generate-text/generateText.js +2 -2
  8. package/model-provider/cohere/CohereTextGenerationModel.cjs +15 -16
  9. package/model-provider/cohere/CohereTextGenerationModel.d.ts +1 -6
  10. package/model-provider/cohere/CohereTextGenerationModel.js +15 -16
  11. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +9 -14
  12. package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +1 -5
  13. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +9 -14
  14. package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +12 -12
  15. package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +6 -11
  16. package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +12 -12
  17. package/model-provider/openai/OpenAITextGenerationModel.cjs +16 -14
  18. package/model-provider/openai/OpenAITextGenerationModel.d.ts +1 -6
  19. package/model-provider/openai/OpenAITextGenerationModel.js +16 -14
  20. package/model-provider/openai/chat/OpenAIChatModel.cjs +11 -14
  21. package/model-provider/openai/chat/OpenAIChatModel.d.ts +2 -5
  22. package/model-provider/openai/chat/OpenAIChatModel.js +11 -14
  23. package/package.json +3 -3
  24. package/prompt/AlpacaPromptFormat.cjs +1 -1
  25. package/prompt/AlpacaPromptFormat.js +1 -1
  26. package/prompt/Llama2PromptFormat.cjs +2 -2
  27. package/prompt/Llama2PromptFormat.js +2 -2
  28. package/prompt/OpenAIChatPromptFormat.cjs +2 -2
  29. package/prompt/OpenAIChatPromptFormat.js +2 -2
  30. package/prompt/PromptFormat.d.ts +2 -2
  31. package/prompt/PromptFormatTextGenerationModel.cjs +3 -16
  32. package/prompt/PromptFormatTextGenerationModel.d.ts +0 -3
  33. package/prompt/PromptFormatTextGenerationModel.js +3 -16
  34. package/prompt/TextPromptFormat.cjs +2 -2
  35. package/prompt/TextPromptFormat.js +2 -2
  36. package/prompt/VicunaPromptFormat.cjs +1 -1
  37. package/prompt/VicunaPromptFormat.js +1 -1
  38. package/prompt/chat/trimChatPrompt.cjs +1 -1
  39. package/prompt/chat/trimChatPrompt.js +1 -1
package/README.md CHANGED
@@ -58,7 +58,10 @@ const text = await generateText(
58
58
 
59
59
  ```ts
60
60
  const textStream = await streamText(
61
- new OpenAIChatModel({ model: "gpt-3.5-turbo", maxTokens: 1000 }),
61
+ new OpenAIChatModel({
62
+ model: "gpt-3.5-turbo",
63
+ maxCompletionTokens: 1000,
64
+ }),
62
65
  [
63
66
  OpenAIChatMessage.system("You are a story writer."),
64
67
  OpenAIChatMessage.user("Write a story about a robot learning to love"),
@@ -78,7 +81,7 @@ for await (const textFragment of textStream) {
78
81
  const text = await generateText(
79
82
  new LlamaCppTextGenerationModel({
80
83
  contextWindowSize: 4096, // Llama 2 context window size
81
- nPredict: 1000,
84
+ maxCompletionTokens: 1000,
82
85
  }).withPromptFormat(Llama2InstructionPromptFormat()),
83
86
  {
84
87
  system: "You are a story writer.",
@@ -111,7 +114,7 @@ ModelFusion model functions return rich results that include the original respon
111
114
  const { response, metadata } = await generateText(
112
115
  new OpenAITextGenerationModel({
113
116
  model: "text-davinci-003",
114
- maxTokens: 1000,
117
+ maxCompletionTokens: 1000,
115
118
  n: 2, // generate 2 completions
116
119
  }),
117
120
  "Write a short story about a robot learning to love:\n\n",
@@ -134,7 +137,7 @@ const value = await generateJson(
134
137
  new OpenAIChatModel({
135
138
  model: "gpt-3.5-turbo",
136
139
  temperature: 0,
137
- maxTokens: 50,
140
+ maxCompletionTokens: 50,
138
141
  }),
139
142
  {
140
143
  name: "sentiment" as const,
@@ -165,7 +168,10 @@ It either matches one of the schemas or is text reponse.
165
168
 
166
169
  ```ts
167
170
  const { schema, value, text } = await generateJsonOrText(
168
- new OpenAIChatModel({ model: "gpt-3.5-turbo", maxTokens: 1000 }),
171
+ new OpenAIChatModel({
172
+ model: "gpt-3.5-turbo",
173
+ maxCompletionTokens: 1000,
174
+ }),
169
175
  [
170
176
  {
171
177
  name: "getCurrentWeather" as const, // mark 'as const' for type inference
@@ -10,7 +10,7 @@ const summarizeRecursively_js_1 = require("./summarizeRecursively.cjs");
10
10
  * while leaving enough space for the model to generate text.
11
11
  */
12
12
  async function summarizeRecursivelyWithTextGenerationAndTokenSplitting({ text, model, prompt, tokenLimit = model.contextWindowSize -
13
- (model.maxCompletionTokens ?? model.contextWindowSize / 4), join, }, options) {
13
+ (model.settings.maxCompletionTokens ?? model.contextWindowSize / 4), join, }, options) {
14
14
  const emptyPromptTokens = await model.countPromptTokens(await prompt({ text: "" }));
15
15
  return (0, summarizeRecursively_js_1.summarizeRecursively)({
16
16
  split: (0, splitRecursively_js_1.splitAtToken)({
@@ -7,7 +7,7 @@ import { summarizeRecursively } from "./summarizeRecursively.js";
7
7
  * while leaving enough space for the model to generate text.
8
8
  */
9
9
  export async function summarizeRecursivelyWithTextGenerationAndTokenSplitting({ text, model, prompt, tokenLimit = model.contextWindowSize -
10
- (model.maxCompletionTokens ?? model.contextWindowSize / 4), join, }, options) {
10
+ (model.settings.maxCompletionTokens ?? model.contextWindowSize / 4), join, }, options) {
11
11
  const emptyPromptTokens = await model.countPromptTokens(await prompt({ text: "" }));
12
12
  return summarizeRecursively({
13
13
  split: splitAtToken({
@@ -12,11 +12,11 @@ export interface Model<SETTINGS> {
12
12
  * @example
13
13
  * const model = new OpenAITextGenerationModel({
14
14
  * model: "text-davinci-003",
15
- * maxTokens: 500,
15
+ * maxCompletionTokens: 500,
16
16
  * });
17
17
  *
18
18
  * const modelWithMoreTokens = model.withSettings({
19
- * maxTokens: 1000,
19
+ * maxCompletionTokens: 1000,
20
20
  * });
21
21
  */
22
22
  withSettings(additionalSettings: Partial<SETTINGS>): this;
@@ -5,7 +5,21 @@ import { Model, ModelSettings } from "../Model.js";
5
5
  import { BasicTokenizer, FullTokenizer } from "../tokenize-text/Tokenizer.js";
6
6
  import { DeltaEvent } from "./DeltaEvent.js";
7
7
  export interface TextGenerationModelSettings extends ModelSettings {
8
- trimOutput?: boolean;
8
+ /**
9
+ * Maximum number of tokens to generate.
10
+ * Does nothing if the model does not support this setting.
11
+ */
12
+ maxCompletionTokens?: number | undefined;
13
+ /**
14
+ * Stop sequences to use. Stop sequences are not included in the generated text.
15
+ * Does nothing if the model does not support this setting.
16
+ */
17
+ stopSequences?: string[] | undefined;
18
+ /**
19
+ * When true, the leading and trailing white space and line terminator characters
20
+ * are removed from the generated text.
21
+ */
22
+ trimWhitespace?: boolean;
9
23
  }
10
24
  export interface TextGenerationModel<PROMPT, RESPONSE, FULL_DELTA, SETTINGS extends TextGenerationModelSettings> extends Model<SETTINGS> {
11
25
  readonly contextWindowSize: number | undefined;
@@ -25,18 +39,4 @@ export interface TextGenerationModel<PROMPT, RESPONSE, FULL_DELTA, SETTINGS exte
25
39
  */
26
40
  readonly extractTextDelta: ((fullDelta: FULL_DELTA) => string | undefined) | undefined;
27
41
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, PROMPT>): PromptFormatTextGenerationModel<INPUT_PROMPT, PROMPT, RESPONSE, FULL_DELTA, SETTINGS, this>;
28
- /**
29
- * Maximum number of tokens to generate.
30
- */
31
- readonly maxCompletionTokens: number | undefined;
32
- /**
33
- * Sets the maximum number of tokens to generate.
34
- * Does nothing if the model does not support this setting.
35
- */
36
- withMaxCompletionTokens(maxCompletionTokens: number): this;
37
- /**
38
- * Sets the stop tokens to use. Stop tokens are not included in the generated text.
39
- * Does nothing if the model does not support this setting.
40
- */
41
- withStopTokens(stopTokens: string[]): this;
42
42
  }
@@ -10,8 +10,8 @@ model, prompt, options) {
10
10
  options,
11
11
  generateResponse: (options) => model.generateTextResponse(prompt, options),
12
12
  extractOutputValue: (result) => {
13
- const shouldTrimOutput = model.settings.trimOutput ?? true;
14
- return shouldTrimOutput
13
+ const shouldTrimWhitespace = model.settings.trimWhitespace ?? true;
14
+ return shouldTrimWhitespace
15
15
  ? model.extractText(result).trim()
16
16
  : model.extractText(result);
17
17
  },
@@ -7,8 +7,8 @@ model, prompt, options) {
7
7
  options,
8
8
  generateResponse: (options) => model.generateTextResponse(prompt, options),
9
9
  extractOutputValue: (result) => {
10
- const shouldTrimOutput = model.settings.trimOutput ?? true;
11
- return shouldTrimOutput
10
+ const shouldTrimWhitespace = model.settings.trimWhitespace ?? true;
11
+ return shouldTrimWhitespace
12
12
  ? model.extractText(result).trim()
13
13
  : model.extractText(result);
14
14
  },
@@ -37,7 +37,7 @@ exports.COHERE_TEXT_GENERATION_MODELS = {
37
37
  * const model = new CohereTextGenerationModel({
38
38
  * model: "command-nightly",
39
39
  * temperature: 0.7,
40
- * maxTokens: 500,
40
+ * maxCompletionTokens: 500,
41
41
  * });
42
42
  *
43
43
  * const text = await generateText(
@@ -91,13 +91,21 @@ class CohereTextGenerationModel extends AbstractModel_js_1.AbstractModel {
91
91
  }
92
92
  async callAPI(prompt, options) {
93
93
  const { run, settings, responseFormat } = options;
94
- const callSettings = Object.assign({
94
+ const combinedSettings = {
95
+ ...this.settings,
96
+ settings,
97
+ };
98
+ const callSettings = {
95
99
  apiKey: this.apiKey,
96
- }, this.settings, settings, {
100
+ ...combinedSettings,
101
+ // use endSequences instead of stopSequences
102
+ // to exclude stop tokens from the generated text
103
+ endSequences: combinedSettings.stopSequences,
104
+ maxTokens: combinedSettings.maxCompletionTokens,
97
105
  abortSignal: run?.abortSignal,
98
106
  prompt,
99
107
  responseFormat,
100
- });
108
+ };
101
109
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
102
110
  retry: this.settings.retry,
103
111
  throttle: this.settings.throttle,
@@ -124,24 +132,15 @@ class CohereTextGenerationModel extends AbstractModel_js_1.AbstractModel {
124
132
  }
125
133
  withPromptFormat(promptFormat) {
126
134
  return new PromptFormatTextGenerationModel_js_1.PromptFormatTextGenerationModel({
127
- model: this.withStopTokens(promptFormat.stopTokens),
135
+ model: this.withSettings({
136
+ stopSequences: promptFormat.stopSequences,
137
+ }),
128
138
  promptFormat,
129
139
  });
130
140
  }
131
141
  withSettings(additionalSettings) {
132
142
  return new CohereTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
133
143
  }
134
- get maxCompletionTokens() {
135
- return this.settings.maxTokens;
136
- }
137
- withMaxCompletionTokens(maxCompletionTokens) {
138
- return this.withSettings({ maxTokens: maxCompletionTokens });
139
- }
140
- withStopTokens(stopTokens) {
141
- // use endSequences instead of stopSequences
142
- // to exclude stop tokens from the generated text
143
- return this.withSettings({ endSequences: stopTokens });
144
- }
145
144
  }
146
145
  exports.CohereTextGenerationModel = CohereTextGenerationModel;
147
146
  const cohereTextGenerationResponseSchema = zod_1.z.object({
@@ -35,13 +35,11 @@ export interface CohereTextGenerationModelSettings extends TextGenerationModelSe
35
35
  throttle?: ThrottleFunction;
36
36
  };
37
37
  numGenerations?: number;
38
- maxTokens?: number;
39
38
  temperature?: number;
40
39
  k?: number;
41
40
  p?: number;
42
41
  frequencyPenalty?: number;
43
42
  presencePenalty?: number;
44
- endSequences?: string[];
45
43
  stopSequences?: string[];
46
44
  returnLikelihoods?: "GENERATION" | "ALL" | "NONE";
47
45
  logitBias?: Record<string, number>;
@@ -56,7 +54,7 @@ export interface CohereTextGenerationModelSettings extends TextGenerationModelSe
56
54
  * const model = new CohereTextGenerationModel({
57
55
  * model: "command-nightly",
58
56
  * temperature: 0.7,
59
- * maxTokens: 500,
57
+ * maxCompletionTokens: 500,
60
58
  * });
61
59
  *
62
60
  * const text = await generateText(
@@ -94,9 +92,6 @@ export declare class CohereTextGenerationModel extends AbstractModel<CohereTextG
94
92
  extractTextDelta(fullDelta: CohereTextGenerationDelta): string | undefined;
95
93
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, CohereTextGenerationResponse, CohereTextGenerationDelta, CohereTextGenerationModelSettings, this>;
96
94
  withSettings(additionalSettings: Partial<CohereTextGenerationModelSettings>): this;
97
- get maxCompletionTokens(): number | undefined;
98
- withMaxCompletionTokens(maxCompletionTokens: number): this;
99
- withStopTokens(stopTokens: string[]): this;
100
95
  }
101
96
  declare const cohereTextGenerationResponseSchema: z.ZodObject<{
102
97
  id: z.ZodString;
@@ -31,7 +31,7 @@ export const COHERE_TEXT_GENERATION_MODELS = {
31
31
  * const model = new CohereTextGenerationModel({
32
32
  * model: "command-nightly",
33
33
  * temperature: 0.7,
34
- * maxTokens: 500,
34
+ * maxCompletionTokens: 500,
35
35
  * });
36
36
  *
37
37
  * const text = await generateText(
@@ -85,13 +85,21 @@ export class CohereTextGenerationModel extends AbstractModel {
85
85
  }
86
86
  async callAPI(prompt, options) {
87
87
  const { run, settings, responseFormat } = options;
88
- const callSettings = Object.assign({
88
+ const combinedSettings = {
89
+ ...this.settings,
90
+ settings,
91
+ };
92
+ const callSettings = {
89
93
  apiKey: this.apiKey,
90
- }, this.settings, settings, {
94
+ ...combinedSettings,
95
+ // use endSequences instead of stopSequences
96
+ // to exclude stop tokens from the generated text
97
+ endSequences: combinedSettings.stopSequences,
98
+ maxTokens: combinedSettings.maxCompletionTokens,
91
99
  abortSignal: run?.abortSignal,
92
100
  prompt,
93
101
  responseFormat,
94
- });
102
+ };
95
103
  return callWithRetryAndThrottle({
96
104
  retry: this.settings.retry,
97
105
  throttle: this.settings.throttle,
@@ -118,24 +126,15 @@ export class CohereTextGenerationModel extends AbstractModel {
118
126
  }
119
127
  withPromptFormat(promptFormat) {
120
128
  return new PromptFormatTextGenerationModel({
121
- model: this.withStopTokens(promptFormat.stopTokens),
129
+ model: this.withSettings({
130
+ stopSequences: promptFormat.stopSequences,
131
+ }),
122
132
  promptFormat,
123
133
  });
124
134
  }
125
135
  withSettings(additionalSettings) {
126
136
  return new CohereTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
127
137
  }
128
- get maxCompletionTokens() {
129
- return this.settings.maxTokens;
130
- }
131
- withMaxCompletionTokens(maxCompletionTokens) {
132
- return this.withSettings({ maxTokens: maxCompletionTokens });
133
- }
134
- withStopTokens(stopTokens) {
135
- // use endSequences instead of stopSequences
136
- // to exclude stop tokens from the generated text
137
- return this.withSettings({ endSequences: stopTokens });
138
- }
139
138
  }
140
139
  const cohereTextGenerationResponseSchema = z.object({
141
140
  id: z.string(),
@@ -19,7 +19,7 @@ const PromptFormatTextGenerationModel_js_1 = require("../../prompt/PromptFormatT
19
19
  * const model = new HuggingFaceTextGenerationModel({
20
20
  * model: "tiiuae/falcon-7b",
21
21
  * temperature: 0.7,
22
- * maxTokens: 500,
22
+ * maxCompletionTokens: 500,
23
23
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
24
24
  * });
25
25
  *
@@ -81,16 +81,21 @@ class HuggingFaceTextGenerationModel extends AbstractModel_js_1.AbstractModel {
81
81
  async callAPI(prompt, options) {
82
82
  const run = options?.run;
83
83
  const settings = options?.settings;
84
- const callSettings = Object.assign({
84
+ const combinedSettings = {
85
+ ...this.settings,
86
+ ...settings,
87
+ };
88
+ const callSettings = {
85
89
  apiKey: this.apiKey,
86
90
  options: {
87
91
  useCache: true,
88
92
  waitForModel: true,
89
93
  },
90
- }, this.settings, settings, {
94
+ ...combinedSettings,
95
+ maxNewTokens: combinedSettings.maxCompletionTokens,
91
96
  abortSignal: run?.abortSignal,
92
97
  inputs: prompt,
93
- });
98
+ };
94
99
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
95
100
  retry: this.settings.retry,
96
101
  throttle: this.settings.throttle,
@@ -112,16 +117,6 @@ class HuggingFaceTextGenerationModel extends AbstractModel_js_1.AbstractModel {
112
117
  withSettings(additionalSettings) {
113
118
  return new HuggingFaceTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
114
119
  }
115
- get maxCompletionTokens() {
116
- return this.settings.maxNewTokens;
117
- }
118
- withMaxCompletionTokens(maxCompletionTokens) {
119
- return this.withSettings({ maxNewTokens: maxCompletionTokens });
120
- }
121
- withStopTokens() {
122
- // stop tokens are not supported by the HuggingFace API
123
- return this;
124
- }
125
120
  }
126
121
  exports.HuggingFaceTextGenerationModel = HuggingFaceTextGenerationModel;
127
122
  const huggingFaceTextGenerationResponseSchema = zod_1.default.array(zod_1.default.object({
@@ -16,7 +16,6 @@ export interface HuggingFaceTextGenerationModelSettings extends TextGenerationMo
16
16
  topP?: number;
17
17
  temperature?: number;
18
18
  repetitionPenalty?: number;
19
- maxNewTokens?: number;
20
19
  maxTime?: number;
21
20
  numReturnSequences?: number;
22
21
  doSample?: boolean;
@@ -34,7 +33,7 @@ export interface HuggingFaceTextGenerationModelSettings extends TextGenerationMo
34
33
  * const model = new HuggingFaceTextGenerationModel({
35
34
  * model: "tiiuae/falcon-7b",
36
35
  * temperature: 0.7,
37
- * maxTokens: 500,
36
+ * maxCompletionTokens: 500,
38
37
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
39
38
  * });
40
39
  *
@@ -60,9 +59,6 @@ export declare class HuggingFaceTextGenerationModel extends AbstractModel<Huggin
60
59
  extractTextDelta: undefined;
61
60
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, HuggingFaceTextGenerationResponse, undefined, HuggingFaceTextGenerationModelSettings, this>;
62
61
  withSettings(additionalSettings: Partial<HuggingFaceTextGenerationModelSettings>): this;
63
- get maxCompletionTokens(): number | undefined;
64
- withMaxCompletionTokens(maxCompletionTokens: number): this;
65
- withStopTokens(): this;
66
62
  }
67
63
  declare const huggingFaceTextGenerationResponseSchema: z.ZodArray<z.ZodObject<{
68
64
  generated_text: z.ZodString;
@@ -13,7 +13,7 @@ import { PromptFormatTextGenerationModel } from "../../prompt/PromptFormatTextGe
13
13
  * const model = new HuggingFaceTextGenerationModel({
14
14
  * model: "tiiuae/falcon-7b",
15
15
  * temperature: 0.7,
16
- * maxTokens: 500,
16
+ * maxCompletionTokens: 500,
17
17
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
18
18
  * });
19
19
  *
@@ -75,16 +75,21 @@ export class HuggingFaceTextGenerationModel extends AbstractModel {
75
75
  async callAPI(prompt, options) {
76
76
  const run = options?.run;
77
77
  const settings = options?.settings;
78
- const callSettings = Object.assign({
78
+ const combinedSettings = {
79
+ ...this.settings,
80
+ ...settings,
81
+ };
82
+ const callSettings = {
79
83
  apiKey: this.apiKey,
80
84
  options: {
81
85
  useCache: true,
82
86
  waitForModel: true,
83
87
  },
84
- }, this.settings, settings, {
88
+ ...combinedSettings,
89
+ maxNewTokens: combinedSettings.maxCompletionTokens,
85
90
  abortSignal: run?.abortSignal,
86
91
  inputs: prompt,
87
- });
92
+ };
88
93
  return callWithRetryAndThrottle({
89
94
  retry: this.settings.retry,
90
95
  throttle: this.settings.throttle,
@@ -106,16 +111,6 @@ export class HuggingFaceTextGenerationModel extends AbstractModel {
106
111
  withSettings(additionalSettings) {
107
112
  return new HuggingFaceTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
108
113
  }
109
- get maxCompletionTokens() {
110
- return this.settings.maxNewTokens;
111
- }
112
- withMaxCompletionTokens(maxCompletionTokens) {
113
- return this.withSettings({ maxNewTokens: maxCompletionTokens });
114
- }
115
- withStopTokens() {
116
- // stop tokens are not supported by the HuggingFace API
117
- return this;
118
- }
119
114
  }
120
115
  const huggingFaceTextGenerationResponseSchema = z.array(z.object({
121
116
  generated_text: z.string(),
@@ -43,11 +43,18 @@ class LlamaCppTextGenerationModel extends AbstractModel_js_1.AbstractModel {
43
43
  }
44
44
  async callAPI(prompt, options) {
45
45
  const { run, settings, responseFormat } = options;
46
- const callSettings = Object.assign(this.settings, settings, {
46
+ const combinedSettings = {
47
+ ...this.settings,
48
+ ...settings,
49
+ };
50
+ const callSettings = {
51
+ ...combinedSettings,
52
+ nPredict: combinedSettings.maxCompletionTokens,
53
+ stop: combinedSettings.stopSequences,
47
54
  abortSignal: run?.abortSignal,
48
55
  prompt,
49
56
  responseFormat,
50
- });
57
+ };
51
58
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
52
59
  retry: this.settings.retry,
53
60
  throttle: this.settings.throttle,
@@ -78,22 +85,15 @@ class LlamaCppTextGenerationModel extends AbstractModel_js_1.AbstractModel {
78
85
  }
79
86
  withPromptFormat(promptFormat) {
80
87
  return new PromptFormatTextGenerationModel_js_1.PromptFormatTextGenerationModel({
81
- model: this.withStopTokens(promptFormat.stopTokens),
88
+ model: this.withSettings({
89
+ stopSequences: promptFormat.stopSequences,
90
+ }),
82
91
  promptFormat,
83
92
  });
84
93
  }
85
94
  withSettings(additionalSettings) {
86
95
  return new LlamaCppTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
87
96
  }
88
- get maxCompletionTokens() {
89
- return this.settings.nPredict;
90
- }
91
- withMaxCompletionTokens(maxCompletionTokens) {
92
- return this.withSettings({ nPredict: maxCompletionTokens });
93
- }
94
- withStopTokens(stopTokens) {
95
- return this.withSettings({ stop: stopTokens });
96
- }
97
97
  }
98
98
  exports.LlamaCppTextGenerationModel = LlamaCppTextGenerationModel;
99
99
  const llamaCppTextGenerationResponseSchema = zod_1.default.object({
@@ -25,9 +25,7 @@ export interface LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE extends
25
25
  temperature?: number;
26
26
  topK?: number;
27
27
  topP?: number;
28
- nPredict?: number;
29
28
  nKeep?: number;
30
- stop?: string[];
31
29
  tfsZ?: number;
32
30
  typicalP?: number;
33
31
  repeatPenalty?: number;
@@ -59,8 +57,8 @@ export declare class LlamaCppTextGenerationModel<CONTEXT_WINDOW_SIZE extends num
59
57
  model: string;
60
58
  stream: boolean;
61
59
  seed: number;
62
- stop: string[];
63
60
  mirostat: number;
61
+ stop: string[];
64
62
  frequency_penalty: number;
65
63
  ignore_eos: boolean;
66
64
  logit_bias: number[];
@@ -104,9 +102,6 @@ export declare class LlamaCppTextGenerationModel<CONTEXT_WINDOW_SIZE extends num
104
102
  extractTextDelta(fullDelta: LlamaCppTextGenerationDelta): string | undefined;
105
103
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, LlamaCppTextGenerationResponse, LlamaCppTextGenerationDelta, LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>, this>;
106
104
  withSettings(additionalSettings: Partial<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>): this;
107
- get maxCompletionTokens(): number | undefined;
108
- withMaxCompletionTokens(maxCompletionTokens: number): this;
109
- withStopTokens(stopTokens: string[]): this;
110
105
  }
111
106
  declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
112
107
  content: z.ZodString;
@@ -139,8 +134,8 @@ declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
139
134
  model: string;
140
135
  stream: boolean;
141
136
  seed: number;
142
- stop: string[];
143
137
  mirostat: number;
138
+ stop: string[];
144
139
  frequency_penalty: number;
145
140
  ignore_eos: boolean;
146
141
  logit_bias: number[];
@@ -163,8 +158,8 @@ declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
163
158
  model: string;
164
159
  stream: boolean;
165
160
  seed: number;
166
- stop: string[];
167
161
  mirostat: number;
162
+ stop: string[];
168
163
  frequency_penalty: number;
169
164
  ignore_eos: boolean;
170
165
  logit_bias: number[];
@@ -231,8 +226,8 @@ declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
231
226
  model: string;
232
227
  stream: boolean;
233
228
  seed: number;
234
- stop: string[];
235
229
  mirostat: number;
230
+ stop: string[];
236
231
  frequency_penalty: number;
237
232
  ignore_eos: boolean;
238
233
  logit_bias: number[];
@@ -279,8 +274,8 @@ declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
279
274
  model: string;
280
275
  stream: boolean;
281
276
  seed: number;
282
- stop: string[];
283
277
  mirostat: number;
278
+ stop: string[];
284
279
  frequency_penalty: number;
285
280
  ignore_eos: boolean;
286
281
  logit_bias: number[];
@@ -344,8 +339,8 @@ export declare const LlamaCppTextGenerationResponseFormat: {
344
339
  model: string;
345
340
  stream: boolean;
346
341
  seed: number;
347
- stop: string[];
348
342
  mirostat: number;
343
+ stop: string[];
349
344
  frequency_penalty: number;
350
345
  ignore_eos: boolean;
351
346
  logit_bias: number[];
@@ -37,11 +37,18 @@ export class LlamaCppTextGenerationModel extends AbstractModel {
37
37
  }
38
38
  async callAPI(prompt, options) {
39
39
  const { run, settings, responseFormat } = options;
40
- const callSettings = Object.assign(this.settings, settings, {
40
+ const combinedSettings = {
41
+ ...this.settings,
42
+ ...settings,
43
+ };
44
+ const callSettings = {
45
+ ...combinedSettings,
46
+ nPredict: combinedSettings.maxCompletionTokens,
47
+ stop: combinedSettings.stopSequences,
41
48
  abortSignal: run?.abortSignal,
42
49
  prompt,
43
50
  responseFormat,
44
- });
51
+ };
45
52
  return callWithRetryAndThrottle({
46
53
  retry: this.settings.retry,
47
54
  throttle: this.settings.throttle,
@@ -72,22 +79,15 @@ export class LlamaCppTextGenerationModel extends AbstractModel {
72
79
  }
73
80
  withPromptFormat(promptFormat) {
74
81
  return new PromptFormatTextGenerationModel({
75
- model: this.withStopTokens(promptFormat.stopTokens),
82
+ model: this.withSettings({
83
+ stopSequences: promptFormat.stopSequences,
84
+ }),
76
85
  promptFormat,
77
86
  });
78
87
  }
79
88
  withSettings(additionalSettings) {
80
89
  return new LlamaCppTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
81
90
  }
82
- get maxCompletionTokens() {
83
- return this.settings.nPredict;
84
- }
85
- withMaxCompletionTokens(maxCompletionTokens) {
86
- return this.withSettings({ nPredict: maxCompletionTokens });
87
- }
88
- withStopTokens(stopTokens) {
89
- return this.withSettings({ stop: stopTokens });
90
- }
91
91
  }
92
92
  const llamaCppTextGenerationResponseSchema = z.object({
93
93
  content: z.string(),
@@ -75,7 +75,7 @@ exports.calculateOpenAITextGenerationCostInMillicents = calculateOpenAITextGener
75
75
  * const model = new OpenAITextGenerationModel({
76
76
  * model: "text-davinci-003",
77
77
  * temperature: 0.7,
78
- * maxTokens: 500,
78
+ * maxCompletionTokens: 500,
79
79
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
80
80
  * });
81
81
  *
@@ -124,14 +124,23 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
124
124
  }
125
125
  async callAPI(prompt, options) {
126
126
  const { run, settings, responseFormat } = options;
127
- const callSettings = Object.assign({
127
+ const combinedSettings = {
128
+ ...this.settings,
129
+ ...settings,
130
+ };
131
+ const callSettings = {
128
132
  apiKey: this.apiKey,
129
133
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
130
- }, this.settings, settings, {
134
+ // Copied settings:
135
+ ...combinedSettings,
136
+ // map to OpenAI API names:
137
+ stop: combinedSettings.stopSequences,
138
+ maxTokens: combinedSettings.maxCompletionTokens,
139
+ // other settings:
131
140
  abortSignal: run?.abortSignal,
132
141
  prompt,
133
142
  responseFormat,
134
- });
143
+ };
135
144
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
136
145
  retry: callSettings.retry,
137
146
  throttle: callSettings.throttle,
@@ -158,22 +167,15 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
158
167
  }
159
168
  withPromptFormat(promptFormat) {
160
169
  return new PromptFormatTextGenerationModel_js_1.PromptFormatTextGenerationModel({
161
- model: this.withStopTokens(promptFormat.stopTokens),
170
+ model: this.withSettings({
171
+ stopSequences: promptFormat.stopSequences,
172
+ }),
162
173
  promptFormat,
163
174
  });
164
175
  }
165
176
  withSettings(additionalSettings) {
166
177
  return new OpenAITextGenerationModel(Object.assign({}, this.settings, additionalSettings));
167
178
  }
168
- get maxCompletionTokens() {
169
- return this.settings.maxTokens;
170
- }
171
- withMaxCompletionTokens(maxCompletionTokens) {
172
- return this.withSettings({ maxTokens: maxCompletionTokens });
173
- }
174
- withStopTokens(stopTokens) {
175
- return this.withSettings({ stop: stopTokens });
176
- }
177
179
  }
178
180
  exports.OpenAITextGenerationModel = OpenAITextGenerationModel;
179
181
  const openAITextGenerationResponseSchema = zod_1.default.object({
@@ -72,13 +72,11 @@ export interface OpenAITextGenerationModelSettings extends TextGenerationModelSe
72
72
  throttle?: ThrottleFunction;
73
73
  isUserIdForwardingEnabled?: boolean;
74
74
  suffix?: string;
75
- maxTokens?: number;
76
75
  temperature?: number;
77
76
  topP?: number;
78
77
  n?: number;
79
78
  logprobs?: number;
80
79
  echo?: boolean;
81
- stop?: string | string[];
82
80
  presencePenalty?: number;
83
81
  frequencyPenalty?: number;
84
82
  bestOf?: number;
@@ -92,7 +90,7 @@ export interface OpenAITextGenerationModelSettings extends TextGenerationModelSe
92
90
  * const model = new OpenAITextGenerationModel({
93
91
  * model: "text-davinci-003",
94
92
  * temperature: 0.7,
95
- * maxTokens: 500,
93
+ * maxCompletionTokens: 500,
96
94
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
97
95
  * });
98
96
  *
@@ -136,9 +134,6 @@ export declare class OpenAITextGenerationModel extends AbstractModel<OpenAITextG
136
134
  extractTextDelta(fullDelta: OpenAITextGenerationDelta): string | undefined;
137
135
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, OpenAITextGenerationResponse, OpenAITextGenerationDelta, OpenAITextGenerationModelSettings, this>;
138
136
  withSettings(additionalSettings: Partial<OpenAITextGenerationModelSettings>): this;
139
- get maxCompletionTokens(): number | undefined;
140
- withMaxCompletionTokens(maxCompletionTokens: number): this;
141
- withStopTokens(stopTokens: string[]): this;
142
137
  }
143
138
  declare const openAITextGenerationResponseSchema: z.ZodObject<{
144
139
  id: z.ZodString;
@@ -67,7 +67,7 @@ export const calculateOpenAITextGenerationCostInMillicents = ({ model, response,
67
67
  * const model = new OpenAITextGenerationModel({
68
68
  * model: "text-davinci-003",
69
69
  * temperature: 0.7,
70
- * maxTokens: 500,
70
+ * maxCompletionTokens: 500,
71
71
  * retry: retryWithExponentialBackoff({ maxTries: 5 }),
72
72
  * });
73
73
  *
@@ -116,14 +116,23 @@ export class OpenAITextGenerationModel extends AbstractModel {
116
116
  }
117
117
  async callAPI(prompt, options) {
118
118
  const { run, settings, responseFormat } = options;
119
- const callSettings = Object.assign({
119
+ const combinedSettings = {
120
+ ...this.settings,
121
+ ...settings,
122
+ };
123
+ const callSettings = {
120
124
  apiKey: this.apiKey,
121
125
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
122
- }, this.settings, settings, {
126
+ // Copied settings:
127
+ ...combinedSettings,
128
+ // map to OpenAI API names:
129
+ stop: combinedSettings.stopSequences,
130
+ maxTokens: combinedSettings.maxCompletionTokens,
131
+ // other settings:
123
132
  abortSignal: run?.abortSignal,
124
133
  prompt,
125
134
  responseFormat,
126
- });
135
+ };
127
136
  return callWithRetryAndThrottle({
128
137
  retry: callSettings.retry,
129
138
  throttle: callSettings.throttle,
@@ -150,22 +159,15 @@ export class OpenAITextGenerationModel extends AbstractModel {
150
159
  }
151
160
  withPromptFormat(promptFormat) {
152
161
  return new PromptFormatTextGenerationModel({
153
- model: this.withStopTokens(promptFormat.stopTokens),
162
+ model: this.withSettings({
163
+ stopSequences: promptFormat.stopSequences,
164
+ }),
154
165
  promptFormat,
155
166
  });
156
167
  }
157
168
  withSettings(additionalSettings) {
158
169
  return new OpenAITextGenerationModel(Object.assign({}, this.settings, additionalSettings));
159
170
  }
160
- get maxCompletionTokens() {
161
- return this.settings.maxTokens;
162
- }
163
- withMaxCompletionTokens(maxCompletionTokens) {
164
- return this.withSettings({ maxTokens: maxCompletionTokens });
165
- }
166
- withStopTokens(stopTokens) {
167
- return this.withSettings({ stop: stopTokens });
168
- }
169
171
  }
170
172
  const openAITextGenerationResponseSchema = z.object({
171
173
  id: z.string(),
@@ -93,7 +93,7 @@ exports.calculateOpenAIChatCostInMillicents = calculateOpenAIChatCostInMillicent
93
93
  * const model = new OpenAIChatModel({
94
94
  * model: "gpt-3.5-turbo",
95
95
  * temperature: 0.7,
96
- * maxTokens: 500,
96
+ * maxCompletionTokens: 500,
97
97
  * });
98
98
  *
99
99
  * const text = await generateText([
@@ -150,14 +150,20 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
150
150
  }
151
151
  async callAPI(messages, options) {
152
152
  const { run, settings, responseFormat } = options;
153
- const callSettings = Object.assign({
153
+ const combinedSettings = {
154
+ ...this.settings,
155
+ ...settings,
156
+ };
157
+ const callSettings = {
154
158
  apiKey: this.apiKey,
155
159
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
156
- }, this.settings, settings, {
160
+ ...combinedSettings,
161
+ stop: combinedSettings.stopSequences,
162
+ maxTokens: combinedSettings.maxCompletionTokens,
157
163
  abortSignal: run?.abortSignal,
158
164
  messages,
159
165
  responseFormat,
160
- });
166
+ };
161
167
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
162
168
  retry: callSettings.retry,
163
169
  throttle: callSettings.throttle,
@@ -207,22 +213,13 @@ class OpenAIChatModel extends AbstractModel_js_1.AbstractModel {
207
213
  }
208
214
  withPromptFormat(promptFormat) {
209
215
  return new PromptFormatTextGenerationModel_js_1.PromptFormatTextGenerationModel({
210
- model: this.withStopTokens(promptFormat.stopTokens),
216
+ model: this.withSettings({ stopSequences: promptFormat.stopSequences }),
211
217
  promptFormat,
212
218
  });
213
219
  }
214
220
  withSettings(additionalSettings) {
215
221
  return new OpenAIChatModel(Object.assign({}, this.settings, additionalSettings));
216
222
  }
217
- get maxCompletionTokens() {
218
- return this.settings.maxTokens;
219
- }
220
- withMaxCompletionTokens(maxCompletionTokens) {
221
- return this.withSettings({ maxTokens: maxCompletionTokens });
222
- }
223
- withStopTokens(stopTokens) {
224
- return this.withSettings({ stop: stopTokens });
225
- }
226
223
  }
227
224
  exports.OpenAIChatModel = OpenAIChatModel;
228
225
  const openAIChatResponseSchema = zod_1.default.object({
@@ -95,7 +95,7 @@ export interface OpenAIChatCallSettings {
95
95
  presencePenalty?: number;
96
96
  frequencyPenalty?: number;
97
97
  }
98
- export interface OpenAIChatSettings extends TextGenerationModelSettings, OpenAIModelSettings, OpenAIChatCallSettings {
98
+ export interface OpenAIChatSettings extends TextGenerationModelSettings, OpenAIModelSettings, Omit<OpenAIChatCallSettings, "stop" | "maxTokens"> {
99
99
  isUserIdForwardingEnabled?: boolean;
100
100
  }
101
101
  /**
@@ -107,7 +107,7 @@ export interface OpenAIChatSettings extends TextGenerationModelSettings, OpenAIM
107
107
  * const model = new OpenAIChatModel({
108
108
  * model: "gpt-3.5-turbo",
109
109
  * temperature: 0.7,
110
- * maxTokens: 500,
110
+ * maxCompletionTokens: 500,
111
111
  * });
112
112
  *
113
113
  * const text = await generateText([
@@ -172,9 +172,6 @@ export declare class OpenAIChatModel extends AbstractModel<OpenAIChatSettings> i
172
172
  extractJson(response: OpenAIChatResponse): unknown;
173
173
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, OpenAIChatMessage[]>): PromptFormatTextGenerationModel<INPUT_PROMPT, OpenAIChatMessage[], OpenAIChatResponse, OpenAIChatDelta, OpenAIChatSettings, this>;
174
174
  withSettings(additionalSettings: Partial<OpenAIChatSettings>): this;
175
- get maxCompletionTokens(): number | undefined;
176
- withMaxCompletionTokens(maxCompletionTokens: number): this;
177
- withStopTokens(stopTokens: string[]): this;
178
175
  }
179
176
  declare const openAIChatResponseSchema: z.ZodObject<{
180
177
  id: z.ZodString;
@@ -85,7 +85,7 @@ export const calculateOpenAIChatCostInMillicents = ({ model, response, }) => res
85
85
  * const model = new OpenAIChatModel({
86
86
  * model: "gpt-3.5-turbo",
87
87
  * temperature: 0.7,
88
- * maxTokens: 500,
88
+ * maxCompletionTokens: 500,
89
89
  * });
90
90
  *
91
91
  * const text = await generateText([
@@ -142,14 +142,20 @@ export class OpenAIChatModel extends AbstractModel {
142
142
  }
143
143
  async callAPI(messages, options) {
144
144
  const { run, settings, responseFormat } = options;
145
- const callSettings = Object.assign({
145
+ const combinedSettings = {
146
+ ...this.settings,
147
+ ...settings,
148
+ };
149
+ const callSettings = {
146
150
  apiKey: this.apiKey,
147
151
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
148
- }, this.settings, settings, {
152
+ ...combinedSettings,
153
+ stop: combinedSettings.stopSequences,
154
+ maxTokens: combinedSettings.maxCompletionTokens,
149
155
  abortSignal: run?.abortSignal,
150
156
  messages,
151
157
  responseFormat,
152
- });
158
+ };
153
159
  return callWithRetryAndThrottle({
154
160
  retry: callSettings.retry,
155
161
  throttle: callSettings.throttle,
@@ -199,22 +205,13 @@ export class OpenAIChatModel extends AbstractModel {
199
205
  }
200
206
  withPromptFormat(promptFormat) {
201
207
  return new PromptFormatTextGenerationModel({
202
- model: this.withStopTokens(promptFormat.stopTokens),
208
+ model: this.withSettings({ stopSequences: promptFormat.stopSequences }),
203
209
  promptFormat,
204
210
  });
205
211
  }
206
212
  withSettings(additionalSettings) {
207
213
  return new OpenAIChatModel(Object.assign({}, this.settings, additionalSettings));
208
214
  }
209
- get maxCompletionTokens() {
210
- return this.settings.maxTokens;
211
- }
212
- withMaxCompletionTokens(maxCompletionTokens) {
213
- return this.withSettings({ maxTokens: maxCompletionTokens });
214
- }
215
- withStopTokens(stopTokens) {
216
- return this.withSettings({ stop: stopTokens });
217
- }
218
215
  }
219
216
  const openAIChatResponseSchema = z.object({
220
217
  id: z.string(),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modelfusion",
3
3
  "description": "Build AI applications, chatbots, and agents with JavaScript and TypeScript.",
4
- "version": "0.14.0",
4
+ "version": "0.16.0",
5
5
  "author": "Lars Grammel",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -67,11 +67,11 @@
67
67
  "eslint": "^8.45.0",
68
68
  "eslint-config-prettier": "9.0.0",
69
69
  "husky": "^8.0.3",
70
- "lint-staged": "14.0.0",
70
+ "lint-staged": "14.0.1",
71
71
  "prettier": "3.0.2",
72
72
  "rimraf": "5.0.1",
73
73
  "typescript": "5.1.6",
74
- "zod": "3.22.1",
74
+ "zod": "3.22.2",
75
75
  "zod-to-json-schema": "3.21.4"
76
76
  },
77
77
  "peerDependencies": {
@@ -12,7 +12,7 @@ const DEFAULT_SYSTEM_PROMPT_NO_INPUT = "Below is an instruction that describes a
12
12
  * @see https://github.com/tatsu-lab/stanford_alpaca#data-release
13
13
  */
14
14
  const AlpacaInstructionPromptFormat = () => ({
15
- stopTokens: [],
15
+ stopSequences: [],
16
16
  format: (instruction) => {
17
17
  let text = instruction.system ??
18
18
  (instruction.input != null
@@ -9,7 +9,7 @@ const DEFAULT_SYSTEM_PROMPT_NO_INPUT = "Below is an instruction that describes a
9
9
  * @see https://github.com/tatsu-lab/stanford_alpaca#data-release
10
10
  */
11
11
  export const AlpacaInstructionPromptFormat = () => ({
12
- stopTokens: [],
12
+ stopSequences: [],
13
13
  format: (instruction) => {
14
14
  let text = instruction.system ??
15
15
  (instruction.input != null
@@ -15,7 +15,7 @@ const END_SYSTEM = "\n<</SYS>>\n\n";
15
15
  * @see https://www.philschmid.de/llama-2#how-to-prompt-llama-2-chat
16
16
  */
17
17
  const Llama2InstructionPromptFormat = () => ({
18
- stopTokens: [END_SEGMENT],
18
+ stopSequences: [END_SEGMENT],
19
19
  format: (instruction) => `${BEGIN_SEGMENT}${BEGIN_INSTRUCTION}${instruction.system != null
20
20
  ? ` ${BEGIN_SYSTEM}${instruction.system}${END_SYSTEM}`
21
21
  : ""} ${instruction.instruction}${instruction.input != null ? `\n\n${instruction.input}` : ""} ${END_INSTRUCTION}\n`,
@@ -54,6 +54,6 @@ const Llama2ChatPromptFormat = () => ({
54
54
  }
55
55
  return text;
56
56
  },
57
- stopTokens: [END_SEGMENT],
57
+ stopSequences: [END_SEGMENT],
58
58
  });
59
59
  exports.Llama2ChatPromptFormat = Llama2ChatPromptFormat;
@@ -12,7 +12,7 @@ const END_SYSTEM = "\n<</SYS>>\n\n";
12
12
  * @see https://www.philschmid.de/llama-2#how-to-prompt-llama-2-chat
13
13
  */
14
14
  export const Llama2InstructionPromptFormat = () => ({
15
- stopTokens: [END_SEGMENT],
15
+ stopSequences: [END_SEGMENT],
16
16
  format: (instruction) => `${BEGIN_SEGMENT}${BEGIN_INSTRUCTION}${instruction.system != null
17
17
  ? ` ${BEGIN_SYSTEM}${instruction.system}${END_SYSTEM}`
18
18
  : ""} ${instruction.instruction}${instruction.input != null ? `\n\n${instruction.input}` : ""} ${END_INSTRUCTION}\n`,
@@ -50,5 +50,5 @@ export const Llama2ChatPromptFormat = () => ({
50
50
  }
51
51
  return text;
52
52
  },
53
- stopTokens: [END_SEGMENT],
53
+ stopSequences: [END_SEGMENT],
54
54
  });
@@ -26,7 +26,7 @@ const OpenAIChatInstructionPromptFormat = () => ({
26
26
  }
27
27
  return messages;
28
28
  },
29
- stopTokens: [],
29
+ stopSequences: [],
30
30
  });
31
31
  exports.OpenAIChatInstructionPromptFormat = OpenAIChatInstructionPromptFormat;
32
32
  /**
@@ -69,6 +69,6 @@ const OpenAIChatChatPromptFormat = () => ({
69
69
  }
70
70
  return messages;
71
71
  },
72
- stopTokens: [],
72
+ stopSequences: [],
73
73
  });
74
74
  exports.OpenAIChatChatPromptFormat = OpenAIChatChatPromptFormat;
@@ -23,7 +23,7 @@ export const OpenAIChatInstructionPromptFormat = () => ({
23
23
  }
24
24
  return messages;
25
25
  },
26
- stopTokens: [],
26
+ stopSequences: [],
27
27
  });
28
28
  /**
29
29
  * Formats a chat prompt as an OpenAI chat prompt.
@@ -65,5 +65,5 @@ export const OpenAIChatChatPromptFormat = () => ({
65
65
  }
66
66
  return messages;
67
67
  },
68
- stopTokens: [],
68
+ stopSequences: [],
69
69
  });
@@ -7,8 +7,8 @@ export interface PromptFormat<SOURCE_PROMPT, TARGET_PROMPT> {
7
7
  */
8
8
  format(sourcePrompt: SOURCE_PROMPT): TARGET_PROMPT;
9
9
  /**
10
- * The tokens that should be used as default stop tokens.
10
+ * The texts that should be used as default stop sequences.
11
11
  * This is e.g. important for chat formats.
12
12
  */
13
- stopTokens: string[];
13
+ stopSequences: string[];
14
14
  }
@@ -59,7 +59,9 @@ class PromptFormatTextGenerationModel {
59
59
  }
60
60
  withPromptFormat(promptFormat) {
61
61
  return new PromptFormatTextGenerationModel({
62
- model: this.withStopTokens(promptFormat.stopTokens),
62
+ model: this.withSettings({
63
+ stopSequences: promptFormat.stopSequences,
64
+ }),
63
65
  promptFormat,
64
66
  });
65
67
  }
@@ -69,20 +71,5 @@ class PromptFormatTextGenerationModel {
69
71
  promptFormat: this.promptFormat,
70
72
  });
71
73
  }
72
- get maxCompletionTokens() {
73
- return this.model.maxCompletionTokens;
74
- }
75
- withMaxCompletionTokens(maxCompletionTokens) {
76
- return new PromptFormatTextGenerationModel({
77
- model: this.model.withMaxCompletionTokens(maxCompletionTokens),
78
- promptFormat: this.promptFormat,
79
- });
80
- }
81
- withStopTokens(stopTokens) {
82
- return new PromptFormatTextGenerationModel({
83
- model: this.model.withStopTokens(stopTokens),
84
- promptFormat: this.promptFormat,
85
- });
86
- }
87
74
  }
88
75
  exports.PromptFormatTextGenerationModel = PromptFormatTextGenerationModel;
@@ -20,7 +20,4 @@ export declare class PromptFormatTextGenerationModel<PROMPT, MODEL_PROMPT, RESPO
20
20
  get extractTextDelta(): MODEL["extractTextDelta"];
21
21
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, PROMPT>): PromptFormatTextGenerationModel<INPUT_PROMPT, PROMPT, RESPONSE, FULL_DELTA, SETTINGS, this>;
22
22
  withSettings(additionalSettings: Partial<SETTINGS>): this;
23
- get maxCompletionTokens(): MODEL["maxCompletionTokens"];
24
- withMaxCompletionTokens(maxCompletionTokens: number): this;
25
- withStopTokens(stopTokens: string[]): this;
26
23
  }
@@ -56,7 +56,9 @@ export class PromptFormatTextGenerationModel {
56
56
  }
57
57
  withPromptFormat(promptFormat) {
58
58
  return new PromptFormatTextGenerationModel({
59
- model: this.withStopTokens(promptFormat.stopTokens),
59
+ model: this.withSettings({
60
+ stopSequences: promptFormat.stopSequences,
61
+ }),
60
62
  promptFormat,
61
63
  });
62
64
  }
@@ -66,19 +68,4 @@ export class PromptFormatTextGenerationModel {
66
68
  promptFormat: this.promptFormat,
67
69
  });
68
70
  }
69
- get maxCompletionTokens() {
70
- return this.model.maxCompletionTokens;
71
- }
72
- withMaxCompletionTokens(maxCompletionTokens) {
73
- return new PromptFormatTextGenerationModel({
74
- model: this.model.withMaxCompletionTokens(maxCompletionTokens),
75
- promptFormat: this.promptFormat,
76
- });
77
- }
78
- withStopTokens(stopTokens) {
79
- return new PromptFormatTextGenerationModel({
80
- model: this.model.withStopTokens(stopTokens),
81
- promptFormat: this.promptFormat,
82
- });
83
- }
84
71
  }
@@ -6,7 +6,7 @@ const validateChatPrompt_js_1 = require("./chat/validateChatPrompt.cjs");
6
6
  * Formats an instruction prompt as a basic text prompt.
7
7
  */
8
8
  const TextInstructionPromptFormat = () => ({
9
- stopTokens: [],
9
+ stopSequences: [],
10
10
  format: (instruction) => {
11
11
  let text = "";
12
12
  if (instruction.system != null) {
@@ -56,6 +56,6 @@ const TextChatPromptFormat = ({ user, ai }) => ({
56
56
  text += `${ai}:\n`;
57
57
  return text;
58
58
  },
59
- stopTokens: [`\n${user}:`],
59
+ stopSequences: [`\n${user}:`],
60
60
  });
61
61
  exports.TextChatPromptFormat = TextChatPromptFormat;
@@ -3,7 +3,7 @@ import { validateChatPrompt } from "./chat/validateChatPrompt.js";
3
3
  * Formats an instruction prompt as a basic text prompt.
4
4
  */
5
5
  export const TextInstructionPromptFormat = () => ({
6
- stopTokens: [],
6
+ stopSequences: [],
7
7
  format: (instruction) => {
8
8
  let text = "";
9
9
  if (instruction.system != null) {
@@ -52,5 +52,5 @@ export const TextChatPromptFormat = ({ user, ai }) => ({
52
52
  text += `${ai}:\n`;
53
53
  return text;
54
54
  },
55
- stopTokens: [`\n${user}:`],
55
+ stopSequences: [`\n${user}:`],
56
56
  });
@@ -50,6 +50,6 @@ const VicunaChatPromptFormat = () => ({
50
50
  text += `ASSISTANT: `;
51
51
  return text;
52
52
  },
53
- stopTokens: [`\nUSER:`],
53
+ stopSequences: [`\nUSER:`],
54
54
  });
55
55
  exports.VicunaChatPromptFormat = VicunaChatPromptFormat;
@@ -47,5 +47,5 @@ export const VicunaChatPromptFormat = () => ({
47
47
  text += `ASSISTANT: `;
48
48
  return text;
49
49
  },
50
- stopTokens: [`\nUSER:`],
50
+ stopSequences: [`\nUSER:`],
51
51
  });
@@ -13,7 +13,7 @@ const validateChatPrompt_js_1 = require("./validateChatPrompt.cjs");
13
13
  * @see https://modelfusion.dev/guide/function/generate-text/prompt-format#limiting-the-chat-length
14
14
  */
15
15
  async function trimChatPrompt({ prompt, model, tokenLimit = model.contextWindowSize -
16
- (model.maxCompletionTokens ?? model.contextWindowSize / 4), }) {
16
+ (model.settings.maxCompletionTokens ?? model.contextWindowSize / 4), }) {
17
17
  (0, validateChatPrompt_js_1.validateChatPrompt)(prompt);
18
18
  const startsWithSystemMessage = "system" in prompt[0];
19
19
  const systemMessage = startsWithSystemMessage ? [prompt[0]] : [];
@@ -10,7 +10,7 @@ import { validateChatPrompt } from "./validateChatPrompt.js";
10
10
  * @see https://modelfusion.dev/guide/function/generate-text/prompt-format#limiting-the-chat-length
11
11
  */
12
12
  export async function trimChatPrompt({ prompt, model, tokenLimit = model.contextWindowSize -
13
- (model.maxCompletionTokens ?? model.contextWindowSize / 4), }) {
13
+ (model.settings.maxCompletionTokens ?? model.contextWindowSize / 4), }) {
14
14
  validateChatPrompt(prompt);
15
15
  const startsWithSystemMessage = "system" in prompt[0];
16
16
  const systemMessage = startsWithSystemMessage ? [prompt[0]] : [];