modelfusion 0.22.0 → 0.24.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 (111) hide show
  1. package/README.md +3 -0
  2. package/core/FunctionOptions.d.ts +14 -0
  3. package/core/GlobalFunctionLogging.cjs +12 -0
  4. package/core/GlobalFunctionLogging.d.ts +3 -0
  5. package/core/GlobalFunctionLogging.js +7 -0
  6. package/core/getFunctionCallLogger.cjs +74 -0
  7. package/core/getFunctionCallLogger.d.ts +3 -0
  8. package/core/getFunctionCallLogger.js +70 -0
  9. package/core/index.cjs +1 -1
  10. package/core/index.d.ts +1 -1
  11. package/core/index.js +1 -1
  12. package/model-function/AbstractModel.d.ts +1 -0
  13. package/model-function/Model.d.ts +6 -1
  14. package/model-function/ModelCallEvent.d.ts +21 -2
  15. package/model-function/embed-text/embedText.d.ts +2 -2
  16. package/model-function/executeCall.cjs +24 -17
  17. package/model-function/executeCall.d.ts +15 -13
  18. package/model-function/executeCall.js +22 -15
  19. package/model-function/generate-image/generateImage.d.ts +1 -1
  20. package/model-function/generate-json/JsonGenerationEvent.d.ts +16 -0
  21. package/model-function/generate-json/JsonGenerationModel.d.ts +13 -0
  22. package/model-function/generate-json/JsonOrTextGenerationModel.d.ts +23 -0
  23. package/model-function/generate-json/JsonTextGenerationModel.cjs +3 -0
  24. package/model-function/generate-json/JsonTextGenerationModel.d.ts +6 -5
  25. package/model-function/generate-json/JsonTextGenerationModel.js +3 -0
  26. package/model-function/generate-json/generateJson.cjs +1 -0
  27. package/model-function/generate-json/generateJson.d.ts +2 -2
  28. package/model-function/generate-json/generateJson.js +1 -0
  29. package/model-function/generate-json/generateJsonOrText.cjs +1 -0
  30. package/model-function/generate-json/generateJsonOrText.d.ts +2 -2
  31. package/model-function/generate-json/generateJsonOrText.js +1 -0
  32. package/model-function/generate-text/TextGenerationEvent.d.ts +5 -2
  33. package/model-function/generate-text/TextGenerationModel.d.ts +5 -0
  34. package/model-function/generate-text/generateText.cjs +1 -0
  35. package/model-function/generate-text/generateText.d.ts +1 -1
  36. package/model-function/generate-text/generateText.js +1 -0
  37. package/model-function/generate-text/streamText.cjs +9 -6
  38. package/model-function/generate-text/streamText.d.ts +5 -5
  39. package/model-function/generate-text/streamText.js +9 -6
  40. package/model-function/index.cjs +3 -2
  41. package/model-function/index.d.ts +3 -2
  42. package/model-function/index.js +3 -2
  43. package/model-function/synthesize-speech/SpeechSynthesisEvent.d.ts +2 -2
  44. package/model-function/synthesize-speech/SpeechSynthesisModel.d.ts +1 -1
  45. package/model-function/synthesize-speech/synthesizeSpeech.d.ts +1 -1
  46. package/model-function/transcribe-speech/TranscriptionModel.d.ts +1 -1
  47. package/model-function/transcribe-speech/transcribe.d.ts +1 -1
  48. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +9 -0
  49. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +1 -0
  50. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +9 -0
  51. package/model-provider/cohere/CohereTextEmbeddingModel.cjs +6 -0
  52. package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +1 -0
  53. package/model-provider/cohere/CohereTextEmbeddingModel.js +6 -0
  54. package/model-provider/cohere/CohereTextGenerationModel.cjs +20 -0
  55. package/model-provider/cohere/CohereTextGenerationModel.d.ts +2 -1
  56. package/model-provider/cohere/CohereTextGenerationModel.js +20 -0
  57. package/model-provider/cohere/CohereTokenizer.d.ts +1 -1
  58. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.cjs +8 -0
  59. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.d.ts +1 -0
  60. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.js +8 -0
  61. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +7 -0
  62. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +1 -0
  63. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +7 -0
  64. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +16 -0
  65. package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +1 -0
  66. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +16 -0
  67. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +6 -0
  68. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +1 -0
  69. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +6 -0
  70. package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +31 -0
  71. package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +6 -0
  72. package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +31 -0
  73. package/model-provider/openai/OpenAIImageGenerationModel.cjs +8 -0
  74. package/model-provider/openai/OpenAIImageGenerationModel.d.ts +1 -0
  75. package/model-provider/openai/OpenAIImageGenerationModel.js +8 -0
  76. package/model-provider/openai/OpenAITextEmbeddingModel.cjs +5 -0
  77. package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +12 -11
  78. package/model-provider/openai/OpenAITextEmbeddingModel.js +5 -0
  79. package/model-provider/openai/OpenAITextGenerationModel.cjs +62 -6
  80. package/model-provider/openai/OpenAITextGenerationModel.d.ts +34 -17
  81. package/model-provider/openai/OpenAITextGenerationModel.js +60 -5
  82. package/model-provider/openai/OpenAITranscriptionModel.cjs +7 -0
  83. package/model-provider/openai/OpenAITranscriptionModel.d.ts +2 -0
  84. package/model-provider/openai/OpenAITranscriptionModel.js +7 -0
  85. package/model-provider/openai/TikTokenTokenizer.d.ts +4 -2
  86. package/model-provider/openai/chat/OpenAIChatModel.cjs +68 -9
  87. package/model-provider/openai/chat/OpenAIChatModel.d.ts +40 -20
  88. package/model-provider/openai/chat/OpenAIChatModel.js +66 -8
  89. package/model-provider/openai/chat/OpenAIChatPrompt.d.ts +2 -2
  90. package/model-provider/openai/chat/countOpenAIChatMessageTokens.cjs +5 -2
  91. package/model-provider/openai/chat/countOpenAIChatMessageTokens.js +5 -2
  92. package/model-provider/stability/StabilityImageGenerationModel.cjs +15 -0
  93. package/model-provider/stability/StabilityImageGenerationModel.d.ts +1 -0
  94. package/model-provider/stability/StabilityImageGenerationModel.js +15 -0
  95. package/package.json +1 -1
  96. package/prompt/PromptFormatTextGenerationModel.cjs +3 -0
  97. package/prompt/PromptFormatTextGenerationModel.d.ts +1 -0
  98. package/prompt/PromptFormatTextGenerationModel.js +3 -0
  99. package/tool/executeTool.cjs +3 -0
  100. package/tool/executeTool.js +3 -0
  101. package/tool/useTool.d.ts +2 -2
  102. package/tool/useToolOrGenerateText.d.ts +2 -2
  103. package/core/ConsoleLogger.cjs +0 -9
  104. package/core/ConsoleLogger.d.ts +0 -5
  105. package/core/ConsoleLogger.js +0 -5
  106. package/model-function/generate-json/GenerateJsonModel.d.ts +0 -8
  107. package/model-function/generate-json/GenerateJsonOrTextModel.d.ts +0 -18
  108. /package/model-function/generate-json/{GenerateJsonModel.cjs → JsonGenerationModel.cjs} +0 -0
  109. /package/model-function/generate-json/{GenerateJsonModel.js → JsonGenerationModel.js} +0 -0
  110. /package/model-function/generate-json/{GenerateJsonOrTextModel.cjs → JsonOrTextGenerationModel.cjs} +0 -0
  111. /package/model-function/generate-json/{GenerateJsonOrTextModel.js → JsonOrTextGenerationModel.js} +0 -0
