@langchain/core 0.1.20 → 0.1.22

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 (70) hide show
  1. package/agents.d.cts +1 -0
  2. package/caches.d.cts +1 -0
  3. package/callbacks/base.d.cts +1 -0
  4. package/callbacks/manager.d.cts +1 -0
  5. package/callbacks/promises.d.cts +1 -0
  6. package/chat_history.d.cts +1 -0
  7. package/dist/load/import_type.cjs +3 -0
  8. package/dist/load/import_type.d.ts +4 -0
  9. package/dist/load/import_type.js +2 -0
  10. package/dist/messages/index.cjs +3 -0
  11. package/dist/messages/index.d.ts +5 -2
  12. package/dist/messages/index.js +3 -0
  13. package/dist/prompt_values.cjs +62 -1
  14. package/dist/prompt_values.d.ts +25 -0
  15. package/dist/prompt_values.js +60 -0
  16. package/dist/prompts/chat.cjs +235 -27
  17. package/dist/prompts/chat.d.ts +35 -10
  18. package/dist/prompts/chat.js +235 -27
  19. package/dist/prompts/image.cjs +115 -0
  20. package/dist/prompts/image.d.ts +56 -0
  21. package/dist/prompts/image.js +111 -0
  22. package/dist/prompts/prompt.d.ts +3 -2
  23. package/dist/prompts/serde.d.ts +2 -1
  24. package/dist/prompts/template.cjs +22 -1
  25. package/dist/prompts/template.d.ts +2 -1
  26. package/dist/prompts/template.js +22 -1
  27. package/dist/runnables/base.cjs +6 -5
  28. package/dist/runnables/base.d.ts +3 -3
  29. package/dist/runnables/base.js +6 -5
  30. package/dist/utils/stream.cjs +3 -0
  31. package/dist/utils/stream.js +3 -0
  32. package/documents.d.cts +1 -0
  33. package/embeddings.d.cts +1 -0
  34. package/example_selectors.d.cts +1 -0
  35. package/language_models/base.d.cts +1 -0
  36. package/language_models/chat_models.d.cts +1 -0
  37. package/language_models/llms.d.cts +1 -0
  38. package/load/serializable.d.cts +1 -0
  39. package/load.d.cts +1 -0
  40. package/memory.d.cts +1 -0
  41. package/messages.d.cts +1 -0
  42. package/output_parsers.d.cts +1 -0
  43. package/outputs.d.cts +1 -0
  44. package/package.json +268 -47
  45. package/prompt_values.d.cts +1 -0
  46. package/prompts.d.cts +1 -0
  47. package/retrievers.d.cts +1 -0
  48. package/runnables.d.cts +1 -0
  49. package/stores.d.cts +1 -0
  50. package/tools.d.cts +1 -0
  51. package/tracers/base.d.cts +1 -0
  52. package/tracers/console.d.cts +1 -0
  53. package/tracers/initialize.d.cts +1 -0
  54. package/tracers/log_stream.d.cts +1 -0
  55. package/tracers/run_collector.d.cts +1 -0
  56. package/tracers/tracer_langchain.d.cts +1 -0
  57. package/tracers/tracer_langchain_v1.d.cts +1 -0
  58. package/utils/async_caller.d.cts +1 -0
  59. package/utils/chunk_array.d.cts +1 -0
  60. package/utils/env.d.cts +1 -0
  61. package/utils/function_calling.d.cts +1 -0
  62. package/utils/hash.d.cts +1 -0
  63. package/utils/json_patch.d.cts +1 -0
  64. package/utils/json_schema.d.cts +1 -0
  65. package/utils/math.d.cts +1 -0
  66. package/utils/stream.d.cts +1 -0
  67. package/utils/testing.d.cts +1 -0
  68. package/utils/tiktoken.d.cts +1 -0
  69. package/utils/types.d.cts +1 -0
  70. package/vectorstores.d.cts +1 -0
