@proteinjs/conversation 1.2.2 → 1.4.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.4.0](https://github.com/proteinjs/conversation/compare/@proteinjs/conversation@1.3.0...@proteinjs/conversation@1.4.0) (2024-07-11)
7
+
8
+
9
+ ### Features
10
+
11
+ * updated `Function` and `OpenAi` to adopt the new `tools` api (replacing legacy function api) ([e77013f](https://github.com/proteinjs/conversation/commit/e77013f20af9e857fadbf9cb3709eb7325b601d3))
12
+
13
+
14
+
15
+
16
+
17
+ # [1.3.0](https://github.com/proteinjs/conversation/compare/@proteinjs/conversation@1.2.2...@proteinjs/conversation@1.3.0) (2024-07-11)
18
+
19
+
20
+ ### Features
21
+
22
+ * implement max function calls, handle functions with void return type ([#2](https://github.com/proteinjs/conversation/issues/2)) ([36b26cf](https://github.com/proteinjs/conversation/commit/36b26cf31782c68ae230d7ae75c678d633340f44))
23
+
24
+
25
+
26
+
27
+
6
28
  # [1.2.0](https://github.com/proteinjs/conversation/compare/@proteinjs/conversation@1.1.0...@proteinjs/conversation@1.2.0) (2024-06-25)
7
29
 
8
30
 
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Brent Bahry
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
- import { ChatCompletionCreateParams } from 'openai/resources/chat';
1
+ import { ChatCompletionTool } from 'openai/resources/chat';
2
2
  export interface Function {
3
- definition: ChatCompletionCreateParams.Function;
3
+ definition: ChatCompletionTool['function'];
4
4
  call(obj: any): Promise<any>;
5
5
  instructions?: string[];
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Function.d.ts","sourceRoot":"","sources":["../../src/Function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,0BAA0B,CAAC,QAAQ,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
1
+ {"version":3,"file":"Function.d.ts","sourceRoot":"","sources":["../../src/Function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
@@ -6,9 +6,11 @@ import { MessageHistory } from './history/MessageHistory';
6
6
  import { TiktokenModel } from 'tiktoken';
7
7
  export declare const DEFAULT_MODEL: TiktokenModel;
8
8
  export declare class OpenAi {
9
- static generateResponse(messages: (string | ChatCompletionMessageParam)[], model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], logLevel?: LogLevel): Promise<string>;
9
+ static generateResponse(messages: (string | ChatCompletionMessageParam)[], model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], logLevel?: LogLevel, maxFunctionCalls?: number): Promise<string>;
10
+ static generateResponseHelper(messages: (string | ChatCompletionMessageParam)[], currentFunctionCalls: number, model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], logLevel?: LogLevel, maxFunctionCalls?: number): Promise<string>;
10
11
  private static moderateHistory;
11
12
  private static executeRequest;
13
+ private static callTools;
12
14
  private static callFunction;
13
15
  static generateCode(messages: (string | ChatCompletionMessageParam)[], model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], includeSystemMessages?: boolean, logLevel?: LogLevel): Promise<string>;
14
16
  static updateCode(code: string, description: string, model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], includeSystemMessages?: boolean, logLevel?: LogLevel): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAi.d.ts","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,0BAA0B,EAAkB,MAAM,uBAAuB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAU,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,eAAO,MAAM,aAAa,EAAE,aAA+B,CAAC;AAC5D,qBAAa,MAAM;WACJ,gBAAgB,CAC3B,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,QAAQ,GAAE,QAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAqClB,OAAO,CAAC,MAAM,CAAC,eAAe;mBAQT,cAAc;mBA2Dd,YAAY;WA6CpB,YAAY,CACvB,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB;WAuBhB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB;IAa7B,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAI9D,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM;WA6B5B,YAAY,CACvB,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;CAkBrB"}
1
+ {"version":3,"file":"OpenAi.d.ts","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAI3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAU,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMzC,eAAO,MAAM,aAAa,EAAE,aAA+B,CAAC;AAC5D,qBAAa,MAAM;WACJ,gBAAgB,CAC3B,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,QAAQ,GAAE,QAAiB,EAC3B,gBAAgB,GAAE,MAAW,GAC5B,OAAO,CAAC,MAAM,CAAC;WAaL,sBAAsB,CACjC,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,oBAAoB,EAAE,MAAM,EAC5B,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,QAAQ,GAAE,QAAiB,EAC3B,gBAAgB,GAAE,MAAW,GAC5B,OAAO,CAAC,MAAM,CAAC;IAgDlB,OAAO,CAAC,MAAM,CAAC,eAAe;mBAQT,cAAc;mBAgEd,SAAS;mBAeT,YAAY;WA0CpB,YAAY,CACvB,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB;WAuBhB,UAAU,CACrB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB;IAa7B,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAI9D,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM;WA6B5B,YAAY,CACvB,QAAQ,EAAE,CAAC,MAAM,GAAG,0BAA0B,CAAC,EAAE,EACjD,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,EAC5C,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,EACtC,qBAAqB,GAAE,OAAc,EACrC,QAAQ,GAAE,QAAiB,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;CAkBrB"}
@@ -35,6 +35,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
35
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
36
  }
37
37
  };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
38
47
  Object.defineProperty(exports, "__esModule", { value: true });
39
48
  exports.OpenAi = exports.DEFAULT_MODEL = void 0;
40
49
  var openai_1 = require("openai");
@@ -47,10 +56,23 @@ exports.DEFAULT_MODEL = 'gpt-3.5-turbo';
47
56
  var OpenAi = /** @class */ (function () {
48
57
  function OpenAi() {
49
58
  }
50
- OpenAi.generateResponse = function (messages, model, history, functions, messageModerators, logLevel) {
59
+ OpenAi.generateResponse = function (messages, model, history, functions, messageModerators, logLevel, maxFunctionCalls) {
60
+ if (logLevel === void 0) { logLevel = 'info'; }
61
+ if (maxFunctionCalls === void 0) { maxFunctionCalls = 50; }
62
+ return __awaiter(this, void 0, void 0, function () {
63
+ return __generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0: return [4 /*yield*/, this.generateResponseHelper(messages, 0, model, history, functions, messageModerators, logLevel, maxFunctionCalls)];
66
+ case 1: return [2 /*return*/, _a.sent()];
67
+ }
68
+ });
69
+ });
70
+ };
71
+ OpenAi.generateResponseHelper = function (messages, currentFunctionCalls, model, history, functions, messageModerators, logLevel, maxFunctionCalls) {
51
72
  if (logLevel === void 0) { logLevel = 'info'; }
73
+ if (maxFunctionCalls === void 0) { maxFunctionCalls = 50; }
52
74
  return __awaiter(this, void 0, void 0, function () {
53
- var logger, messageParams, messageParamsWithHistory, response, responseMessage, functionReturnMessage, responseText;
75
+ var logger, messageParams, messageParamsWithHistory, response, responseMessage, toolMessageParams, responseText;
54
76
  return __generator(this, function (_a) {
55
77
  switch (_a.label) {
56
78
  case 0:
@@ -72,20 +94,20 @@ var OpenAi = /** @class */ (function () {
72
94
  case 1:
73
95
  response = _a.sent();
74
96
  responseMessage = response.choices[0].message;
75
- if (!responseMessage.function_call) return [3 /*break*/, 4];
97
+ if (!responseMessage.tool_calls) return [3 /*break*/, 4];
98
+ if (currentFunctionCalls >= maxFunctionCalls) {
99
+ throw new Error("Max function calls (".concat(maxFunctionCalls, ") reached. Stopping execution."));
100
+ }
76
101
  messageParamsWithHistory.push([responseMessage]);
77
- return [4 /*yield*/, this.callFunction(logLevel, responseMessage.function_call, functions)];
102
+ return [4 /*yield*/, this.callTools(logLevel, responseMessage.tool_calls, functions)];
78
103
  case 2:
79
- functionReturnMessage = _a.sent();
80
- if (functionReturnMessage) {
81
- messageParamsWithHistory.push([functionReturnMessage]);
82
- }
83
- return [4 /*yield*/, this.generateResponse([], model, messageParamsWithHistory, functions, messageModerators, logLevel)];
104
+ toolMessageParams = _a.sent();
105
+ messageParamsWithHistory.push(__spreadArray([], toolMessageParams, true));
106
+ return [4 /*yield*/, this.generateResponseHelper([], currentFunctionCalls + responseMessage.tool_calls.length, model, messageParamsWithHistory, functions, messageModerators, logLevel, maxFunctionCalls)];
84
107
  case 3: return [2 /*return*/, _a.sent()];
85
108
  case 4:
86
109
  responseText = responseMessage.content;
87
110
  if (!responseText) {
88
- logger.error("Received response: ".concat(JSON.stringify(response)));
89
111
  throw new Error("Response was empty for messages: ".concat(messages.join('\n')));
90
112
  }
91
113
  messageParamsWithHistory.push([responseMessage]);
@@ -127,7 +149,10 @@ var OpenAi = /** @class */ (function () {
127
149
  model: model ? model : exports.DEFAULT_MODEL,
128
150
  temperature: 0,
129
151
  messages: messageParamsWithHistory.getMessages(),
130
- functions: functions === null || functions === void 0 ? void 0 : functions.map(function (f) { return f.definition; }),
152
+ tools: functions === null || functions === void 0 ? void 0 : functions.map(function (f) { return ({
153
+ type: 'function',
154
+ function: f.definition,
155
+ }); }),
131
156
  })];
132
157
  case 2:
133
158
  response = _a.sent();
@@ -135,8 +160,8 @@ var OpenAi = /** @class */ (function () {
135
160
  if (responseMessage.content) {
136
161
  logger.info("Received response: ".concat(responseMessage.content));
137
162
  }
138
- else if (responseMessage.function_call) {
139
- logger.info("Received response: call ".concat(responseMessage.function_call.name, " function"));
163
+ else if (responseMessage.tool_calls) {
164
+ logger.info("Received response: call functions: ".concat(JSON.stringify(responseMessage.tool_calls.map(function (toolCall) { return toolCall.function.name; }))));
140
165
  }
141
166
  else {
142
167
  logger.info("Received response");
@@ -168,51 +193,70 @@ var OpenAi = /** @class */ (function () {
168
193
  });
169
194
  });
170
195
  };
171
- OpenAi.callFunction = function (logLevel, functionCall, functions) {
196
+ OpenAi.callTools = function (logLevel, toolCalls, functions) {
172
197
  return __awaiter(this, void 0, void 0, function () {
173
- var logger, warning, message, f, warning, message, returnObject, _a, _b, error_2;
198
+ var toolMessageParams;
199
+ var _this = this;
200
+ return __generator(this, function (_a) {
201
+ switch (_a.label) {
202
+ case 0: return [4 /*yield*/, Promise.all(toolCalls.map(function (toolCall) { return __awaiter(_this, void 0, void 0, function () {
203
+ var serializedReturnObject;
204
+ return __generator(this, function (_a) {
205
+ switch (_a.label) {
206
+ case 0: return [4 /*yield*/, OpenAi.callFunction(logLevel, toolCall.function, toolCall.id, functions)];
207
+ case 1:
208
+ serializedReturnObject = _a.sent();
209
+ return [2 /*return*/, { role: 'tool', tool_call_id: toolCall.id, content: serializedReturnObject }];
210
+ }
211
+ });
212
+ }); }))];
213
+ case 1:
214
+ toolMessageParams = _a.sent();
215
+ return [2 /*return*/, toolMessageParams];
216
+ }
217
+ });
218
+ });
219
+ };
220
+ OpenAi.callFunction = function (logLevel, functionCall, functionCallId, functions) {
221
+ return __awaiter(this, void 0, void 0, function () {
222
+ var logger, error, f, error, returnObject, _a, _b, error_2, errorMessage;
174
223
  return __generator(this, function (_c) {
175
224
  switch (_c.label) {
176
225
  case 0:
177
226
  logger = new util_1.Logger('OpenAi.callFunction', logLevel);
178
227
  if (!functions) {
179
- warning = "Assistant attempted to call a function when no functions were provided";
180
- logger.warn(warning);
181
- message = { role: 'user', content: warning };
182
- return [2 /*return*/, message];
228
+ error = "Assistant attempted to call a function when no functions were provided";
229
+ logger.error(error);
230
+ return [2 /*return*/, JSON.stringify({ error: error })];
183
231
  }
184
232
  functionCall.name = functionCall.name.split('.').pop();
185
233
  f = functions.find(function (f) { return f.definition.name === functionCall.name; });
186
234
  if (!f) {
187
- warning = "Assistant attempted to call nonexistent function: ".concat(functionCall.name);
188
- logger.warn(warning);
189
- message = { role: 'user', content: warning };
190
- return [2 /*return*/, message];
235
+ error = "Assistant attempted to call nonexistent function: ".concat(functionCall.name);
236
+ logger.error(error);
237
+ return [2 /*return*/, JSON.stringify({ error: error })];
191
238
  }
192
239
  returnObject = null;
193
240
  _c.label = 1;
194
241
  case 1:
195
242
  _c.trys.push([1, 3, , 4]);
196
- logger.info("Assistant calling function: ".concat(f.definition.name, "(").concat(functionCall.arguments, ")"));
243
+ logger.info("Assistant calling function: (".concat(functionCallId, ") ").concat(f.definition.name, "(").concat(functionCall.arguments, ")"), 1000);
197
244
  _b = (_a = JSON).stringify;
198
245
  return [4 /*yield*/, f.call(JSON.parse(functionCall.arguments))];
199
246
  case 2:
200
247
  returnObject = _b.apply(_a, [_c.sent()]);
201
- logger.info("Assistant called function: ".concat(f.definition.name, "(").concat(functionCall.arguments, ") => ").concat(returnObject), 1000);
248
+ logger.info("Assistant called function: (".concat(functionCallId, ") ").concat(f.definition.name, " => ").concat(returnObject), 1000);
202
249
  return [3 /*break*/, 4];
203
250
  case 3:
204
251
  error_2 = _c.sent();
205
- logger.error(error_2.message);
206
- return [3 /*break*/, 4];
252
+ errorMessage = "Error occurred while executing function ".concat(f.definition.name, ": ").concat(error_2.message);
253
+ logger.error(errorMessage);
254
+ return [2 /*return*/, JSON.stringify({ error: errorMessage })];
207
255
  case 4:
208
256
  if (!returnObject) {
209
- return [2 /*return*/];
257
+ return [2 /*return*/, JSON.stringify({ result: 'Function with no return value executed successfully' })];
210
258
  }
211
- return [2 /*return*/, {
212
- role: 'function',
213
- name: f.definition.name,
214
- content: returnObject,
215
- }];
259
+ return [2 /*return*/, returnObject];
216
260
  }
217
261
  });
218
262
  });
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAi.js","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAi.js","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/conversation",
3
- "version": "1.2.2",
3
+ "version": "1.4.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "publishConfig": {
@@ -35,5 +35,6 @@
35
35
  "readline-sync": "1.4.10",
36
36
  "tiktoken": "1.0.15",
37
37
  "typescript": "5.2.2"
38
- }
39
- }
38
+ },
39
+ "gitHead": "ecb8490364b69eeeb70902c353f43ebbb0696a9a"
40
+ }
package/src/Function.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { ChatCompletionCreateParams } from 'openai/resources/chat';
1
+ import { ChatCompletionTool } from 'openai/resources/chat';
2
2
 
3
3
  export interface Function {
4
- definition: ChatCompletionCreateParams.Function;
4
+ definition: ChatCompletionTool['function'];
5
5
  call(obj: any): Promise<any>;
6
6
  instructions?: string[];
7
7
  }
package/src/OpenAi.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import { OpenAI as OpenAIApi } from 'openai';
2
- import { ChatCompletionMessage, ChatCompletionMessageParam, ChatCompletion } from 'openai/resources/chat';
2
+ import {
3
+ ChatCompletionMessageParam,
4
+ ChatCompletion,
5
+ ChatCompletionMessageToolCall,
6
+ ChatCompletionToolMessageParam,
7
+ } from 'openai/resources/chat';
3
8
  import { LogLevel, Logger } from '@proteinjs/util';
4
9
  import { MessageModerator } from './history/MessageModerator';
5
10
  import { Function } from './Function';
@@ -18,7 +23,30 @@ export class OpenAi {
18
23
  history?: MessageHistory,
19
24
  functions?: Omit<Function, 'instructions'>[],
20
25
  messageModerators?: MessageModerator[],
21
- logLevel: LogLevel = 'info'
26
+ logLevel: LogLevel = 'info',
27
+ maxFunctionCalls: number = 50
28
+ ): Promise<string> {
29
+ return await this.generateResponseHelper(
30
+ messages,
31
+ 0,
32
+ model,
33
+ history,
34
+ functions,
35
+ messageModerators,
36
+ logLevel,
37
+ maxFunctionCalls
38
+ );
39
+ }
40
+
41
+ static async generateResponseHelper(
42
+ messages: (string | ChatCompletionMessageParam)[],
43
+ currentFunctionCalls: number,
44
+ model?: string,
45
+ history?: MessageHistory,
46
+ functions?: Omit<Function, 'instructions'>[],
47
+ messageModerators?: MessageModerator[],
48
+ logLevel: LogLevel = 'info',
49
+ maxFunctionCalls: number = 50
22
50
  ): Promise<string> {
23
51
  const logger = new Logger('OpenAi.generateResponse', logLevel);
24
52
  const messageParams: ChatCompletionMessageParam[] = messages.map((message) => {
@@ -37,18 +65,29 @@ export class OpenAi {
37
65
  }
38
66
  const response = await OpenAi.executeRequest(messageParamsWithHistory, logLevel, functions, model);
39
67
  const responseMessage = response.choices[0].message;
40
- if (responseMessage.function_call) {
41
- messageParamsWithHistory.push([responseMessage]);
42
- const functionReturnMessage = await this.callFunction(logLevel, responseMessage.function_call, functions);
43
- if (functionReturnMessage) {
44
- messageParamsWithHistory.push([functionReturnMessage]);
68
+ if (responseMessage.tool_calls) {
69
+ if (currentFunctionCalls >= maxFunctionCalls) {
70
+ throw new Error(`Max function calls (${maxFunctionCalls}) reached. Stopping execution.`);
45
71
  }
46
- return await this.generateResponse([], model, messageParamsWithHistory, functions, messageModerators, logLevel);
72
+
73
+ messageParamsWithHistory.push([responseMessage]);
74
+ const toolMessageParams = await this.callTools(logLevel, responseMessage.tool_calls, functions);
75
+ messageParamsWithHistory.push([...toolMessageParams]);
76
+
77
+ return await this.generateResponseHelper(
78
+ [],
79
+ currentFunctionCalls + responseMessage.tool_calls.length,
80
+ model,
81
+ messageParamsWithHistory,
82
+ functions,
83
+ messageModerators,
84
+ logLevel,
85
+ maxFunctionCalls
86
+ );
47
87
  }
48
88
 
49
89
  const responseText = responseMessage.content;
50
90
  if (!responseText) {
51
- logger.error(`Received response: ${JSON.stringify(response)}`);
52
91
  throw new Error(`Response was empty for messages: ${messages.join('\n')}`);
53
92
  }
54
93
 
@@ -87,13 +126,18 @@ export class OpenAi {
87
126
  model: model ? model : DEFAULT_MODEL,
88
127
  temperature: 0,
89
128
  messages: messageParamsWithHistory.getMessages(),
90
- functions: functions?.map((f) => f.definition),
129
+ tools: functions?.map((f) => ({
130
+ type: 'function',
131
+ function: f.definition,
132
+ })),
91
133
  });
92
134
  const responseMessage = response.choices[0].message;
93
135
  if (responseMessage.content) {
94
136
  logger.info(`Received response: ${responseMessage.content}`);
95
- } else if (responseMessage.function_call) {
96
- logger.info(`Received response: call ${responseMessage.function_call.name} function`);
137
+ } else if (responseMessage.tool_calls) {
138
+ logger.info(
139
+ `Received response: call functions: ${JSON.stringify(responseMessage.tool_calls.map((toolCall) => toolCall.function.name))}`
140
+ );
97
141
  } else {
98
142
  logger.info(`Received response`);
99
143
  }
@@ -123,49 +167,61 @@ export class OpenAi {
123
167
  return response;
124
168
  }
125
169
 
170
+ private static async callTools(
171
+ logLevel: LogLevel,
172
+ toolCalls: ChatCompletionMessageToolCall[],
173
+ functions?: Omit<Function, 'instructions'>[]
174
+ ): Promise<ChatCompletionToolMessageParam[]> {
175
+ const toolMessageParams: ChatCompletionToolMessageParam[] = await Promise.all(
176
+ toolCalls.map(async (toolCall) => {
177
+ const serializedReturnObject = await OpenAi.callFunction(logLevel, toolCall.function, toolCall.id, functions);
178
+ return { role: 'tool', tool_call_id: toolCall.id, content: serializedReturnObject };
179
+ })
180
+ );
181
+
182
+ return toolMessageParams;
183
+ }
184
+
126
185
  private static async callFunction(
127
186
  logLevel: LogLevel,
128
- functionCall: ChatCompletionMessage.FunctionCall,
187
+ functionCall: ChatCompletionMessageToolCall.Function,
188
+ functionCallId: string,
129
189
  functions?: Omit<Function, 'instructions'>[]
130
- ): Promise<ChatCompletionMessageParam | undefined> {
190
+ ): Promise<string> {
131
191
  const logger = new Logger('OpenAi.callFunction', logLevel);
132
192
  if (!functions) {
133
- const warning = `Assistant attempted to call a function when no functions were provided`;
134
- logger.warn(warning);
135
- const message: ChatCompletionMessageParam = { role: 'user', content: warning };
136
- return message;
193
+ const error = `Assistant attempted to call a function when no functions were provided`;
194
+ logger.error(error);
195
+ return JSON.stringify({ error });
137
196
  }
138
197
 
139
198
  functionCall.name = functionCall.name.split('.').pop() as string;
140
199
  const f = functions.find((f) => f.definition.name === functionCall.name);
141
200
  if (!f) {
142
- const warning = `Assistant attempted to call nonexistent function: ${functionCall.name}`;
143
- logger.warn(warning);
144
- const message: ChatCompletionMessageParam = { role: 'user', content: warning };
145
- return message;
201
+ const error = `Assistant attempted to call nonexistent function: ${functionCall.name}`;
202
+ logger.error(error);
203
+ return JSON.stringify({ error });
146
204
  }
147
205
 
148
206
  let returnObject = null;
149
207
  try {
150
- logger.info(`Assistant calling function: ${f.definition.name}(${functionCall.arguments})`);
151
- returnObject = JSON.stringify(await f.call(JSON.parse(functionCall.arguments)));
152
208
  logger.info(
153
- `Assistant called function: ${f.definition.name}(${functionCall.arguments}) => ${returnObject}`,
209
+ `Assistant calling function: (${functionCallId}) ${f.definition.name}(${functionCall.arguments})`,
154
210
  1000
155
211
  );
212
+ returnObject = JSON.stringify(await f.call(JSON.parse(functionCall.arguments)));
213
+ logger.info(`Assistant called function: (${functionCallId}) ${f.definition.name} => ${returnObject}`, 1000);
156
214
  } catch (error: any) {
157
- logger.error(error.message);
215
+ const errorMessage = `Error occurred while executing function ${f.definition.name}: ${error.message}`;
216
+ logger.error(errorMessage);
217
+ return JSON.stringify({ error: errorMessage });
158
218
  }
159
219
 
160
220
  if (!returnObject) {
161
- return;
221
+ return JSON.stringify({ result: 'Function with no return value executed successfully' });
162
222
  }
163
223
 
164
- return {
165
- role: 'function',
166
- name: f.definition.name,
167
- content: returnObject,
168
- };
224
+ return returnObject;
169
225
  }
170
226
 
171
227
  static async generateCode(