@@ -96,6 +96,8 @@ export class CohereTextGenerationModel extends AbstractModel {
96
96
  // to exclude stop tokens from the generated text
97
97
  endSequences: combinedSettings.stopSequences,
98
98
  maxTokens: combinedSettings.maxCompletionTokens,
99
+ // mapped name because of conflict with stopSequences:
100
+ stopSequences: combinedSettings.cohereStopSequences,
99
101
  abortSignal: run?.abortSignal,
100
102
  prompt,
101
103
  responseFormat,
@@ -106,6 +108,24 @@ export class CohereTextGenerationModel extends AbstractModel {
106
108
  call: async () => callCohereTextGenerationAPI(callSettings),
107
109
  });
108
110
  }
111
+ get settingsForEvent() {
112
+ const eventSettingProperties = [
113
+ "maxCompletionTokens",
114
+ "stopSequences",
115
+ "baseUrl",
116
+ "numGenerations",
117
+ "temperature",
118
+ "k",
119
+ "p",
120
+ "frequencyPenalty",
121
+ "presencePenalty",
122
+ "returnLikelihoods",
123
+ "logitBias",
124
+ "truncate",
125
+ "cohereStopSequences",
126
+ ];
127
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
128
+ }
109
129
  generateTextResponse(prompt, options) {
110
130
  return this.callAPI(prompt, {
111
131
  ...options,
@@ -4,7 +4,7 @@ import { Run } from "../../core/Run.js";
4
4
  import { RetryFunction } from "../../util/api/RetryFunction.js";
5
5
  import { ThrottleFunction } from "../../util/api/ThrottleFunction.js";
6
6
  import { CohereTextGenerationModelType } from "./CohereTextGenerationModel.js";
7
- import { CohereTextEmbeddingModelType } from "./index.js";
7
+ import { CohereTextEmbeddingModelType } from "./CohereTextEmbeddingModel.js";
8
8
  export type CohereTokenizerModelType = CohereTextGenerationModelType | CohereTextEmbeddingModelType;
9
9
  export interface CohereTokenizerSettings {
10
10
  model: CohereTokenizerModelType;
@@ -49,6 +49,14 @@ class ElevenLabsSpeechSynthesisModel extends AbstractModel_js_1.AbstractModel {
49
49
  }),
50
50
  });
51
51
  }
