@sprucelabs/sprucebot-llm 11.1.20 → 11.2.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.
@@ -2,11 +2,14 @@ import { ChatCompletionMessageParam } from 'openai/resources';
2
2
  import { SprucebotLlmBot } from '../../llm.types';
3
3
  export default class OpenAiMessageBuilder {
4
4
  private bot;
5
+ private imagesFound;
6
+ private totalImages;
5
7
  protected constructor(bot: SprucebotLlmBot);
6
8
  static Builder(bot: SprucebotLlmBot): OpenAiMessageBuilder;
7
9
  buildMessages(): ChatCompletionMessageParam[];
8
10
  private buildChatHistoryMessages;
9
11
  private mapMessageToCompletion;
12
+ private shouldRememberImages;
10
13
  private buildFirstMessage;
11
14
  private buildSkillMessages;
12
15
  private buildCallbacksMessage;
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const templates_1 = require("../templates");
4
4
  class OpenAiMessageBuilder {
5
5
  constructor(bot) {
6
+ this.imagesFound = 0;
7
+ this.totalImages = 0;
6
8
  this.bot = bot;
7
9
  }
8
10
  static Builder(bot) {
@@ -23,6 +25,8 @@ class OpenAiMessageBuilder {
23
25
  if (limit > 0) {
24
26
  messagesBeingConsidered = messages.slice(Math.max(messages.length - limit, 0));
25
27
  }
28
+ this.totalImages = messagesBeingConsidered.filter((m) => m.imageBase64).length;
29
+ this.imagesFound = 0;
26
30
  return messagesBeingConsidered.map((message) => this.mapMessageToCompletion(message));
27
31
  }
28
32
  mapMessageToCompletion(message) {
@@ -34,17 +38,25 @@ class OpenAiMessageBuilder {
34
38
  : 'developer';
35
39
  if (message.imageBase64) {
36
40
  role = 'user';
41
+ this.imagesFound++;
42
+ const shouldBeIncluded = this.shouldRememberImages() ||
43
+ this.imagesFound === this.totalImages;
37
44
  content = [
38
45
  {
39
46
  type: 'text',
40
47
  text: message.message,
41
48
  },
42
- {
43
- type: 'image_url',
44
- image_url: {
45
- url: `data:image/png;base64,${message.imageBase64}`,
49
+ shouldBeIncluded
50
+ ? {
51
+ type: 'image_url',
52
+ image_url: {
53
+ url: `data:image/png;base64,${message.imageBase64}`,
54
+ },
55
+ }
56
+ : {
57
+ type: 'text',
58
+ text: '[Image omitted to save context]',
46
59
  },
47
- },
48
60
  ];
49
61
  }
50
62
  return {
@@ -52,6 +64,9 @@ class OpenAiMessageBuilder {
52
64
  content,
53
65
  };
54
66
  }
67
+ shouldRememberImages() {
68
+ return process.env.OPENAI_SHOULD_REMEMBER_IMAGES !== 'false';
69
+ }
55
70
  buildFirstMessage(youAre) {
56
71
  return {
57
72
  role: 'developer',
@@ -2,11 +2,14 @@ import { ChatCompletionMessageParam } from 'openai/resources';
2
2
  import { SprucebotLlmBot } from '../../llm.types';
3
3
  export default class OpenAiMessageBuilder {
4
4
  private bot;
5
+ private imagesFound;
6
+ private totalImages;
5
7
  protected constructor(bot: SprucebotLlmBot);
6
8
  static Builder(bot: SprucebotLlmBot): OpenAiMessageBuilder;
7
9
  buildMessages(): ChatCompletionMessageParam[];
8
10
  private buildChatHistoryMessages;
9
11
  private mapMessageToCompletion;
12
+ private shouldRememberImages;
10
13
  private buildFirstMessage;
11
14
  private buildSkillMessages;
12
15
  private buildCallbacksMessage;
@@ -1,6 +1,8 @@
1
1
  import { DONE_TOKEN, STATE_BOUNDARY } from '../templates.js';
2
2
  export default class OpenAiMessageBuilder {
3
3
  constructor(bot) {
4
+ this.imagesFound = 0;
5
+ this.totalImages = 0;
4
6
  this.bot = bot;
5
7
  }
6
8
  static Builder(bot) {
@@ -22,6 +24,8 @@ export default class OpenAiMessageBuilder {
22
24
  if (limit > 0) {
23
25
  messagesBeingConsidered = messages.slice(Math.max(messages.length - limit, 0));
24
26
  }
27
+ this.totalImages = messagesBeingConsidered.filter((m) => m.imageBase64).length;
28
+ this.imagesFound = 0;
25
29
  return messagesBeingConsidered.map((message) => this.mapMessageToCompletion(message));
26
30
  }
27
31
  mapMessageToCompletion(message) {
@@ -33,17 +37,25 @@ export default class OpenAiMessageBuilder {
33
37
  : 'developer';
34
38
  if (message.imageBase64) {
35
39
  role = 'user';
40
+ this.imagesFound++;
41
+ const shouldBeIncluded = this.shouldRememberImages() ||
42
+ this.imagesFound === this.totalImages;
36
43
  content = [
37
44
  {
38
45
  type: 'text',
39
46
  text: message.message,
40
47
  },
41
- {
42
- type: 'image_url',
43
- image_url: {
44
- url: `data:image/png;base64,${message.imageBase64}`,
48
+ shouldBeIncluded
49
+ ? {
50
+ type: 'image_url',
51
+ image_url: {
52
+ url: `data:image/png;base64,${message.imageBase64}`,
53
+ },
54
+ }
55
+ : {
56
+ type: 'text',
57
+ text: '[Image omitted to save context]',
45
58
  },
46
- },
47
59
  ];
48
60
  }
49
61
  return {
@@ -51,6 +63,9 @@ export default class OpenAiMessageBuilder {
51
63
  content,
52
64
  };
53
65
  }
66
+ shouldRememberImages() {
67
+ return process.env.OPENAI_SHOULD_REMEMBER_IMAGES !== 'false';
68
+ }
54
69
  buildFirstMessage(youAre) {
55
70
  return {
56
71
  role: 'developer',
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "eta"
9
9
  ]
10
10
  },
11
- "version": "11.1.20",
11
+ "version": "11.2.0",
12
12
  "files": [
13
13
  "build"
14
14
  ],