@bedrockio/ai 0.8.2 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.8.4
2
+
3
+ - Fixed issue with user roles parsed from template is injected into conversation
4
+ history.
5
+
6
+ ## 0.8.3
7
+
8
+ - Fixed issue with message history not being retained.
9
+
1
10
  ## 0.8.2
2
11
 
3
12
  - Fixed issue with extra input element being appended.
@@ -160,9 +160,10 @@ class BaseClient {
160
160
  if (output === 'json') {
161
161
  system = [system, 'Output only valid JSON.'].join('\n\n');
162
162
  }
163
+ const messages = this.normalizeMessages(options);
163
164
  return {
164
165
  system,
165
- messages: this.normalizeMessages(options),
166
+ messages,
166
167
  };
167
168
  }
168
169
  normalizeTemplateOptions(options) {
@@ -175,14 +176,21 @@ class BaseClient {
175
176
  template,
176
177
  });
177
178
  let system = '';
178
- let messages = [];
179
+ let { messages = [] } = options;
180
+ // Templates may contain multiple roles, ie SYSTEM or USER, making them
181
+ // useful for one-off prompting. However in a multi-turn conversation
182
+ // the entire chat history will be passed, so do not inject user messages
183
+ // when they already exist in the options.
184
+ const hasUserMessages = messages.some((message) => {
185
+ return message.role === 'user';
186
+ });
179
187
  for (let section of sections) {
180
188
  const { title = 'system', content } = section;
181
189
  const role = title.toLowerCase();
182
190
  if (role === 'system') {
183
191
  system += [system, content].join('\n');
184
192
  }
185
- else {
193
+ else if (!hasUserMessages) {
186
194
  messages = [
187
195
  ...messages,
188
196
  {
@@ -209,7 +217,9 @@ class BaseClient {
209
217
  return input;
210
218
  }
211
219
  else {
220
+ const { messages = [] } = options;
212
221
  return [
222
+ ...messages,
213
223
  {
214
224
  role: 'user',
215
225
  content: input || '',
@@ -158,9 +158,10 @@ export default class BaseClient {
158
158
  if (output === 'json') {
159
159
  system = [system, 'Output only valid JSON.'].join('\n\n');
160
160
  }
161
+ const messages = this.normalizeMessages(options);
161
162
  return {
162
163
  system,
163
- messages: this.normalizeMessages(options),
164
+ messages,
164
165
  };
165
166
  }
166
167
  normalizeTemplateOptions(options) {
@@ -173,14 +174,21 @@ export default class BaseClient {
173
174
  template,
174
175
  });
175
176
  let system = '';
176
- let messages = [];
177
+ let { messages = [] } = options;
178
+ // Templates may contain multiple roles, ie SYSTEM or USER, making them
179
+ // useful for one-off prompting. However in a multi-turn conversation
180
+ // the entire chat history will be passed, so do not inject user messages
181
+ // when they already exist in the options.
182
+ const hasUserMessages = messages.some((message) => {
183
+ return message.role === 'user';
184
+ });
177
185
  for (let section of sections) {
178
186
  const { title = 'system', content } = section;
179
187
  const role = title.toLowerCase();
180
188
  if (role === 'system') {
181
189
  system += [system, content].join('\n');
182
190
  }
183
- else {
191
+ else if (!hasUserMessages) {
184
192
  messages = [
185
193
  ...messages,
186
194
  {
@@ -207,7 +215,9 @@ export default class BaseClient {
207
215
  return input;
208
216
  }
209
217
  else {
218
+ const { messages = [] } = options;
210
219
  return [
220
+ ...messages,
211
221
  {
212
222
  role: 'user',
213
223
  content: input || '',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bedrockio/ai",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "description": "Bedrock wrapper for common AI chatbots.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../src/BaseClient.js"],"names":[],"mappings":"AAKA;IACE,0BASC;IARC,aAIC;IACD,2BAEE;IAKJ;;;;;OAKG;IACH,gBAFW,aAAa,gBAgCvB;IAED;;;;;OAKG;IACH,gBAHW,aAAa,GAAG,aAAa,gCAsDvC;IAED;;;;OAIG;IACH,wBAFW,MAAM,OAIhB;IAID,8BAGC;IAED,8BAGC;IAED,qCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,oDAIC;IAID;;OAEG;IACH,oCAOC;IAED;;;MAaC;IAED,4CAwCC;IAED,uCAkBC;IAED;;;MA4BC;IAED,uDAWC;IAED,kDAMC;CACF;;;;;WAIa,MAAM,GAAC,aAAa,EAAE;;;;YACtB,MAAM;;;;YACN,OAAO;;;;;;;;aAEP,MAAM,GAAG,MAAM;;;;;;;;;;;sBAOf,MAAM;;;UAKN,QAAQ,GAAG,MAAM,GAAG,WAAW;aAC/B,MAAM;;iCA1Ua,sBAAsB"}
1
+ {"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../src/BaseClient.js"],"names":[],"mappings":"AAKA;IACE,0BASC;IARC,aAIC;IACD,2BAEE;IAKJ;;;;;OAKG;IACH,gBAFW,aAAa,gBAgCvB;IAED;;;;;OAKG;IACH,gBAHW,aAAa,GAAG,aAAa,gCAsDvC;IAED;;;;OAIG;IACH,wBAFW,MAAM,OAIhB;IAID,8BAGC;IAED,8BAGC;IAED,qCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,oDAIC;IAID;;OAEG;IACH,oCAOC;IAED;;;MAeC;IAED,4CAiDC;IAED,uCAoBC;IAED;;;MA4BC;IAED,uDAWC;IAED,kDAMC;CACF;;;;;WAIa,MAAM,GAAC,aAAa,EAAE;;;;YACtB,MAAM;;;;YACN,OAAO;;;;;;;;aAEP,MAAM,GAAG,MAAM;;;;;;;;;;;sBAOf,MAAM;;;UAKN,QAAQ,GAAG,MAAM,GAAG,WAAW;aAC/B,MAAM;;iCAvVa,sBAAsB"}