52
+ get settingsForEvent() {
53
+ return {
54
+ baseUrl: this.settings.baseUrl,
55
+ model: this.settings.model,
56
+ voice: this.settings.voice,
57
+ voiceSettings: this.settings.voiceSettings,
58
+ };
59
+ }
52
60
  generateSpeechResponse(text, options) {
53
61
  return this.callAPI(text, options);
54
62
  }
@@ -24,6 +24,7 @@ export declare class ElevenLabsSpeechSynthesisModel extends AbstractModel<Eleven
24
24
  readonly modelName: null;
25
25
  private get apiKey();
26
26
  private callAPI;
27
+ get settingsForEvent(): Partial<ElevenLabsSpeechSynthesisModelSettings>;
27
28
  generateSpeechResponse(text: string, options?: ModelFunctionOptions<ElevenLabsSpeechSynthesisModelSettings> | undefined): Promise<Buffer>;
28
29
  withSettings(additionalSettings: Partial<ElevenLabsSpeechSynthesisModelSettings>): this;
29
30
  }
@@ -46,6 +46,14 @@ export class ElevenLabsSpeechSynthesisModel extends AbstractModel {
46
46
  }),
47
47
  });
48
48
  }
49
+ get settingsForEvent() {
50
+ return {
51
+ baseUrl: this.settings.baseUrl,
52
+ model: this.settings.model,
53
+ voice: this.settings.voice,
54
+ voiceSettings: this.settings.voiceSettings,
55
+ };
56
+ }
49
57
  generateSpeechResponse(text, options) {
50
58
  return this.callAPI(text, options);
51
59
  }
@@ -104,6 +104,13 @@ class HuggingFaceTextEmbeddingModel extends AbstractModel_js_1.AbstractModel {
104
104
  call: async () => callHuggingFaceTextGenerationAPI(callSettings),
105
105
  });
106
106
  }
107
+ get settingsForEvent() {
108
+ return {
109
+ baseUrl: this.settings.baseUrl,
110
+ embeddingDimensions: this.settings.embeddingDimensions,
111
+ options: this.settings.options,
112
+ };
113
+ }
107
114
  generateEmbeddingResponse(texts, options) {
108
115
  return this.callAPI(texts, options);
109
116
  }
@@ -47,6 +47,7 @@ export declare class HuggingFaceTextEmbeddingModel extends AbstractModel<Hugging
47
47
  readonly tokenizer: undefined;
48
48
  private get apiKey();
49
49
  callAPI(texts: Array<string>, options?: ModelFunctionOptions<HuggingFaceTextEmbeddingModelSettings>): Promise<HuggingFaceTextEmbeddingResponse>;
50
+ get settingsForEvent(): Partial<HuggingFaceTextEmbeddingModelSettings>;
50
51
  readonly countPromptTokens: undefined;
