@proteinjs/conversation 1.3.0 → 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 +11 -0
- package/dist/src/Function.d.ts +2 -2
- package/dist/src/Function.d.ts.map +1 -1
- package/dist/src/OpenAi.d.ts +1 -0
- package/dist/src/OpenAi.d.ts.map +1 -1
- package/dist/src/OpenAi.js +58 -36
- package/dist/src/OpenAi.js.map +1 -1
- package/package.json +2 -2
- package/src/Function.ts +2 -2
- package/src/OpenAi.ts +48 -36
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
|
|
6
17
|
# [1.3.0](https://github.com/proteinjs/conversation/compare/@proteinjs/conversation@1.2.2...@proteinjs/conversation@1.3.0) (2024-07-11)
|
|
7
18
|
|
|
8
19
|
|
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
|
@@ -10,6 +10,7 @@ export declare class OpenAi {
|
|
|
10
10
|
static generateResponseHelper(messages: (string | ChatCompletionMessageParam)[], currentFunctionCalls: number, model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], logLevel?: LogLevel, maxFunctionCalls?: number): Promise<string>;
|
|
11
11
|
private static moderateHistory;
|
|
12
12
|
private static executeRequest;
|
|
13
|
+
private static callTools;
|
|
13
14
|
private static callFunction;
|
|
14
15
|
static generateCode(messages: (string | ChatCompletionMessageParam)[], model?: string, history?: MessageHistory, functions?: Omit<Function, 'instructions'>[], messageModerators?: MessageModerator[], includeSystemMessages?: boolean, logLevel?: LogLevel): Promise<string>;
|
|
15
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");
|
|
@@ -63,7 +72,7 @@ var OpenAi = /** @class */ (function () {
|
|
|
63
72
|
if (logLevel === void 0) { logLevel = 'info'; }
|
|
64
73
|
if (maxFunctionCalls === void 0) { maxFunctionCalls = 50; }
|
|
65
74
|
return __awaiter(this, void 0, void 0, function () {
|
|
66
|
-
var logger, messageParams, messageParamsWithHistory, response, responseMessage,
|
|
75
|
+
var logger, messageParams, messageParamsWithHistory, response, responseMessage, toolMessageParams, responseText;
|
|
67
76
|
return __generator(this, function (_a) {
|
|
68
77
|
switch (_a.label) {
|
|
69
78
|
case 0:
|
|
@@ -85,16 +94,16 @@ var OpenAi = /** @class */ (function () {
|
|
|
85
94
|
case 1:
|
|
86
95
|
response = _a.sent();
|
|
87
96
|
responseMessage = response.choices[0].message;
|
|
88
|
-
if (!responseMessage.
|
|
97
|
+
if (!responseMessage.tool_calls) return [3 /*break*/, 4];
|
|
89
98
|
if (currentFunctionCalls >= maxFunctionCalls) {
|
|
90
99
|
throw new Error("Max function calls (".concat(maxFunctionCalls, ") reached. Stopping execution."));
|
|
91
100
|
}
|
|
92
101
|
messageParamsWithHistory.push([responseMessage]);
|
|
93
|
-
return [4 /*yield*/, this.
|
|
102
|
+
return [4 /*yield*/, this.callTools(logLevel, responseMessage.tool_calls, functions)];
|
|
94
103
|
case 2:
|
|
95
|
-
|
|
96
|
-
messageParamsWithHistory.push([
|
|
97
|
-
return [4 /*yield*/, this.generateResponseHelper([], currentFunctionCalls +
|
|
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)];
|
|
98
107
|
case 3: return [2 /*return*/, _a.sent()];
|
|
99
108
|
case 4:
|
|
100
109
|
responseText = responseMessage.content;
|
|
@@ -140,7 +149,10 @@ var OpenAi = /** @class */ (function () {
|
|
|
140
149
|
model: model ? model : exports.DEFAULT_MODEL,
|
|
141
150
|
temperature: 0,
|
|
142
151
|
messages: messageParamsWithHistory.getMessages(),
|
|
143
|
-
|
|
152
|
+
tools: functions === null || functions === void 0 ? void 0 : functions.map(function (f) { return ({
|
|
153
|
+
type: 'function',
|
|
154
|
+
function: f.definition,
|
|
155
|
+
}); }),
|
|
144
156
|
})];
|
|
145
157
|
case 2:
|
|
146
158
|
response = _a.sent();
|
|
@@ -148,8 +160,8 @@ var OpenAi = /** @class */ (function () {
|
|
|
148
160
|
if (responseMessage.content) {
|
|
149
161
|
logger.info("Received response: ".concat(responseMessage.content));
|
|
150
162
|
}
|
|
151
|
-
else if (responseMessage.
|
|
152
|
-
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; }))));
|
|
153
165
|
}
|
|
154
166
|
else {
|
|
155
167
|
logger.info("Received response");
|
|
@@ -181,60 +193,70 @@ var OpenAi = /** @class */ (function () {
|
|
|
181
193
|
});
|
|
182
194
|
});
|
|
183
195
|
};
|
|
184
|
-
OpenAi.
|
|
196
|
+
OpenAi.callTools = function (logLevel, toolCalls, functions) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
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) {
|
|
185
221
|
return __awaiter(this, void 0, void 0, function () {
|
|
186
|
-
var logger,
|
|
222
|
+
var logger, error, f, error, returnObject, _a, _b, error_2, errorMessage;
|
|
187
223
|
return __generator(this, function (_c) {
|
|
188
224
|
switch (_c.label) {
|
|
189
225
|
case 0:
|
|
190
226
|
logger = new util_1.Logger('OpenAi.callFunction', logLevel);
|
|
191
227
|
if (!functions) {
|
|
192
|
-
|
|
193
|
-
logger.
|
|
194
|
-
|
|
195
|
-
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 })];
|
|
196
231
|
}
|
|
197
232
|
functionCall.name = functionCall.name.split('.').pop();
|
|
198
233
|
f = functions.find(function (f) { return f.definition.name === functionCall.name; });
|
|
199
234
|
if (!f) {
|
|
200
|
-
|
|
201
|
-
logger.
|
|
202
|
-
|
|
203
|
-
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 })];
|
|
204
238
|
}
|
|
205
239
|
returnObject = null;
|
|
206
240
|
_c.label = 1;
|
|
207
241
|
case 1:
|
|
208
242
|
_c.trys.push([1, 3, , 4]);
|
|
209
|
-
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);
|
|
210
244
|
_b = (_a = JSON).stringify;
|
|
211
245
|
return [4 /*yield*/, f.call(JSON.parse(functionCall.arguments))];
|
|
212
246
|
case 2:
|
|
213
247
|
returnObject = _b.apply(_a, [_c.sent()]);
|
|
214
|
-
logger.info("Assistant called function: ".concat(
|
|
248
|
+
logger.info("Assistant called function: (".concat(functionCallId, ") ").concat(f.definition.name, " => ").concat(returnObject), 1000);
|
|
215
249
|
return [3 /*break*/, 4];
|
|
216
250
|
case 3:
|
|
217
251
|
error_2 = _c.sent();
|
|
218
252
|
errorMessage = "Error occurred while executing function ".concat(f.definition.name, ": ").concat(error_2.message);
|
|
219
253
|
logger.error(errorMessage);
|
|
220
|
-
return [2 /*return*/, {
|
|
221
|
-
role: 'function',
|
|
222
|
-
name: f.definition.name,
|
|
223
|
-
content: JSON.stringify({ error: errorMessage }),
|
|
224
|
-
}];
|
|
254
|
+
return [2 /*return*/, JSON.stringify({ error: errorMessage })];
|
|
225
255
|
case 4:
|
|
226
256
|
if (!returnObject) {
|
|
227
|
-
return [2 /*return*/, {
|
|
228
|
-
role: 'function',
|
|
229
|
-
name: f.definition.name,
|
|
230
|
-
content: JSON.stringify({ result: 'Function with no return value executed successfully' }),
|
|
231
|
-
}];
|
|
257
|
+
return [2 /*return*/, JSON.stringify({ result: 'Function with no return value executed successfully' })];
|
|
232
258
|
}
|
|
233
|
-
return [2 /*return*/,
|
|
234
|
-
role: 'function',
|
|
235
|
-
name: f.definition.name,
|
|
236
|
-
content: returnObject,
|
|
237
|
-
}];
|
|
259
|
+
return [2 /*return*/, returnObject];
|
|
238
260
|
}
|
|
239
261
|
});
|
|
240
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": {
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"tiktoken": "1.0.15",
|
|
37
37
|
"typescript": "5.2.2"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "ecb8490364b69eeeb70902c353f43ebbb0696a9a"
|
|
40
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';
|
|
@@ -60,18 +65,18 @@ export class OpenAi {
|
|
|
60
65
|
}
|
|
61
66
|
const response = await OpenAi.executeRequest(messageParamsWithHistory, logLevel, functions, model);
|
|
62
67
|
const responseMessage = response.choices[0].message;
|
|
63
|
-
if (responseMessage.
|
|
68
|
+
if (responseMessage.tool_calls) {
|
|
64
69
|
if (currentFunctionCalls >= maxFunctionCalls) {
|
|
65
70
|
throw new Error(`Max function calls (${maxFunctionCalls}) reached. Stopping execution.`);
|
|
66
71
|
}
|
|
67
72
|
|
|
68
73
|
messageParamsWithHistory.push([responseMessage]);
|
|
69
|
-
const
|
|
70
|
-
messageParamsWithHistory.push([
|
|
74
|
+
const toolMessageParams = await this.callTools(logLevel, responseMessage.tool_calls, functions);
|
|
75
|
+
messageParamsWithHistory.push([...toolMessageParams]);
|
|
71
76
|
|
|
72
77
|
return await this.generateResponseHelper(
|
|
73
78
|
[],
|
|
74
|
-
currentFunctionCalls +
|
|
79
|
+
currentFunctionCalls + responseMessage.tool_calls.length,
|
|
75
80
|
model,
|
|
76
81
|
messageParamsWithHistory,
|
|
77
82
|
functions,
|
|
@@ -121,13 +126,18 @@ export class OpenAi {
|
|
|
121
126
|
model: model ? model : DEFAULT_MODEL,
|
|
122
127
|
temperature: 0,
|
|
123
128
|
messages: messageParamsWithHistory.getMessages(),
|
|
124
|
-
|
|
129
|
+
tools: functions?.map((f) => ({
|
|
130
|
+
type: 'function',
|
|
131
|
+
function: f.definition,
|
|
132
|
+
})),
|
|
125
133
|
});
|
|
126
134
|
const responseMessage = response.choices[0].message;
|
|
127
135
|
if (responseMessage.content) {
|
|
128
136
|
logger.info(`Received response: ${responseMessage.content}`);
|
|
129
|
-
} else if (responseMessage.
|
|
130
|
-
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
|
+
);
|
|
131
141
|
} else {
|
|
132
142
|
logger.info(`Received response`);
|
|
133
143
|
}
|
|
@@ -157,59 +167,61 @@ export class OpenAi {
|
|
|
157
167
|
return response;
|
|
158
168
|
}
|
|
159
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
|
+
|
|
160
185
|
private static async callFunction(
|
|
161
186
|
logLevel: LogLevel,
|
|
162
|
-
functionCall:
|
|
187
|
+
functionCall: ChatCompletionMessageToolCall.Function,
|
|
188
|
+
functionCallId: string,
|
|
163
189
|
functions?: Omit<Function, 'instructions'>[]
|
|
164
|
-
): Promise<
|
|
190
|
+
): Promise<string> {
|
|
165
191
|
const logger = new Logger('OpenAi.callFunction', logLevel);
|
|
166
192
|
if (!functions) {
|
|
167
|
-
const
|
|
168
|
-
logger.
|
|
169
|
-
|
|
170
|
-
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 });
|
|
171
196
|
}
|
|
172
197
|
|
|
173
198
|
functionCall.name = functionCall.name.split('.').pop() as string;
|
|
174
199
|
const f = functions.find((f) => f.definition.name === functionCall.name);
|
|
175
200
|
if (!f) {
|
|
176
|
-
const
|
|
177
|
-
logger.
|
|
178
|
-
|
|
179
|
-
return message;
|
|
201
|
+
const error = `Assistant attempted to call nonexistent function: ${functionCall.name}`;
|
|
202
|
+
logger.error(error);
|
|
203
|
+
return JSON.stringify({ error });
|
|
180
204
|
}
|
|
181
205
|
|
|
182
206
|
let returnObject = null;
|
|
183
207
|
try {
|
|
184
|
-
logger.info(`Assistant calling function: ${f.definition.name}(${functionCall.arguments})`);
|
|
185
|
-
returnObject = JSON.stringify(await f.call(JSON.parse(functionCall.arguments)));
|
|
186
208
|
logger.info(
|
|
187
|
-
`Assistant
|
|
209
|
+
`Assistant calling function: (${functionCallId}) ${f.definition.name}(${functionCall.arguments})`,
|
|
188
210
|
1000
|
|
189
211
|
);
|
|
212
|
+
returnObject = JSON.stringify(await f.call(JSON.parse(functionCall.arguments)));
|
|
213
|
+
logger.info(`Assistant called function: (${functionCallId}) ${f.definition.name} => ${returnObject}`, 1000);
|
|
190
214
|
} catch (error: any) {
|
|
191
215
|
const errorMessage = `Error occurred while executing function ${f.definition.name}: ${error.message}`;
|
|
192
216
|
logger.error(errorMessage);
|
|
193
|
-
return {
|
|
194
|
-
role: 'function',
|
|
195
|
-
name: f.definition.name,
|
|
196
|
-
content: JSON.stringify({ error: errorMessage }),
|
|
197
|
-
};
|
|
217
|
+
return JSON.stringify({ error: errorMessage });
|
|
198
218
|
}
|
|
199
219
|
|
|
200
220
|
if (!returnObject) {
|
|
201
|
-
return {
|
|
202
|
-
role: 'function',
|
|
203
|
-
name: f.definition.name,
|
|
204
|
-
content: JSON.stringify({ result: 'Function with no return value executed successfully' }),
|
|
205
|
-
};
|
|
221
|
+
return JSON.stringify({ result: 'Function with no return value executed successfully' });
|
|
206
222
|
}
|
|
207
223
|
|
|
208
|
-
return
|
|
209
|
-
role: 'function',
|
|
210
|
-
name: f.definition.name,
|
|
211
|
-
content: returnObject,
|
|
212
|
-
};
|
|
224
|
+
return returnObject;
|
|
213
225
|
}
|
|
214
226
|
|
|
215
227
|
static async generateCode(
|