package/agents.d.cts ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/agents.js'
package/caches.d.cts ADDED
@@ -0,0 +1 @@
1
+ export * from './dist/caches.js'
@@ -0,0 +1 @@
1
+ export * from '../dist/callbacks/base.js'
@@ -0,0 +1 @@
1
+ export * from '../dist/callbacks/manager.js'
@@ -0,0 +1 @@
1
+ export * from '../dist/callbacks/promises.js'
@@ -0,0 +1 @@
1
+ export * from './dist/chat_history.js'
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // Auto-generated by `scripts/create-entrypoints.js`. Do not edit manually.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export interface OptionalImportMap {
2
+ }
3
+ export interface SecretMap {
4
+ }
@@ -0,0 +1,2 @@
1
+ // Auto-generated by `scripts/create-entrypoints.js`. Do not edit manually.
2
+ export {};
@@ -387,6 +387,9 @@ class ChatMessage extends BaseMessage {
387
387
  static lc_name() {
388
388
  return "ChatMessage";
389
389
  }
390
+ static _chatMessageClass() {
391
+ return ChatMessage;
392
+ }
390
393
  constructor(fields, role) {
391
394
  if (typeof fields === "string") {
392
395
  // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
@@ -16,6 +16,7 @@ export interface StoredGeneration {
16
16
  message?: StoredMessage;
17
17
  }
18
18
  export type MessageType = "human" | "ai" | "generic" | "system" | "function" | "tool";
19
+ type ImageDetail = "auto" | "low" | "high";
19
20
  export type MessageContentText = {
20
21
  type: "text";
21
22
  text: string;
@@ -24,7 +25,7 @@ export type MessageContentImageUrl = {
24
25
  type: "image_url";
25
26
  image_url: string | {
26
27
  url: string;
27
- detail?: "auto" | "low" | "high";
28
+ detail?: ImageDetail;
28
29
  };
29
30
  };
30
31
  export type MessageContentComplex = MessageContentText | MessageContentImageUrl;
@@ -212,12 +213,13 @@ export declare class ToolMessageChunk extends BaseMessageChunk {
212
213
  export declare class ChatMessage extends BaseMessage implements ChatMessageFieldsWithRole {
213
214
  static lc_name(): string;
214
215
  role: string;
216
+ static _chatMessageClass(): typeof ChatMessage;
215
217
  constructor(content: string, role: string);
216
218
  constructor(fields: ChatMessageFieldsWithRole);
217
219
  _getType(): MessageType;
218
220
  static isInstance(message: BaseMessage): message is ChatMessage;
219
221
  }
220
- export type BaseMessageLike = BaseMessage | [StringWithAutocomplete<MessageType | "user" | "assistant">, string] | string;
222
+ export type BaseMessageLike = BaseMessage | [StringWithAutocomplete<MessageType | "user" | "assistant">, MessageContent] | string;
221
223
  export declare function isBaseMessage(messageLike?: unknown): messageLike is BaseMessage;
222
224
  export declare function isBaseMessageChunk(messageLike?: unknown): messageLike is BaseMessageChunk;
223
225
  export declare function coerceMessageLikeToMessage(messageLike: BaseMessageLike): BaseMessage;
@@ -255,3 +257,4 @@ export declare function mapStoredMessagesToChatMessages(messages: StoredMessage[
255
257
  * is used to prepare chat messages for storage.
256
258
  */
257
259
  export declare function mapChatMessagesToStoredMessages(messages: BaseMessage[]): StoredMessage[];
260
+ export {};
@@ -372,6 +372,9 @@ export class ChatMessage extends BaseMessage {
372
372
  static lc_name() {
373
373
  return "ChatMessage";
374
374
  }
375
+ static _chatMessageClass() {
376
+ return ChatMessage;
377
+ }
375
378
  constructor(fields, role) {
376
379
  if (typeof fields === "string") {
377
380
  // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-non-null-assertion
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChatPromptValue = exports.StringPromptValue = exports.BasePromptValue = void 0;
3
+ exports.ImagePromptValue = exports.ChatPromptValue = exports.StringPromptValue = exports.BasePromptValue = void 0;
4
4
  const serializable_js_1 = require("./load/serializable.cjs");
5
5
  const index_js_1 = require("./messages/index.cjs");
6
6
  /**
@@ -89,3 +89,64 @@ class ChatPromptValue extends BasePromptValue {
89
89
  }
90
90
  }
91
91
  exports.ChatPromptValue = ChatPromptValue;
92
+ /**
93
+ * Class that represents an image prompt value. It extends the
94
+ * BasePromptValue and includes an ImageURL instance.
95
+ */
96
+ class ImagePromptValue extends BasePromptValue {
97
+ static lc_name() {
98
+ return "ImagePromptValue";
99
+ }
100
+ constructor(fields) {
101
+ if (!("imageUrl" in fields)) {
102
+ // eslint-disable-next-line no-param-reassign
103
+ fields = { imageUrl: fields };
104
+ }
105
+ super(fields);
106
+ Object.defineProperty(this, "lc_namespace", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: ["langchain_core", "prompt_values"]
111
+ });
112
+ Object.defineProperty(this, "lc_serializable", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: true
117
+ });
118
+ Object.defineProperty(this, "imageUrl", {
119
+ enumerable: true,
120
+ configurable: true,
121
+ writable: true,
122
+ value: void 0
123
+ });
124
+ /** @ignore */
125
+ Object.defineProperty(this, "value", {
126
+ enumerable: true,
127
+ configurable: true,
128
+ writable: true,
129
+ value: void 0
130
+ });
131
+ this.imageUrl = fields.imageUrl;
132
+ }
133
+ toString() {
134
+ return this.imageUrl.url;
135
+ }
136
+ toChatMessages() {
137
+ return [
138
+ new index_js_1.HumanMessage({
139
+ content: [
140
+ {
141
+ type: "image_url",
142
+ image_url: {
143
+ detail: this.imageUrl.detail,
144
+ url: this.imageUrl.url,
145
+ },
146
+ },
147
+ ],
148
+ }),
149
+ ];
150
+ }
151
+ }
152
+ exports.ImagePromptValue = ImagePromptValue;
@@ -50,3 +50,28 @@ export declare class ChatPromptValue extends BasePromptValue implements ChatProm
50
50
  toString(): string;
51
51
  toChatMessages(): BaseMessage[];
52
52
  }
53
+ export type ImageContent = {
54
+ /** Specifies the detail level of the image. */
55
+ detail?: "auto" | "low" | "high";
56
+ /** Either a URL of the image or the base64 encoded image data. */
57
+ url: string;
58
+ };
59
+ export interface ImagePromptValueFields {
60
+ imageUrl: ImageContent;
61
+ }
62
+ /**
63
+ * Class that represents an image prompt value. It extends the
64
+ * BasePromptValue and includes an ImageURL instance.
65
+ */
66
+ export declare class ImagePromptValue extends BasePromptValue {
67
+ lc_namespace: string[];
68
+ lc_serializable: boolean;
69
+ static lc_name(): string;
70
+ imageUrl: ImageContent;
71
+ /** @ignore */
72
+ value: string;
73
+ constructor(fields: ImagePromptValueFields);
74
+ constructor(fields: ImageContent);
75
+ toString(): string;
76
+ toChatMessages(): HumanMessage[];
77
+ }
@@ -83,3 +83,63 @@ export class ChatPromptValue extends BasePromptValue {
83
83
  return this.messages;
84
84
  }
85
85
  }
86
+ /**
87
+ * Class that represents an image prompt value. It extends the
88
+ * BasePromptValue and includes an ImageURL instance.
89
+ */
90
+ export class ImagePromptValue extends BasePromptValue {
91
+ static lc_name() {
92
+ return "ImagePromptValue";
93
+ }
94
+ constructor(fields) {
95
+ if (!("imageUrl" in fields)) {
96
+ // eslint-disable-next-line no-param-reassign
97
+ fields = { imageUrl: fields };
98
+ }
99
+ super(fields);
100
+ Object.defineProperty(this, "lc_namespace", {
101
+ enumerable: true,
102
+ configurable: true,
103
+ writable: true,
104
+ value: ["langchain_core", "prompt_values"]
105
+ });
106
+ Object.defineProperty(this, "lc_serializable", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: true
111
+ });
112
+ Object.defineProperty(this, "imageUrl", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: void 0
117
+ });
118
+ /** @ignore */
119
+ Object.defineProperty(this, "value", {
120
+ enumerable: true,
121
+ configurable: true,
122
+ writable: true,
123
+ value: void 0
124
+ });
125
+ this.imageUrl = fields.imageUrl;
126
+ }
127
+ toString() {
128
+ return this.imageUrl.url;
129
+ }
130
+ toChatMessages() {
131
+ return [
132
+ new HumanMessage({
133
+ content: [
134
+ {
135
+ type: "image_url",
136
+ image_url: {
137
+ detail: this.imageUrl.detail,
138
+ url: this.imageUrl.url,
139
+ },
140
+ },
141
+ ],
142
+ }),
143
+ ];
144
+ }
145
+ }
@@ -6,8 +6,11 @@ exports.ChatPromptTemplate = exports.SystemMessagePromptTemplate = exports.AIMes
6
6
  const index_js_1 = require("../messages/index.cjs");
7
7
  const prompt_values_js_1 = require("../prompt_values.cjs");
8
8
  const base_js_1 = require("../runnables/base.cjs");
9
+ const string_js_1 = require("./string.cjs");
9
10
  const base_js_2 = require("./base.cjs");
10
11
  const prompt_js_1 = require("./prompt.cjs");
12
+ const image_js_1 = require("./image.cjs");
13
+ const template_js_1 = require("./template.cjs");
11
14
  /**
12
15
  * Abstract class that serves as a base for creating message prompt
13
16
  * templates. It defines how to format messages for different roles in a
@@ -176,6 +179,210 @@ class ChatMessagePromptTemplate extends BaseMessageStringPromptTemplate {
176
179
  }
177
180
  }
178
181
  exports.ChatMessagePromptTemplate = ChatMessagePromptTemplate;
182
+ class _StringImageMessagePromptTemplate extends BaseMessagePromptTemplate {
183
+ static _messageClass() {
184
+ throw new Error("Can not invoke _messageClass from inside _StringImageMessagePromptTemplate");
185
+ }
186
+ constructor(
187
+ /** @TODO When we come up with a better way to type prompt templates, fix this */
188
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
189
+ fields, additionalOptions) {
190
+ if (!("prompt" in fields)) {
191
+ // eslint-disable-next-line no-param-reassign
192
+ fields = { prompt: fields };
193
+ }
194
+ super(fields);
195
+ Object.defineProperty(this, "lc_namespace", {
196
+ enumerable: true,
197
+ configurable: true,
198
+ writable: true,
199
+ value: ["langchain_core", "prompts", "chat"]
200
+ });
201
+ Object.defineProperty(this, "lc_serializable", {
202
+ enumerable: true,
203
+ configurable: true,
204
+ writable: true,
205
+ value: true
206
+ });
207
+ Object.defineProperty(this, "inputVariables", {
208
+ enumerable: true,
209
+ configurable: true,
210
+ writable: true,
211
+ value: []
212
+ });
213
+ Object.defineProperty(this, "additionalOptions", {
214
+ enumerable: true,
215
+ configurable: true,
216
+ writable: true,
217
+ value: {}
218
+ });
219
+ Object.defineProperty(this, "prompt", {
220
+ enumerable: true,
221
+ configurable: true,
222
+ writable: true,
223
+ value: void 0
224
+ });
225
+ Object.defineProperty(this, "messageClass", {
226
+ enumerable: true,
227
+ configurable: true,
228
+ writable: true,
229
+ value: void 0
230
+ });
231
+ // ChatMessage contains role field, others don't.
232
+ // Because of this, we have a separate class property for ChatMessage.
233
+ Object.defineProperty(this, "chatMessageClass", {
234
+ enumerable: true,
235
+ configurable: true,
236
+ writable: true,
237
+ value: void 0
238
+ });
239
+ this.prompt = fields.prompt;
240
+ if (Array.isArray(this.prompt)) {
241
+ let inputVariables = [];
242
+ this.prompt.forEach((prompt) => {
243
+ if ("inputVariables" in prompt) {
244
+ inputVariables = inputVariables.concat(prompt.inputVariables);
245
+ }
246
+ });
247
+ this.inputVariables = inputVariables;
248
+ }
249
+ else {
250
+ this.inputVariables = this.prompt.inputVariables;
251
+ }
252
+ this.additionalOptions = additionalOptions ?? this.additionalOptions;
253
+ }
254
+ createMessage(content) {
255
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
256
+ const constructor = this.constructor;
257
+ if (constructor._messageClass()) {
258
+ const MsgClass = constructor._messageClass();
259
+ return new MsgClass({ content });
260
+ }
261
+ else if (constructor.chatMessageClass) {
262
+ const MsgClass = constructor.chatMessageClass();
263
+ // Assuming ChatMessage constructor also takes a content argument
264
+ return new MsgClass({
265
+ content,
266
+ role: this.getRoleFromMessageClass(MsgClass.lc_name()),
267
+ });
268
+ }
269
+ else {
270
+ throw new Error("No message class defined");
271
+ }
272
+ }
273
+ getRoleFromMessageClass(name) {
274
+ switch (name) {
275
+ case "HumanMessage":
276
+ return "human";
277
+ case "AIMessage":
278
+ return "ai";
279
+ case "SystemMessage":
280
+ return "system";
281
+ case "ChatMessage":
282
+ return "chat";
283
+ default:
284
+ throw new Error("Invalid message class name");
285
+ }
286
+ }
287
+ static fromTemplate(template, additionalOptions) {
288
+ if (typeof template === "string") {
289
+ return new this(prompt_js_1.PromptTemplate.fromTemplate(template));
290
+ }
291
+ const prompt = [];
292
+ for (const item of template) {
293
+ if (typeof item === "string" ||
294
+ (typeof item === "object" && "text" in item)) {
295
+ let text = "";
296
+ if (typeof item === "string") {
297
+ text = item;
298
+ }
299
+ else if (typeof item.text === "string") {
300
+ text = item.text ?? "";
301
+ }
302
+ prompt.push(prompt_js_1.PromptTemplate.fromTemplate(text));
303
+ }
304
+ else if (typeof item === "object" && "image_url" in item) {
305
+ let imgTemplate = item.image_url ?? "";
306
+ let imgTemplateObject;
307
+ let inputVariables = [];
308
+ if (typeof imgTemplate === "string") {
309
+ const parsedTemplate = (0, template_js_1.parseFString)(imgTemplate);
310
+ const variables = parsedTemplate.flatMap((item) => item.type === "variable" ? [item.name] : []);
311
+ if (variables) {
312
+ if (variables.length > 1) {
313
+ throw new Error(`Only one format variable allowed per image template.\nGot: ${variables}\nFrom: ${imgTemplate}`);
314
+ }
315
+ inputVariables = [variables[0]];
316
+ }
317
+ else {
318
+ inputVariables = [];
319
+ }
320
+ imgTemplate = { url: imgTemplate };
321
+ imgTemplateObject = new image_js_1.ImagePromptTemplate({
322
+ template: imgTemplate,
323
+ inputVariables,
324
+ });
325
+ }
326
+ else if (typeof imgTemplate === "object") {
327
+ if ("url" in imgTemplate) {
328
+ const parsedTemplate = (0, template_js_1.parseFString)(imgTemplate.url);
329
+ inputVariables = parsedTemplate.flatMap((item) => item.type === "variable" ? [item.name] : []);
330
+ }
331
+ else {
332
+ inputVariables = [];
333
+ }
334
+ imgTemplateObject = new image_js_1.ImagePromptTemplate({
335
+ template: imgTemplate,
336
+ inputVariables,
337
+ });
338
+ }
339
+ else {
340
+ throw new Error("Invalid image template");
341
+ }
342
+ prompt.push(imgTemplateObject);
343
+ }
344
+ }
345
+ return new this({ prompt, additionalOptions });
346
+ }
347
+ async format(input) {
348
+ // eslint-disable-next-line no-instanceof/no-instanceof
349
+ if (this.prompt instanceof string_js_1.BaseStringPromptTemplate) {
350
+ const text = await this.prompt.format(input);
351
+ return this.createMessage(text);
352
+ }
353
+ else {
354
+ const content = [];
355
+ for (const prompt of this.prompt) {
356
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
+ let inputs = {};
358
+ if (!("inputVariables" in prompt)) {
359
+ throw new Error(`Prompt ${prompt} does not have inputVariables defined.`);
360
+ }
361
+ for (const item of prompt.inputVariables) {
362
+ if (!inputs) {
363
+ inputs = { [item]: input[item] };
364
+ }
365
+ inputs = { ...inputs, [item]: input[item] };
366
+ }
367
+ // eslint-disable-next-line no-instanceof/no-instanceof
368
+ if (prompt instanceof string_js_1.BaseStringPromptTemplate) {
369
+ const formatted = await prompt.format(inputs);
370
+ content.push({ type: "text", text: formatted });
371
+ /** @TODO replace this */
372
+ // eslint-disable-next-line no-instanceof/no-instanceof
373
+ }
374
+ else if (prompt instanceof image_js_1.ImagePromptTemplate) {
375
+ const formatted = await prompt.format(inputs);
376
+ content.push({ type: "image_url", image_url: formatted });
377
+ }
378
+ }
379
+ return this.createMessage(content);
380
+ }
381
+ }
382
+ async formatMessages(values) {
383
+ return [await this.format(values)];
384
+ }
385
+ }
179
386
  /**
180
387
  * Class that represents a human message prompt template. It extends the
181
388
  * BaseMessageStringPromptTemplate.
@@ -190,32 +397,26 @@ exports.ChatMessagePromptTemplate = ChatMessagePromptTemplate;
190
397
  * });
191
398
  * ```
192
399
  */
193
- class HumanMessagePromptTemplate extends BaseMessageStringPromptTemplate {
400
+ class HumanMessagePromptTemplate extends _StringImageMessagePromptTemplate {
401
+ static _messageClass() {
402
+ return index_js_1.HumanMessage;
403
+ }
194
404
  static lc_name() {
195
405
  return "HumanMessagePromptTemplate";
196
406
  }
197
- async format(values) {
198
- return new index_js_1.HumanMessage(await this.prompt.format(values));
199
- }
200
- static fromTemplate(template) {
201
- return new this(prompt_js_1.PromptTemplate.fromTemplate(template));
202
- }
203
407
  }
204
408
  exports.HumanMessagePromptTemplate = HumanMessagePromptTemplate;
205
409
  /**
206
410
  * Class that represents an AI message prompt template. It extends the
207
411
  * BaseMessageStringPromptTemplate.
208
412
  */
209
- class AIMessagePromptTemplate extends BaseMessageStringPromptTemplate {
413
+ class AIMessagePromptTemplate extends _StringImageMessagePromptTemplate {
414
+ static _messageClass() {
415
+ return index_js_1.AIMessage;
416
+ }
210
417
  static lc_name() {
211
418
  return "AIMessagePromptTemplate";
212
419
  }
213
- async format(values) {
214
- return new index_js_1.AIMessage(await this.prompt.format(values));
215
- }
216
- static fromTemplate(template) {
217
- return new this(prompt_js_1.PromptTemplate.fromTemplate(template));
218
- }
219
420
  }
220
421
  exports.AIMessagePromptTemplate = AIMessagePromptTemplate;
221
422
  /**
@@ -232,16 +433,13 @@ exports.AIMessagePromptTemplate = AIMessagePromptTemplate;
232
433
  * });
233
434
  * ```
234
435
  */
235
- class SystemMessagePromptTemplate extends BaseMessageStringPromptTemplate {
436
+ class SystemMessagePromptTemplate extends _StringImageMessagePromptTemplate {
437
+ static _messageClass() {
438
+ return index_js_1.SystemMessage;
439
+ }
236
440
  static lc_name() {
237
441
  return "SystemMessagePromptTemplate";
238
442
  }
239
- async format(values) {
240
- return new index_js_1.SystemMessage(await this.prompt.format(values));
241
- }
242
- static fromTemplate(template) {
243
- return new this(prompt_js_1.PromptTemplate.fromTemplate(template));
244
- }
245
443
  }
246
444
  exports.SystemMessagePromptTemplate = SystemMessagePromptTemplate;
247
445
  function _isBaseMessagePromptTemplate(baseMessagePromptTemplateLike) {
@@ -350,16 +548,26 @@ class ChatPromptTemplate extends BaseChatPromptTemplate {
350
548
  return message;
351
549
  }
352
550
  const formattedMessageContent = await Promise.all(message.content.map(async (item) => {
353
- if (item.type !== "image_url" ||
354
- typeof item.image_url === "string" ||
355
- !item.image_url?.url) {
551
+ if (item.type !== "image_url") {
356
552
  return item;
357
553
  }
358
- const imageUrl = item.image_url.url;
554
+ let imageUrl = "";
555
+ if (typeof item.image_url === "string") {
556
+ imageUrl = item.image_url;
557
+ }
558
+ else {
559
+ imageUrl = item.image_url.url;
560
+ }
359
561
  const promptTemplatePlaceholder = prompt_js_1.PromptTemplate.fromTemplate(imageUrl);
360
562
  const formattedUrl = await promptTemplatePlaceholder.format(inputValues);
361
- // eslint-disable-next-line no-param-reassign
362
- item.image_url.url = formattedUrl;
563
+ if (typeof item.image_url !== "string" && "url" in item.image_url) {
564
+ // eslint-disable-next-line no-param-reassign
565
+ item.image_url.url = formattedUrl;
566
+ }
567
+ else {
568
+ // eslint-disable-next-line no-param-reassign
569
+ item.image_url = formattedUrl;
570
+ }
363
571
  return item;
364
572
  }));
365
573
  // eslint-disable-next-line no-param-reassign
@@ -1,11 +1,12 @@
1
1
  import type { BaseCallbackConfig } from "../callbacks/manager.js";
2
- import { BaseMessage, type BaseMessageLike } from "../messages/index.js";
2
+ import { AIMessage, HumanMessage, SystemMessage, BaseMessage, ChatMessage, type BaseMessageLike, MessageContent } from "../messages/index.js";
3
3
  import { type ChatPromptValueInterface } from "../prompt_values.js";
4
4
  import type { InputValues, PartialValues } from "../utils/types.js";
5
5
  import { Runnable } from "../runnables/base.js";
6
6
  import { BaseStringPromptTemplate } from "./string.js";
7
7
  import { BasePromptTemplate, type BasePromptTemplateInput, type TypedPromptInputValues } from "./base.js";
8
8
  import { type ParamsFromFString } from "./prompt.js";
9
+ import { ImagePromptTemplate } from "./image.js";
9
10
  /**
10
11
  * Abstract class that serves as a base for creating message prompt
11
12
  * templates. It defines how to format messages for different roles in a
@@ -97,6 +98,32 @@ export declare class ChatMessagePromptTemplate<RunInput extends InputValues = an
97
98
  format(values: RunInput): Promise<BaseMessage>;
98
99
  static fromTemplate(template: string, role: string): ChatMessagePromptTemplate<any>;
99
100
  }
101
+ interface _TextTemplateParam {
102
+ text?: string | Record<string, any>;
103
+ }
104
+ interface _ImageTemplateParam {
105
+ image_url?: string | Record<string, any>;
106
+ }
107
+ type MessageClass = typeof HumanMessage | typeof AIMessage | typeof SystemMessage;
108
+ type ChatMessageClass = typeof ChatMessage;
109
+ declare class _StringImageMessagePromptTemplate<RunInput extends InputValues = any, RunOutput extends BaseMessage[] = BaseMessage[]> extends BaseMessagePromptTemplate<RunInput, RunOutput> {
110
+ lc_namespace: string[];
111
+ lc_serializable: boolean;
112
+ inputVariables: Array<Extract<keyof RunInput, string>>;
113
+ additionalOptions: Record<string, unknown>;
114
+ prompt: BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | Array<BaseStringPromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | ImagePromptTemplate<InputValues<Extract<keyof RunInput, string>>, string> | MessageStringPromptTemplateFields<InputValues<Extract<keyof RunInput, string>>>>;
115
+ protected messageClass?: MessageClass;
116
+ static _messageClass(): MessageClass;
117
+ protected chatMessageClass?: ChatMessageClass;
118
+ constructor(
119
+ /** @TODO When we come up with a better way to type prompt templates, fix this */
120
+ fields: any, additionalOptions?: Record<string, unknown>);
121
+ createMessage(content: MessageContent): any;
122
+ getRoleFromMessageClass(name: string): "human" | "ai" | "system" | "chat";
123
+ static fromTemplate(template: string | Array<string | _TextTemplateParam | _ImageTemplateParam>, additionalOptions?: Record<string, unknown>): _StringImageMessagePromptTemplate<any, BaseMessage[]>;
124
+ format(input: TypedPromptInputValues<RunInput>): Promise<BaseMessage>;
125
+ formatMessages(values: RunInput): Promise<RunOutput>;
126
+ }
100
127
  /**
101
128
  * Class that represents a human message prompt template. It extends the
102
129
  * BaseMessageStringPromptTemplate.
@@ -111,19 +138,17 @@ export declare class ChatMessagePromptTemplate<RunInput extends InputValues = an
111
138
  * });
112
139
  * ```
113
140
  */
114
- export declare class HumanMessagePromptTemplate<RunInput extends InputValues = any> extends BaseMessageStringPromptTemplate<RunInput> {
141
+ export declare class HumanMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
142
+ static _messageClass(): typeof HumanMessage;
115
143
  static lc_name(): string;
116
- format(values: RunInput): Promise<BaseMessage>;
117
- static fromTemplate(template: string): HumanMessagePromptTemplate<any>;
118
144
  }
119
145
  /**
120
146
  * Class that represents an AI message prompt template. It extends the
121
147
  * BaseMessageStringPromptTemplate.
122
148
  */
123
- export declare class AIMessagePromptTemplate<RunInput extends InputValues = any> extends BaseMessageStringPromptTemplate<RunInput> {
149
+ export declare class AIMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
150
+ static _messageClass(): typeof AIMessage;
124
151
  static lc_name(): string;
125
- format(values: RunInput): Promise<BaseMessage>;
126
- static fromTemplate(template: string): AIMessagePromptTemplate<any>;
127
152
  }
128
153
  /**
129
154
  * Class that represents a system message prompt template. It extends the
@@ -139,10 +164,9 @@ export declare class AIMessagePromptTemplate<RunInput extends InputValues = any>
139
164
  * });
140
165
  * ```
141
166
  */
142
- export declare class SystemMessagePromptTemplate<RunInput extends InputValues = any> extends BaseMessageStringPromptTemplate<RunInput> {
167
+ export declare class SystemMessagePromptTemplate<RunInput extends InputValues = any> extends _StringImageMessagePromptTemplate<RunInput> {
168
+ static _messageClass(): typeof SystemMessage;
143
169
  static lc_name(): string;
144
- format(values: RunInput): Promise<BaseMessage>;
145
- static fromTemplate(template: string): SystemMessagePromptTemplate<any>;
146
170
  }
147
171
  /**
148
172
  * Interface for the input of a ChatPromptTemplate.
@@ -202,3 +226,4 @@ export declare class ChatPromptTemplate<RunInput extends InputValues = any, Part
202
226
  /** @deprecated Renamed to .fromMessages */
203
227
  static fromPromptMessages<RunInput extends InputValues = any>(promptMessages: (ChatPromptTemplate<InputValues, string> | BaseMessagePromptTemplateLike)[]): ChatPromptTemplate<RunInput>;
204
228
  }
229
+ export {};