51
52
  generateEmbeddingResponse(texts: string[], options?: ModelFunctionOptions<HuggingFaceTextEmbeddingModelSettings>): Promise<number[][]>;
52
53
  extractEmbeddings(response: HuggingFaceTextEmbeddingResponse): number[][];
@@ -98,6 +98,13 @@ export class HuggingFaceTextEmbeddingModel extends AbstractModel {
98
98
  call: async () => callHuggingFaceTextGenerationAPI(callSettings),
99
99
  });
100
100
  }
101
+ get settingsForEvent() {
102
+ return {
103
+ baseUrl: this.settings.baseUrl,
104
+ embeddingDimensions: this.settings.embeddingDimensions,
105
+ options: this.settings.options,
106
+ };
107
+ }
101
108
  generateEmbeddingResponse(texts, options) {
102
109
  return this.callAPI(texts, options);
103
110
  }
@@ -102,6 +102,22 @@ class HuggingFaceTextGenerationModel extends AbstractModel_js_1.AbstractModel {
102
102
  call: async () => callHuggingFaceTextGenerationAPI(callSettings),
103
103
  });
104
104
  }
105
+ get settingsForEvent() {
106
+ const eventSettingProperties = [
107
+ "stopSequences",
108
+ "maxCompletionTokens",
109
+ "baseUrl",
110
+ "topK",
111
+ "topP",
112
+ "temperature",
113
+ "repetitionPenalty",
114
+ "maxTime",
115
+ "numReturnSequences",
116
+ "doSample",
117
+ "options",
118
+ ];
119
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
120
+ }
105
121
  generateTextResponse(prompt, options) {
106
122
  return this.callAPI(prompt, options);
107
123
  }
@@ -50,6 +50,7 @@ export declare class HuggingFaceTextGenerationModel extends AbstractModel<Huggin
50
50
  readonly tokenizer: undefined;
51
51
  private get apiKey();
52
52
  callAPI(prompt: string, options?: ModelFunctionOptions<HuggingFaceTextGenerationModelSettings>): Promise<HuggingFaceTextGenerationResponse>;
53
+ get settingsForEvent(): Partial<HuggingFaceTextGenerationModelSettings>;
53
54
  readonly countPromptTokens: undefined;
54
55
  generateTextResponse(prompt: string, options?: ModelFunctionOptions<HuggingFaceTextGenerationModelSettings>): Promise<{
55
56
  generated_text: string;
@@ -96,6 +96,22 @@ export class HuggingFaceTextGenerationModel extends AbstractModel {
96
96
  call: async () => callHuggingFaceTextGenerationAPI(callSettings),
97
97
  });
98
98
  }
99
+ get settingsForEvent() {
100
+ const eventSettingProperties = [
101
+ "stopSequences",
102
+ "maxCompletionTokens",
103
+ "baseUrl",
104
+ "topK",
105
+ "topP",
106
+ "temperature",
107
+ "repetitionPenalty",
108
+ "maxTime",
109
+ "numReturnSequences",
110
+ "doSample",
111
+ "options",
112
+ ];
113
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
114
+ }
99
115
  generateTextResponse(prompt, options) {
100
116
  return this.callAPI(prompt, options);
101
117
  }
@@ -72,6 +72,12 @@ class LlamaCppTextEmbeddingModel extends AbstractModel_js_1.AbstractModel {
72
72
  call: async () => callLlamaCppEmbeddingAPI(callSettings),
73
73
  });
74
74
  }
75
+ get settingsForEvent() {
76
+ return {
77
+ baseUrl: this.settings.baseUrl,
78
+ embeddingDimensions: this.settings.embeddingDimensions,
79
+ };
80
+ }
75
81
  generateEmbeddingResponse(texts, options) {
76
82
  return this.callAPI(texts, options);
77
83
  }
@@ -24,6 +24,7 @@ export declare class LlamaCppTextEmbeddingModel extends AbstractModel<LlamaCppTe
24
24
  private readonly tokenizer;
25
25
  tokenize(text: string): Promise<number[]>;
26
26
  callAPI(texts: Array<string>, options?: ModelFunctionOptions<LlamaCppTextEmbeddingModelSettings>): Promise<LlamaCppTextEmbeddingResponse>;
