@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 +22 -0
- package/LICENSE +21 -0
- package/dist/src/Function.d.ts +2 -2
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/OpenAi.d.ts +3 -1
- package/dist/src/OpenAi.d.ts.map +1 -1
- package/dist/src/OpenAi.js +77 -33
- package/dist/src/OpenAi.js.map +1 -1
- package/package.json +4 -3
- package/src/Function.ts +2 -2
- package/src/OpenAi.ts +88 -32
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.
|
package/dist/src/Function.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChatCompletionTool } from 'openai/resources/chat';
|
|
2
2
|
export interface Function {
|
|
3
|
-
definition:
|
|
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,
|
|
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"}
|
package/dist/src/OpenAi.d.ts
CHANGED
|
@@ -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>;
|
package/dist/src/OpenAi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAi.d.ts","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
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"}
|
package/dist/src/OpenAi.js
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
102
|
+
return [4 /*yield*/, this.callTools(logLevel, responseMessage.tool_calls, functions)];
|
|
78
103
|
case 2:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
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.
|
|
139
|
-
logger.info("Received response: call ".concat(responseMessage.
|
|
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.
|
|
196
|
+
OpenAi.callTools = function (logLevel, toolCalls, functions) {
|
|
172
197
|
return __awaiter(this, void 0, void 0, function () {
|
|
173
|
-
var
|
|
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
|
-
|
|
180
|
-
logger.
|
|
181
|
-
|
|
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
|
-
|
|
188
|
-
logger.
|
|
189
|
-
|
|
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(
|
|
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
|
-
|
|
206
|
-
|
|
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
|
});
|
package/dist/src/OpenAi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAi.js","sourceRoot":"","sources":["../../src/OpenAi.ts"],"names":[],"mappings":"
|
|
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.
|
|
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 {
|
|
1
|
+
import { ChatCompletionTool } from 'openai/resources/chat';
|
|
2
2
|
|
|
3
3
|
export interface Function {
|
|
4
|
-
definition:
|
|
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 {
|
|
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.
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
96
|
-
logger.info(
|
|
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:
|
|
187
|
+
functionCall: ChatCompletionMessageToolCall.Function,
|
|
188
|
+
functionCallId: string,
|
|
129
189
|
functions?: Omit<Function, 'instructions'>[]
|
|
130
|
-
): Promise<
|
|
190
|
+
): Promise<string> {
|
|
131
191
|
const logger = new Logger('OpenAi.callFunction', logLevel);
|
|
132
192
|
if (!functions) {
|
|
133
|
-
const
|
|
134
|
-
logger.
|
|
135
|
-
|
|
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
|
|
143
|
-
logger.
|
|
144
|
-
|
|
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
|
|
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
|
-
|
|
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(
|