27
+ get settingsForEvent(): Partial<LlamaCppTextEmbeddingModelSettings>;
27
28
  generateEmbeddingResponse(texts: string[], options?: ModelFunctionOptions<LlamaCppTextEmbeddingModelSettings>): Promise<{
28
29
  embedding: number[];
29
30
  }>;
@@ -66,6 +66,12 @@ export class LlamaCppTextEmbeddingModel extends AbstractModel {
66
66
  call: async () => callLlamaCppEmbeddingAPI(callSettings),
67
67
  });
68
68
  }
69
+ get settingsForEvent() {
70
+ return {
71
+ baseUrl: this.settings.baseUrl,
72
+ embeddingDimensions: this.settings.embeddingDimensions,
73
+ };
74
+ }
69
75
  generateEmbeddingResponse(texts, options) {
70
76
  return this.callAPI(texts, options);
71
77
  }
@@ -61,6 +61,30 @@ class LlamaCppTextGenerationModel extends AbstractModel_js_1.AbstractModel {
61
61
  call: async () => callLlamaCppTextGenerationAPI(callSettings),
62
62
  });
63
63
  }
64
+ get settingsForEvent() {
65
+ const eventSettingProperties = [
66
+ "maxCompletionTokens",
67
+ "stopSequences",
68
+ "baseUrl",
69
+ "contextWindowSize",
70
+ "temperature",
71
+ "topK",
72
+ "topP",
73
+ "nKeep",
74
+ "tfsZ",
75
+ "typicalP",
76
+ "repeatPenalty",
77
+ "repeatLastN",
78
+ "penalizeNl",
79
+ "mirostat",
80
+ "mirostatTau",
81
+ "mirostatEta",
82
+ "seed",
83
+ "ignoreEos",
84
+ "logitBias",
85
+ ];
86
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
87
+ }
64
88
  async countPromptTokens(prompt) {
65
89
  const tokens = await this.tokenizer.tokenize(prompt);
66
90
  return tokens.length;
@@ -91,6 +115,13 @@ class LlamaCppTextGenerationModel extends AbstractModel_js_1.AbstractModel {
91
115
  promptFormat,
92
116
  });
93
117
  }
118
+ extractUsage(response) {
119
+ return {
120
+ promptTokens: response.tokens_evaluated,
121
+ completionTokens: response.tokens_predicted,
122
+ totalTokens: response.tokens_evaluated + response.tokens_predicted,
123
+ };
124
+ }
94
125
  withSettings(additionalSettings) {
95
126
  return new LlamaCppTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
96
127
  }
@@ -47,6 +47,7 @@ export declare class LlamaCppTextGenerationModel<CONTEXT_WINDOW_SIZE extends num
47
47
  callAPI<RESPONSE>(prompt: string, options: {
48
48
  responseFormat: LlamaCppTextGenerationResponseFormatType<RESPONSE>;
49
49
  } & ModelFunctionOptions<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>): Promise<RESPONSE>;
50
+ get settingsForEvent(): Partial<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>;
50
51
  countPromptTokens(prompt: string): Promise<number>;
51
52
  generateTextResponse(prompt: string, options?: ModelFunctionOptions<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>): Promise<{
52
53
  model: string;
@@ -101,6 +102,11 @@ export declare class LlamaCppTextGenerationModel<CONTEXT_WINDOW_SIZE extends num
101
102
  generateDeltaStreamResponse(prompt: string, options?: ModelFunctionOptions<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>): Promise<AsyncIterable<DeltaEvent<LlamaCppTextGenerationDelta>>>;
102
103
  extractTextDelta(fullDelta: LlamaCppTextGenerationDelta): string | undefined;
103
104
  withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, LlamaCppTextGenerationResponse, LlamaCppTextGenerationDelta, LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>, this>;
105
+ extractUsage(response: LlamaCppTextGenerationResponse): {
106
+ promptTokens: number;
107
+ completionTokens: number;
108
+ totalTokens: number;
109
+ };
104
110
  withSettings(additionalSettings: Partial<LlamaCppTextGenerationModelSettings<CONTEXT_WINDOW_SIZE>>): this;
105
111
  }
106
112
  declare const llamaCppTextGenerationResponseSchema: z.ZodObject<{
@@ -55,6 +55,30 @@ export class LlamaCppTextGenerationModel extends AbstractModel {
55
55
  call: async () => callLlamaCppTextGenerationAPI(callSettings),
56
56
  });
57
57
  }
58
+ get settingsForEvent() {
59
+ const eventSettingProperties = [
60
+ "maxCompletionTokens",
61
+ "stopSequences",
62
+ "baseUrl",
63
+ "contextWindowSize",
64
+ "temperature",
65
+ "topK",
66
+ "topP",
67
+ "nKeep",
68
+ "tfsZ",
69
+ "typicalP",
70
+ "repeatPenalty",
71
+ "repeatLastN",
72
+ "penalizeNl",
73
+ "mirostat",
74
+ "mirostatTau",
75
+ "mirostatEta",
76
+ "seed",
77
+ "ignoreEos",
78
+ "logitBias",
79
+ ];
80
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
81
+ }
58
82
  async countPromptTokens(prompt) {
59
83
  const tokens = await this.tokenizer.tokenize(prompt);
60
84
  return tokens.length;
@@ -85,6 +109,13 @@ export class LlamaCppTextGenerationModel extends AbstractModel {
85
109
  promptFormat,
86
110
  });
87
111
  }
112
+ extractUsage(response) {
113
+ return {
114
+ promptTokens: response.tokens_evaluated,
115
+ completionTokens: response.tokens_predicted,
116
+ totalTokens: response.tokens_evaluated + response.tokens_predicted,
117
+ };
118
+ }
88
119
  withSettings(additionalSettings) {
89
120
  return new LlamaCppTextGenerationModel(Object.assign({}, this.settings, additionalSettings));
90
121
  }
@@ -68,6 +68,14 @@ class OpenAIImageGenerationModel extends AbstractModel_js_1.AbstractModel {
68
68
  call: async () => callOpenAIImageGenerationAPI(callSettings),
69
69
  });
70
70
  }
71
+ get settingsForEvent() {
72
+ const eventSettingProperties = [
73
+ "baseUrl",
74
+ "n",
75
+ "size",
76
+ ];
77
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
78
+ }
71
79
  generateImageResponse(prompt, options) {
72
80
  return this.callAPI(prompt, {
73
81
  responseFormat: exports.OpenAIImageGenerationResponseFormat.base64Json,
@@ -35,6 +35,7 @@ export declare class OpenAIImageGenerationModel extends AbstractModel<OpenAIImag
35
35
  } & ModelFunctionOptions<Partial<OpenAIImageGenerationCallSettings & OpenAIModelSettings & {
36
36
  user?: string;
37
37
  }>>): Promise<RESULT>;
38
+ get settingsForEvent(): Partial<OpenAIImageGenerationSettings>;
38
39
  generateImageResponse(prompt: string, options?: ModelFunctionOptions<OpenAIImageGenerationSettings>): Promise<{
39
40
  data: {
40
41
  b64_json: string;
@@ -64,6 +64,14 @@ export class OpenAIImageGenerationModel extends AbstractModel {
64
64
  call: async () => callOpenAIImageGenerationAPI(callSettings),
65
65
  });
66
66
  }
67
+ get settingsForEvent() {
68
+ const eventSettingProperties = [
69
+ "baseUrl",
70
+ "n",
71
+ "size",
72
+ ];
73
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
74
+ }
67
75
  generateImageResponse(prompt, options) {
68
76
  return this.callAPI(prompt, {
69
77
  responseFormat: OpenAIImageGenerationResponseFormat.base64Json,
@@ -112,6 +112,11 @@ class OpenAITextEmbeddingModel extends AbstractModel_js_1.AbstractModel {
112
112
  call: async () => callOpenAITextEmbeddingAPI(callSettings),
113
113
  });
114
114
  }
115
+ get settingsForEvent() {
116
+ return {
117
+ baseUrl: this.settings.baseUrl,
118
+ };
119
+ }
115
120
  generateEmbeddingResponse(texts, options) {
116
121
  if (texts.length > this.maxTextsPerCall) {
117
122
  throw new Error(`The OpenAI embedding API only supports ${this.maxTextsPerCall} texts per API call.`);
@@ -51,18 +51,19 @@ export declare class OpenAITextEmbeddingModel extends AbstractModel<OpenAITextEm
51
51
  private get apiKey();
52
52
  countTokens(input: string): Promise<number>;
53
53
  callAPI(text: string, options?: ModelFunctionOptions<OpenAITextEmbeddingModelSettings>): Promise<OpenAITextEmbeddingResponse>;
54
+ get settingsForEvent(): Partial<OpenAITextEmbeddingModelSettings>;
54
55
  generateEmbeddingResponse(texts: string[], options?: ModelFunctionOptions<OpenAITextEmbeddingModelSettings>): Promise<{
55
56
  object: "list";
56
57
  model: string;
58
+ usage: {
59
+ prompt_tokens: number;
60
+ total_tokens: number;
61
+ };
57
62
  data: {
58
63
  object: "embedding";
59
64
  embedding: number[];
60
65
  index: number;
61
66
  }[];
62
- usage: {
63
- prompt_tokens: number;
64
- total_tokens: number;
65
- };
66
67
  }>;
67
68
  extractEmbeddings(response: OpenAITextEmbeddingResponse): number[][];
68
69
  withSettings(additionalSettings: OpenAITextEmbeddingModelSettings): this;
@@ -96,27 +97,27 @@ declare const openAITextEmbeddingResponseSchema: z.ZodObject<{
96
97
  }, "strip", z.ZodTypeAny, {
97
98
  object: "list";
98
99
  model: string;
100
+ usage: {
101
+ prompt_tokens: number;
102
+ total_tokens: number;
103
+ };
99
104
  data: {
100
105
  object: "embedding";
101
106
  embedding: number[];
102
107
  index: number;
103
108
  }[];
109
+ }, {
110
+ object: "list";
111
+ model: string;
104
112
  usage: {
105
113
  prompt_tokens: number;
106
114
  total_tokens: number;
107
115
  };
108
- }, {
109
- object: "list";
110
- model: string;
111
116
  data: {
112
117
  object: "embedding";
113
118
  embedding: number[];
114
119
  index: number;
115
120
  }[];
116
- usage: {
117
- prompt_tokens: number;
118
- total_tokens: number;
119
- };
120
121
  }>;
121
122
  export type OpenAITextEmbeddingResponse = z.infer<typeof openAITextEmbeddingResponseSchema>;
122
123
  export {};
@@ -104,6 +104,11 @@ export class OpenAITextEmbeddingModel extends AbstractModel {
104
104
  call: async () => callOpenAITextEmbeddingAPI(callSettings),
105
105
  });
106
106
  }
107
+ get settingsForEvent() {
108
+ return {
109
+ baseUrl: this.settings.baseUrl,
110
+ };
111
+ }
107
112
  generateEmbeddingResponse(texts, options) {
108
113
  if (texts.length > this.maxTextsPerCall) {
109
114
  throw new Error(`The OpenAI embedding API only supports ${this.maxTextsPerCall} texts per API call.`);
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OpenAITextResponseFormat = exports.OpenAITextGenerationModel = exports.calculateOpenAITextGenerationCostInMillicents = exports.isOpenAITextGenerationModel = exports.OPENAI_TEXT_GENERATION_MODELS = void 0;
6
+ exports.OpenAITextResponseFormat = exports.OpenAITextGenerationModel = exports.calculateOpenAITextGenerationCostInMillicents = exports.isOpenAITextGenerationModel = exports.getOpenAITextGenerationModelInformation = exports.OPENAI_TEXT_GENERATION_MODELS = void 0;
7
7
  const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
8
  const zod_1 = __importDefault(require("zod"));
9
9
  const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
@@ -23,10 +23,12 @@ exports.OPENAI_TEXT_GENERATION_MODELS = {
23
23
  "davinci-002": {
24
24
  contextWindowSize: 16384,
25
25
  tokenCostInMillicents: 0.2,
26
+ fineTunedTokenCostInMillicents: 1.2,
26
27
  },
27
28
  "babbage-002": {
28
29
  contextWindowSize: 16384,
29
30
  tokenCostInMillicents: 0.04,
31
+ fineTunedTokenCostInMillicents: 0.16,
30
32
  },
31
33
  "text-davinci-003": {
32
34
  contextWindowSize: 4096,
@@ -69,10 +71,38 @@ exports.OPENAI_TEXT_GENERATION_MODELS = {
69
71
  tokenCostInMillicents: 0.04,
70
72
  },
71
73
  };
72
- const isOpenAITextGenerationModel = (model) => model in exports.OPENAI_TEXT_GENERATION_MODELS;
74
+ function getOpenAITextGenerationModelInformation(model) {
75
+ // Model is already a base model:
76
+ if (model in exports.OPENAI_TEXT_GENERATION_MODELS) {
77
+ const baseModelInformation = exports.OPENAI_TEXT_GENERATION_MODELS[model];
78
+ return {
79
+ baseModel: model,
80
+ isFineTuned: false,
81
+ contextWindowSize: baseModelInformation.contextWindowSize,
82
+ tokenCostInMillicents: baseModelInformation.tokenCostInMillicents,
83
+ };
84
+ }
85
+ // Extract the base model from the fine-tuned model:
86
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
+ const [_, baseModel, ___, ____, _____] = model.split(":");
88
+ if (["davinci-002", "babbage-002"].includes(baseModel)) {
89
+ const baseModelInformation = exports.OPENAI_TEXT_GENERATION_MODELS[baseModel];
90
+ return {
91
+ baseModel: baseModel,
92
+ isFineTuned: true,
93
+ contextWindowSize: baseModelInformation.contextWindowSize,
94
+ tokenCostInMillicents: baseModelInformation.fineTunedTokenCostInMillicents,
95
+ };
96
+ }
97
+ throw new Error(`Unknown OpenAI chat base model ${baseModel}.`);
98
+ }
99
+ exports.getOpenAITextGenerationModelInformation = getOpenAITextGenerationModelInformation;
100
+ const isOpenAITextGenerationModel = (model) => model in exports.OPENAI_TEXT_GENERATION_MODELS ||
101
+ model.startsWith("ft:davinci-002:") ||
102
+ model.startsWith("ft:babbage-002:");
73
103
  exports.isOpenAITextGenerationModel = isOpenAITextGenerationModel;
74
104
  const calculateOpenAITextGenerationCostInMillicents = ({ model, response, }) => response.usage.total_tokens *
75
- exports.OPENAI_TEXT_GENERATION_MODELS[model].tokenCostInMillicents;
105
+ getOpenAITextGenerationModelInformation(model).tokenCostInMillicents;
76
106
  exports.calculateOpenAITextGenerationCostInMillicents = calculateOpenAITextGenerationCostInMillicents;
77
107
  /**
78
108
  * Create a text generation model that calls the OpenAI text completion API.
@@ -113,9 +143,11 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
113
143
  writable: true,
114
144
  value: void 0
115
145
  });
116
- this.tokenizer = new TikTokenTokenizer_js_1.TikTokenTokenizer({ model: settings.model });
117
- this.contextWindowSize =
118
- exports.OPENAI_TEXT_GENERATION_MODELS[settings.model].contextWindowSize;
146
+ const modelInformation = getOpenAITextGenerationModelInformation(this.settings.model);
147
+ this.tokenizer = new TikTokenTokenizer_js_1.TikTokenTokenizer({
148
+ model: modelInformation.baseModel,
149
+ });
150
+ this.contextWindowSize = modelInformation.contextWindowSize;
119
151
  }
120
152
  get modelName() {
121
153
  return this.settings.model;
@@ -155,6 +187,23 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
155
187
  call: async () => callOpenAITextGenerationAPI(callSettings),
156
188
  });
157
189
  }
190
+ get settingsForEvent() {
191
+ const eventSettingProperties = [
192
+ "maxCompletionTokens",
193
+ "stopSequences",
194
+ "baseUrl",
195
+ "suffix",
196
+ "temperature",
197
+ "topP",
198
+ "n",
199
+ "logprobs",
200
+ "echo",
201
+ "presencePenalty",
202
+ "frequencyPenalty",
203
+ "bestOf",
204
+ ];
205
+ return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
206
+ }
158
207
  generateTextResponse(prompt, options) {
159
208
  return this.callAPI(prompt, {
160
209
  ...options,
@@ -181,6 +230,13 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
181
230
  promptFormat,
182
231
  });
183
232
  }
233
+ extractUsage(response) {
234
+ return {
235
+ promptTokens: response.usage.prompt_tokens,
236
+ completionTokens: response.usage.completion_tokens,
237
+ totalTokens: response.usage.total_tokens,
238
+ };
239
+ }
184
240
  withSettings(additionalSettings) {
185
241
  return new OpenAITextGenerationModel(Object.assign({}, this.settings, additionalSettings));
186
242
  }