@webex/internal-plugin-ai-assistant 0.0.0-next.8 → 3.11.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/README.md +44 -1
- package/dist/ai-assistant.js +113 -130
- package/dist/ai-assistant.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +13 -3
- package/dist/constants.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.js +155 -0
- package/dist/utils.js.map +1 -0
- package/package.json +8 -8
- package/src/ai-assistant.ts +89 -86
- package/src/config.ts +1 -1
- package/src/constants.ts +9 -0
- package/src/types.ts +10 -1
- package/src/utils.ts +70 -0
- package/test/unit/data/messages.ts +720 -0
- package/test/unit/spec/ai-assistant.ts +933 -120
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ npm install --save @webex/internal-plugin-ai-assistant
|
|
|
22
22
|
|
|
23
23
|
## Usage
|
|
24
24
|
|
|
25
|
-
The responses from the AI assistant service are delivered asynchronously via mercury. The methods in this plugin return a stream ID which can then be used to listen to the updates for a given request. The service will
|
|
25
|
+
The responses from the AI assistant service are delivered asynchronously via mercury. The methods in this plugin return a stream ID which can then be used to listen to the updates for a given request. The service will respond in chunks. The latest response for a given request will contain the full response.
|
|
26
26
|
|
|
27
27
|
The data used for the arguments to the methods in this plugin is obtained from either Locus or the Meeting Container.
|
|
28
28
|
```js
|
|
@@ -123,8 +123,51 @@ webex.internal.aiAssistant.askMeAnything({
|
|
|
123
123
|
}
|
|
124
124
|
});
|
|
125
125
|
});
|
|
126
|
+
|
|
127
|
+
// Advanced: Use the common makeAiAssistantRequest method for custom requests
|
|
128
|
+
webex.internal.aiAssistant.makeAiAssistantRequest({
|
|
129
|
+
sessionId: '<session-id>', // Optional for first request
|
|
130
|
+
encryptionKeyUrl: '<encryption-key-url>',
|
|
131
|
+
contextResources: [{
|
|
132
|
+
id: '<meeting-instance-id>',
|
|
133
|
+
type: 'meeting',
|
|
134
|
+
url: 'company.webex.com'
|
|
135
|
+
}],
|
|
136
|
+
contentType: 'message', // 'action' or 'message'
|
|
137
|
+
contentValue: 'What were the key takeaways?',
|
|
138
|
+
requestId: 'custom-id', // Optional
|
|
139
|
+
locale: 'en_US', // Optional
|
|
140
|
+
assistant: 'meeting-assistant' // Optional
|
|
141
|
+
}).then((response) => {
|
|
142
|
+
const { requestId, sessionId, streamEventName } = response;
|
|
143
|
+
|
|
144
|
+
// Listen for streaming responses
|
|
145
|
+
webex.internal.aiAssistant.on(streamEventName, (data) => {
|
|
146
|
+
console.log('Custom AI Response:', data.message);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Optional Parameters
|
|
152
|
+
|
|
153
|
+
All AI Assistant methods support an optional `requestId` parameter that allows you to specify a custom request identifier:
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
// Example with custom requestId
|
|
157
|
+
webex.internal.aiAssistant.summarizeMeeting({
|
|
158
|
+
meetingInstanceId: '<meeting-instance-id>',
|
|
159
|
+
meetingSite: 'company.webex.com',
|
|
160
|
+
sessionId: '<session-id>',
|
|
161
|
+
encryptionKeyUrl: '<encryption-key-url>',
|
|
162
|
+
requestId: 'my-custom-request-id' // Optional: specify your own request ID
|
|
163
|
+
}).then((response) => {
|
|
164
|
+
// The response will contain your custom requestId
|
|
165
|
+
console.log('Request ID:', response.requestId); // 'my-custom-request-id'
|
|
166
|
+
});
|
|
126
167
|
```
|
|
127
168
|
|
|
169
|
+
If `requestId` is not provided, a new UUID will be automatically generated for each request.
|
|
170
|
+
|
|
128
171
|
### Response Format
|
|
129
172
|
|
|
130
173
|
All AI Assistant methods return a Promise that resolves with:
|
package/dist/ai-assistant.js
CHANGED
|
@@ -22,6 +22,7 @@ require("@webex/internal-plugin-mercury");
|
|
|
22
22
|
var _lodash = require("lodash");
|
|
23
23
|
var _commonTimers = require("@webex/common-timers");
|
|
24
24
|
var _constants = require("./constants");
|
|
25
|
+
var _utils = require("./utils");
|
|
25
26
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
26
27
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
27
28
|
* Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -137,26 +138,50 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
137
138
|
this.trigger(this._getResultEventName(data.clientRequestId), data);
|
|
138
139
|
},
|
|
139
140
|
/**
|
|
140
|
-
* Decrypts the
|
|
141
|
-
* @param {
|
|
142
|
-
* @
|
|
143
|
-
* @param {string} options.encryptionKeyUrl the encryption key URL to use for
|
|
144
|
-
* @returns {Promise<Object>} returns a promise that resolves with the decrypted value
|
|
141
|
+
* Decrypts the response content in place
|
|
142
|
+
* @param {any} responseContent the content object from the assistant-api response
|
|
143
|
+
* @returns {Promise} resolves once decryption is complete
|
|
145
144
|
*/
|
|
146
|
-
|
|
145
|
+
_decryptContent: function _decryptContent(responseContent) {
|
|
147
146
|
var _this4 = this;
|
|
148
|
-
return (0, _asyncToGenerator2.default)(
|
|
149
|
-
var
|
|
150
|
-
return _regenerator.default.wrap(function
|
|
147
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
148
|
+
var _t;
|
|
149
|
+
return _regenerator.default.wrap(function (_context) {
|
|
151
150
|
while (1) switch (_context.prev = _context.next) {
|
|
152
151
|
case 0:
|
|
153
|
-
|
|
154
|
-
_context.next = 3;
|
|
155
|
-
|
|
152
|
+
_t = responseContent.name;
|
|
153
|
+
_context.next = _t === _constants.RESPONSE_NAMES.MESSAGE ? 1 : _t === _constants.RESPONSE_NAMES.CITED_ANSWER ? 3 : _t === _constants.RESPONSE_NAMES.SCHEDULE_MEETING ? 5 : _t === _constants.RESPONSE_NAMES.TOOL_RESULT ? 7 : _t === _constants.RESPONSE_NAMES.TOOL_USE ? 8 : _t === _constants.RESPONSE_NAMES.WORKSPACE ? 10 : 12;
|
|
154
|
+
break;
|
|
155
|
+
case 1:
|
|
156
|
+
_context.next = 2;
|
|
157
|
+
return (0, _utils.decryptMessage)(responseContent, _this4.webex);
|
|
158
|
+
case 2:
|
|
159
|
+
return _context.abrupt("continue", 13);
|
|
156
160
|
case 3:
|
|
157
|
-
|
|
158
|
-
return
|
|
161
|
+
_context.next = 4;
|
|
162
|
+
return (0, _utils.decryptCitedAnswer)(responseContent, _this4.webex);
|
|
163
|
+
case 4:
|
|
164
|
+
return _context.abrupt("continue", 13);
|
|
159
165
|
case 5:
|
|
166
|
+
_context.next = 6;
|
|
167
|
+
return (0, _utils.decryptScheduleMeeting)(responseContent, _this4.webex);
|
|
168
|
+
case 6:
|
|
169
|
+
return _context.abrupt("continue", 13);
|
|
170
|
+
case 7:
|
|
171
|
+
return _context.abrupt("continue", 13);
|
|
172
|
+
case 8:
|
|
173
|
+
_context.next = 9;
|
|
174
|
+
return (0, _utils.decryptToolUse)(responseContent, _this4.webex);
|
|
175
|
+
case 9:
|
|
176
|
+
return _context.abrupt("continue", 13);
|
|
177
|
+
case 10:
|
|
178
|
+
_context.next = 11;
|
|
179
|
+
return (0, _utils.decryptWorkspace)(responseContent, _this4.webex);
|
|
180
|
+
case 11:
|
|
181
|
+
return _context.abrupt("continue", 13);
|
|
182
|
+
case 12:
|
|
183
|
+
_this4.logger.error("AI assistant->_decryptContent#ERROR, Unknown response content name: ".concat(responseContent.name));
|
|
184
|
+
case 13:
|
|
160
185
|
case "end":
|
|
161
186
|
return _context.stop();
|
|
162
187
|
}
|
|
@@ -168,19 +193,16 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
168
193
|
* @param {Object} options
|
|
169
194
|
* @param {string} options.resource the URL to query
|
|
170
195
|
* @param {Mixed} options.params additional params for the body of the request
|
|
171
|
-
* @param {string} options.dataPath the path to get the data in the result object
|
|
172
196
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
173
197
|
*/
|
|
174
198
|
_request: function _request(options) {
|
|
175
199
|
var _this5 = this;
|
|
176
200
|
var resource = options.resource,
|
|
177
|
-
params = options.params
|
|
178
|
-
dataPath = options.dataPath;
|
|
201
|
+
params = options.params;
|
|
179
202
|
var timeout = this.config.requestTimeout;
|
|
180
|
-
var requestId = _uuid.default.v4();
|
|
203
|
+
var requestId = options.requestId || _uuid.default.v4();
|
|
181
204
|
var eventName = this._getResultEventName(requestId);
|
|
182
205
|
var streamEventName = this._getStreamEventName(requestId);
|
|
183
|
-
var concatenatedMessage = '';
|
|
184
206
|
|
|
185
207
|
// eslint-disable-next-line no-async-promise-executor
|
|
186
208
|
return new _promise.default(function (resolve, reject) {
|
|
@@ -194,98 +216,50 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
194
216
|
});
|
|
195
217
|
}, timeout);
|
|
196
218
|
_this5.listenTo(_this5, eventName, /*#__PURE__*/function () {
|
|
197
|
-
var
|
|
198
|
-
var resultData, errorMessage, errorCode,
|
|
199
|
-
return _regenerator.default.wrap(function
|
|
219
|
+
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(data) {
|
|
220
|
+
var resultData, errorMessage, errorCode, responseType, decryptErrorMessage, _t2;
|
|
221
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
200
222
|
while (1) switch (_context2.prev = _context2.next) {
|
|
201
223
|
case 0:
|
|
202
224
|
timer.reset();
|
|
203
|
-
resultData = (0, _lodash.get)(data,
|
|
225
|
+
resultData = (0, _lodash.get)(data, 'response.content', {});
|
|
204
226
|
errorMessage = (0, _lodash.get)(data, 'response.errorMessage');
|
|
205
227
|
errorCode = (0, _lodash.get)(data, 'response.errorCode');
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
228
|
+
responseType = (0, _lodash.get)(data, 'responseType');
|
|
229
|
+
if (data.finished) {
|
|
230
|
+
timer.cancel();
|
|
231
|
+
_this5.stopListening(_this5, eventName);
|
|
209
232
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
if (!(resultData !== null && resultData !== void 0 && resultData.value)) {
|
|
214
|
-
_context2.next = 11;
|
|
233
|
+
_context2.prev = 1;
|
|
234
|
+
if (errorCode) {
|
|
235
|
+
_context2.next = 2;
|
|
215
236
|
break;
|
|
216
237
|
}
|
|
217
|
-
_context2.next =
|
|
218
|
-
return _this5.
|
|
219
|
-
case
|
|
220
|
-
|
|
221
|
-
case 11:
|
|
222
|
-
// Emit the final message
|
|
223
|
-
_this5.trigger(streamEventName, {
|
|
224
|
-
message: decryptedMessage || '',
|
|
225
|
-
requestId: requestId,
|
|
226
|
-
finished: true,
|
|
227
|
-
errorMessage: errorMessage,
|
|
228
|
-
errorCode: errorCode
|
|
229
|
-
});
|
|
230
|
-
_this5.stopListening(_this5, eventName);
|
|
231
|
-
_context2.next = 18;
|
|
232
|
-
break;
|
|
233
|
-
case 15:
|
|
234
|
-
_context2.prev = 15;
|
|
235
|
-
_context2.t0 = _context2["catch"](6);
|
|
236
|
-
_this5.trigger(streamEventName, {
|
|
237
|
-
message: concatenatedMessage,
|
|
238
|
-
requestId: requestId,
|
|
239
|
-
finished: true,
|
|
240
|
-
errorMessage: errorMessage || _context2.t0.message,
|
|
241
|
-
errorCode: errorCode
|
|
242
|
-
});
|
|
243
|
-
case 18:
|
|
244
|
-
_context2.next = 33;
|
|
245
|
-
break;
|
|
246
|
-
case 20:
|
|
247
|
-
_context2.prev = 20;
|
|
248
|
-
_decryptedMessage = '';
|
|
249
|
-
if (!(resultData !== null && resultData !== void 0 && resultData.value)) {
|
|
250
|
-
_context2.next = 26;
|
|
251
|
-
break;
|
|
252
|
-
}
|
|
253
|
-
_context2.next = 25;
|
|
254
|
-
return _this5._decryptData(resultData);
|
|
255
|
-
case 25:
|
|
256
|
-
_decryptedMessage = _context2.sent;
|
|
257
|
-
case 26:
|
|
258
|
-
concatenatedMessage += _decryptedMessage;
|
|
259
|
-
|
|
260
|
-
// Emit the concatenated message so far
|
|
261
|
-
_this5.trigger(streamEventName, {
|
|
262
|
-
message: concatenatedMessage,
|
|
263
|
-
requestId: requestId,
|
|
264
|
-
finished: false,
|
|
265
|
-
errorMessage: errorMessage,
|
|
266
|
-
errorCode: errorCode
|
|
267
|
-
});
|
|
268
|
-
_context2.next = 33;
|
|
238
|
+
_context2.next = 2;
|
|
239
|
+
return _this5._decryptContent(resultData);
|
|
240
|
+
case 2:
|
|
241
|
+
_context2.next = 4;
|
|
269
242
|
break;
|
|
270
|
-
case
|
|
271
|
-
_context2.prev =
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
243
|
+
case 3:
|
|
244
|
+
_context2.prev = 3;
|
|
245
|
+
_t2 = _context2["catch"](1);
|
|
246
|
+
decryptErrorMessage = _t2.message;
|
|
247
|
+
case 4:
|
|
248
|
+
_this5.trigger(streamEventName, (0, _lodash.merge)({}, data.response, {
|
|
249
|
+
responseType: responseType,
|
|
276
250
|
requestId: requestId,
|
|
277
|
-
finished:
|
|
278
|
-
errorMessage: errorMessage ||
|
|
251
|
+
finished: data.finished,
|
|
252
|
+
errorMessage: errorMessage || decryptErrorMessage,
|
|
279
253
|
errorCode: errorCode
|
|
280
|
-
});
|
|
281
|
-
case
|
|
254
|
+
}));
|
|
255
|
+
case 5:
|
|
282
256
|
case "end":
|
|
283
257
|
return _context2.stop();
|
|
284
258
|
}
|
|
285
|
-
}, _callee2, null, [[
|
|
259
|
+
}, _callee2, null, [[1, 3]]);
|
|
286
260
|
}));
|
|
287
261
|
return function (_x) {
|
|
288
|
-
return
|
|
262
|
+
return _ref.apply(this, arguments);
|
|
289
263
|
};
|
|
290
264
|
}());
|
|
291
265
|
_this5.webex.request({
|
|
@@ -296,18 +270,16 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
296
270
|
body: _objectSpread({
|
|
297
271
|
clientRequestId: requestId
|
|
298
272
|
}, params)
|
|
299
|
-
}).
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
var body = _ref3.body;
|
|
303
|
-
var sessionId = body.sessionId;
|
|
304
|
-
resolve({
|
|
273
|
+
}).then(function (_ref2) {
|
|
274
|
+
var body = _ref2.body;
|
|
275
|
+
resolve(_objectSpread(_objectSpread({}, body), {}, {
|
|
305
276
|
requestId: requestId,
|
|
306
|
-
sessionId: sessionId,
|
|
307
277
|
streamEventName: streamEventName
|
|
308
|
-
});
|
|
309
|
-
|
|
278
|
+
}));
|
|
279
|
+
}).catch(function (error) {
|
|
280
|
+
reject(error);
|
|
310
281
|
});
|
|
282
|
+
timer.start();
|
|
311
283
|
});
|
|
312
284
|
},
|
|
313
285
|
/**
|
|
@@ -321,28 +293,32 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
321
293
|
* @param {Object} options.parameters optional parameters to include in the request (for action type only)
|
|
322
294
|
* @param {Object} options.assistant optional parameter to specify the assistant to use
|
|
323
295
|
* @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'
|
|
296
|
+
* @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
|
|
297
|
+
* @param {string} options.entryPoint optional entryPoint to use for this request
|
|
324
298
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
299
|
+
* @public
|
|
300
|
+
* @memberof AIAssistant
|
|
325
301
|
*/
|
|
326
|
-
|
|
302
|
+
makeAiAssistantRequest: function makeAiAssistantRequest(options) {
|
|
327
303
|
var _this6 = this;
|
|
328
|
-
return (0, _asyncToGenerator2.default)(
|
|
304
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
329
305
|
var value, content;
|
|
330
|
-
return _regenerator.default.wrap(function
|
|
306
|
+
return _regenerator.default.wrap(function (_context3) {
|
|
331
307
|
while (1) switch (_context3.prev = _context3.next) {
|
|
332
308
|
case 0:
|
|
333
309
|
value = options.contentValue;
|
|
334
310
|
if (!(options.contentType === 'message')) {
|
|
335
|
-
_context3.next =
|
|
311
|
+
_context3.next = 2;
|
|
336
312
|
break;
|
|
337
313
|
}
|
|
338
|
-
_context3.next =
|
|
314
|
+
_context3.next = 1;
|
|
339
315
|
return _this6._encryptData({
|
|
340
316
|
text: options.contentValue,
|
|
341
317
|
encryptionKeyUrl: options.encryptionKeyUrl
|
|
342
318
|
});
|
|
343
|
-
case
|
|
319
|
+
case 1:
|
|
344
320
|
value = _context3.sent;
|
|
345
|
-
case
|
|
321
|
+
case 2:
|
|
346
322
|
content = {
|
|
347
323
|
context: {
|
|
348
324
|
resources: options.contextResources
|
|
@@ -351,21 +327,24 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
351
327
|
type: options.contentType,
|
|
352
328
|
value: value
|
|
353
329
|
};
|
|
354
|
-
if (options.
|
|
330
|
+
if (options.parameters) {
|
|
355
331
|
content.parameters = options.parameters;
|
|
356
332
|
}
|
|
357
|
-
return _context3.abrupt("return", _this6._request({
|
|
333
|
+
return _context3.abrupt("return", _this6._request(_objectSpread({
|
|
358
334
|
resource: options.sessionId ? "sessions/".concat(options.sessionId, "/messages") : 'sessions/messages',
|
|
359
|
-
|
|
360
|
-
params: _objectSpread({
|
|
335
|
+
params: _objectSpread(_objectSpread({
|
|
361
336
|
async: 'chunked',
|
|
362
337
|
locale: options.locale || 'en_US',
|
|
363
338
|
content: content
|
|
364
|
-
}, options.
|
|
339
|
+
}, options.entryPoint ? {
|
|
340
|
+
entryPoint: options.entryPoint
|
|
341
|
+
} : {}), options.assistant ? {
|
|
365
342
|
assistant: options.assistant
|
|
366
343
|
} : {})
|
|
367
|
-
}
|
|
368
|
-
|
|
344
|
+
}, options.requestId ? {
|
|
345
|
+
requestId: options.requestId
|
|
346
|
+
} : {})));
|
|
347
|
+
case 3:
|
|
369
348
|
case "end":
|
|
370
349
|
return _context3.stop();
|
|
371
350
|
}
|
|
@@ -380,10 +359,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
380
359
|
* @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
|
|
381
360
|
* @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
|
|
382
361
|
* @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.
|
|
362
|
+
* @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
|
|
383
363
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
384
364
|
*/
|
|
385
365
|
summarizeMeeting: function summarizeMeeting(options) {
|
|
386
|
-
return this.
|
|
366
|
+
return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
|
|
387
367
|
contentType: _constants.CONTENT_TYPES.ACTION,
|
|
388
368
|
contentValue: _constants.ACTION_TYPES.SUMMARIZE_FOR_ME,
|
|
389
369
|
contextResources: [{
|
|
@@ -404,10 +384,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
404
384
|
* @param {string} options.meetingSite the name.webex.com site for the meeting
|
|
405
385
|
* @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
|
|
406
386
|
* @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
|
|
387
|
+
* @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
|
|
407
388
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
408
389
|
*/
|
|
409
390
|
wasMyNameMentioned: function wasMyNameMentioned(options) {
|
|
410
|
-
return this.
|
|
391
|
+
return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
|
|
411
392
|
contextResources: [{
|
|
412
393
|
id: options.meetingInstanceId,
|
|
413
394
|
type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
|
|
@@ -424,10 +405,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
424
405
|
* @param {string} options.meetingSite the name.webex.com site for the meeting
|
|
425
406
|
* @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
|
|
426
407
|
* @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
|
|
408
|
+
* @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
|
|
427
409
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
428
410
|
*/
|
|
429
411
|
showAllActionItems: function showAllActionItems(options) {
|
|
430
|
-
return this.
|
|
412
|
+
return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
|
|
431
413
|
contextResources: [{
|
|
432
414
|
id: options.meetingInstanceId,
|
|
433
415
|
type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
|
|
@@ -444,20 +426,20 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
444
426
|
* @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption
|
|
445
427
|
* @returns {Promise<string>} returns a promise that resolves with the encrypted text
|
|
446
428
|
*/
|
|
447
|
-
_encryptData: function _encryptData(
|
|
429
|
+
_encryptData: function _encryptData(_ref3) {
|
|
448
430
|
var _this7 = this;
|
|
449
|
-
return (0, _asyncToGenerator2.default)(
|
|
431
|
+
return (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
450
432
|
var text, encryptionKeyUrl, result;
|
|
451
|
-
return _regenerator.default.wrap(function
|
|
433
|
+
return _regenerator.default.wrap(function (_context4) {
|
|
452
434
|
while (1) switch (_context4.prev = _context4.next) {
|
|
453
435
|
case 0:
|
|
454
|
-
text =
|
|
455
|
-
_context4.next =
|
|
436
|
+
text = _ref3.text, encryptionKeyUrl = _ref3.encryptionKeyUrl;
|
|
437
|
+
_context4.next = 1;
|
|
456
438
|
return _this7.webex.internal.encryption.encryptText(encryptionKeyUrl, text);
|
|
457
|
-
case
|
|
439
|
+
case 1:
|
|
458
440
|
result = _context4.sent;
|
|
459
441
|
return _context4.abrupt("return", result);
|
|
460
|
-
case
|
|
442
|
+
case 2:
|
|
461
443
|
case "end":
|
|
462
444
|
return _context4.stop();
|
|
463
445
|
}
|
|
@@ -472,10 +454,11 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
472
454
|
* @param {string} options.sessionId the session ID for subsequent requests, not required for the first request
|
|
473
455
|
* @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary
|
|
474
456
|
* @param {string} options.question the question to ask about the meeting content
|
|
457
|
+
* @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated
|
|
475
458
|
* @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName
|
|
476
459
|
*/
|
|
477
460
|
askMeAnything: function askMeAnything(options) {
|
|
478
|
-
return this.
|
|
461
|
+
return this.makeAiAssistantRequest(_objectSpread(_objectSpread({}, options), {}, {
|
|
479
462
|
contextResources: [{
|
|
480
463
|
id: options.meetingInstanceId,
|
|
481
464
|
type: _constants.CONTEXT_RESOURCE_TYPES.MEETING,
|
|
@@ -485,7 +468,7 @@ var AIAssistant = _webexCore.WebexPlugin.extend({
|
|
|
485
468
|
contentValue: options.question
|
|
486
469
|
}));
|
|
487
470
|
},
|
|
488
|
-
version: "0.0.0
|
|
471
|
+
version: "0.0.0"
|
|
489
472
|
});
|
|
490
473
|
var _default = exports.default = AIAssistant;
|
|
491
474
|
//# sourceMappingURL=ai-assistant.js.map
|
package/dist/ai-assistant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","AIAssistant","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","AI_ASSISTANT_REGISTERED","catch","concat","message","unregister","_this2","stopListeningForEvents","disconnect","AI_ASSISTANT_UNREGISTERED","_this3","on","ASSISTANT_API_RESPONSE_EVENT","envelope","_handleEvent","data","off","_getResultEventName","requestId","AI_ASSISTANT_RESULT","_getStreamEventName","AI_ASSISTANT_STREAM","clientRequestId","_decryptData","_ref","_this4","_asyncToGenerator2","_regenerator","mark","_callee","value","encryptionKeyUrl","result","wrap","_callee$","_context","prev","next","encryption","decryptText","sent","abrupt","stop","_request","options","_this5","resource","params","dataPath","timeout","config","requestTimeout","uuid","v4","eventName","streamEventName","concatenatedMessage","timer","Timer","stopListening","finished","errorMessage","AI_ASSISTANT_ERRORS","AI_ASSISTANT_TIMEOUT","errorCode","AI_ASSISTANT_ERROR_CODES","listenTo","_ref2","_callee2","resultData","decryptedMessage","_decryptedMessage","_callee2$","_context2","reset","get","cancel","t0","t1","_x","request","service","AI_ASSISTANT_SERVICE_NAME","method","contentType","body","_ref3","sessionId","start","_makeMeetingRequest","_this6","_callee3","content","_callee3$","_context3","contentValue","_encryptData","text","context","resources","contextResources","type","parameters","async","locale","assistant","summarizeMeeting","CONTENT_TYPES","ACTION","ACTION_TYPES","SUMMARIZE_FOR_ME","id","meetingInstanceId","CONTEXT_RESOURCE_TYPES","MEETING","url","meetingSite","lastMinutes","wasMyNameMentioned","WAS_MY_NAME_MENTIONED","showAllActionItems","SHOW_ALL_ACTION_ITEMS","_ref4","_this7","_callee4","_callee4$","_context4","encryptText","askMeAnything","MESSAGE","question","version","_default","exports"],"sources":["ai-assistant.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {get} from 'lodash';\nimport {Timer} from '@webex/common-timers';\n\nimport {\n MakeMeetingRequestOptions,\n RequestOptions,\n RequestResponse,\n SummarizeMeetingOptions,\n} from './types';\nimport {\n AI_ASSISTANT_ERROR_CODES,\n AI_ASSISTANT_ERRORS,\n AI_ASSISTANT_REGISTERED,\n AI_ASSISTANT_RESULT,\n AI_ASSISTANT_STREAM,\n AI_ASSISTANT_UNREGISTERED,\n AI_ASSISTANT_SERVICE_NAME,\n ASSISTANT_API_RESPONSE_EVENT,\n ACTION_TYPES,\n CONTENT_TYPES,\n CONTEXT_RESOURCE_TYPES,\n} from './constants';\n\nconst AIAssistant = WebexPlugin.extend({\n namespace: 'AIAssistant',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof AIAssistant\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Explicitly sets up the AI assistant plugin by connecting to mercury, and listening for AI assistant events.\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('AI assistant->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('AI assistant->register#INFO, AI assistant plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(AI_ASSISTANT_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`AI assistant->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the AI assistant plugin by disconnecting from mercury, and stops listening to AI assistant events\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('AI assistant->unregister#INFO, AI assistant plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return this.webex.internal.mercury.disconnect().then(() => {\n this.trigger(AI_ASSISTANT_UNREGISTERED);\n this.registered = false;\n });\n },\n\n /**\n * registers for Assistant API events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(ASSISTANT_API_RESPONSE_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the Assistant API events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(ASSISTANT_API_RESPONSE_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * This is used by the plugin to listen for the result of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId: string) {\n return `${AI_ASSISTANT_RESULT}:${requestId}`;\n },\n\n /**\n * constructs the stream event name based on request id\n * This is used by the consumer to listen for the stream (i.e. the data) of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getStreamEventName(requestId: string) {\n return `${AI_ASSISTANT_STREAM}:${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.clientRequestId), data);\n },\n\n /**\n * Decrypts the encrypted value using the encryption key URL\n * @param {Object} options\n * @param {string} options.value the encrypted value to decrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for\n * @returns {Promise<Object>} returns a promise that resolves with the decrypted value\n */\n async _decryptData({value, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.decryptText(encryptionKeyUrl, value);\n\n return result;\n },\n\n /**\n * Makes the request to the AI assistant service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @param {string} options.dataPath the path to get the data in the result object\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n _request(options: RequestOptions): Promise<RequestResponse> {\n const {resource, params, dataPath} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const streamEventName = this._getStreamEventName(requestId);\n let concatenatedMessage = '';\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n this.trigger(streamEventName, {\n requestId,\n finished: true,\n errorMessage: AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT,\n errorCode: AI_ASSISTANT_ERROR_CODES.AI_ASSISTANT_TIMEOUT,\n });\n }, timeout);\n\n this.listenTo(this, eventName, async (data) => {\n timer.reset();\n const resultData = get(data, dataPath, []);\n const errorMessage = get(data, 'response.errorMessage');\n const errorCode = get(data, 'response.errorCode');\n\n if (data.finished) {\n // For finished messages, decrypt and emit the final complete message\n timer.cancel();\n\n try {\n let decryptedMessage;\n if (resultData?.value) {\n decryptedMessage = await this._decryptData(resultData);\n }\n\n // Emit the final message\n this.trigger(streamEventName, {\n message: decryptedMessage || '',\n requestId,\n finished: true,\n errorMessage,\n errorCode,\n });\n\n this.stopListening(this, eventName);\n } catch (decryptError) {\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: true,\n errorMessage: errorMessage || decryptError.message,\n errorCode,\n });\n }\n } else {\n // For non-finished messages, concatenate and emit the accumulated message\n try {\n let decryptedMessage = '';\n if (resultData?.value) {\n decryptedMessage = await this._decryptData(resultData);\n }\n\n concatenatedMessage += decryptedMessage;\n\n // Emit the concatenated message so far\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: false,\n errorMessage,\n errorCode,\n });\n } catch (decryptError) {\n // If decryption fails, we still want to continue listening for more messages\n this.trigger(streamEventName, {\n message: concatenatedMessage,\n requestId,\n finished: false,\n errorMessage: errorMessage || decryptError.message,\n errorCode,\n });\n }\n }\n });\n\n this.webex\n .request({\n service: AI_ASSISTANT_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {clientRequestId: requestId, ...params},\n })\n .catch((error) => {\n reject(error);\n })\n .then(({body}) => {\n const {sessionId} = body;\n\n resolve({\n requestId,\n sessionId,\n streamEventName,\n });\n timer.start();\n });\n });\n },\n\n /**\n * Common method to make AI assistant requests for meeting analysis\n * @param {Object} options\n * @param {string} options.contextResources array of context resources to include in the request\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.contentType the type of content ('action' or 'message')\n * @param {string} options.contentValue the value to use (action name or message text)\n * @param {Object} options.parameters optional parameters to include in the request (for action type only)\n * @param {Object} options.assistant optional parameter to specify the assistant to use\n * @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n async _makeMeetingRequest(options: MakeMeetingRequestOptions): Promise<RequestResponse> {\n let value = options.contentValue;\n\n if (options.contentType === 'message') {\n value = await this._encryptData({\n text: options.contentValue,\n encryptionKeyUrl: options.encryptionKeyUrl,\n });\n }\n\n const content: any = {\n context: {\n resources: options.contextResources,\n },\n encryptionKeyUrl: options.encryptionKeyUrl,\n type: options.contentType,\n value,\n };\n\n if (options.contentType === 'action' && options.parameters) {\n content.parameters = options.parameters;\n }\n\n return this._request({\n resource: options.sessionId ? `sessions/${options.sessionId}/messages` : 'sessions/messages',\n dataPath: 'response.content',\n params: {\n async: 'chunked',\n locale: options.locale || 'en_US',\n content,\n ...(options.assistant ? {assistant: options.assistant} : {}),\n },\n });\n },\n\n /**\n * Returns the summary of a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n summarizeMeeting(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\n ...options,\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SUMMARIZE_FOR_ME,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n ...(options.lastMinutes ? {parameters: {lastMinutes: options.lastMinutes}} : {}),\n });\n },\n\n /**\n * Checks if the user's name was mentioned in a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n wasMyNameMentioned(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.WAS_MY_NAME_MENTIONED,\n });\n },\n\n /**\n * Returns all action items from a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n showAllActionItems(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this._makeMeetingRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SHOW_ALL_ACTION_ITEMS,\n });\n },\n\n /**\n * Helper method to encrypt text using the encryption key URL\n * @param {Object} options\n * @param {string} options.text the text to encrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption\n * @returns {Promise<string>} returns a promise that resolves with the encrypted text\n */\n async _encryptData({text, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.encryptText(encryptionKeyUrl, text);\n\n return result;\n },\n\n /**\n * Ask any question about the meeting content\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.question the question to ask about the meeting content\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n askMeAnything(options: SummarizeMeetingOptions & {question: string}): Promise<RequestResponse> {\n return this._makeMeetingRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.MESSAGE,\n contentValue: options.question,\n });\n },\n});\n\nexport default AIAssistant;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_webexCore","_lodash","_commonTimers","_constants","_utils","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","AIAssistant","WebexPlugin","extend","namespace","registered","initialize","_len","args","Array","_key","_apply","prototype","register","_this","webex","canAuthorize","logger","error","_promise","reject","Error","info","resolve","internal","mercury","connect","then","listenForEvents","trigger","AI_ASSISTANT_REGISTERED","catch","concat","message","unregister","_this2","stopListeningForEvents","disconnect","AI_ASSISTANT_UNREGISTERED","_this3","on","ASSISTANT_API_RESPONSE_EVENT","envelope","_handleEvent","data","off","_getResultEventName","requestId","AI_ASSISTANT_RESULT","_getStreamEventName","AI_ASSISTANT_STREAM","clientRequestId","_decryptContent","responseContent","_this4","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","name","RESPONSE_NAMES","MESSAGE","CITED_ANSWER","SCHEDULE_MEETING","TOOL_RESULT","TOOL_USE","WORKSPACE","decryptMessage","abrupt","decryptCitedAnswer","decryptScheduleMeeting","decryptToolUse","decryptWorkspace","stop","_request","options","_this5","resource","params","timeout","config","requestTimeout","uuid","v4","eventName","streamEventName","timer","Timer","stopListening","finished","errorMessage","AI_ASSISTANT_ERRORS","AI_ASSISTANT_TIMEOUT","errorCode","AI_ASSISTANT_ERROR_CODES","listenTo","_ref","_callee2","resultData","responseType","decryptErrorMessage","_t2","_context2","reset","get","cancel","merge","response","_x","request","service","AI_ASSISTANT_SERVICE_NAME","method","contentType","body","_ref2","start","makeAiAssistantRequest","_this6","_callee3","value","content","_context3","contentValue","_encryptData","text","encryptionKeyUrl","sent","context","resources","contextResources","type","parameters","sessionId","async","locale","entryPoint","assistant","summarizeMeeting","CONTENT_TYPES","ACTION","ACTION_TYPES","SUMMARIZE_FOR_ME","id","meetingInstanceId","CONTEXT_RESOURCE_TYPES","MEETING","url","meetingSite","lastMinutes","wasMyNameMentioned","WAS_MY_NAME_MENTIONED","showAllActionItems","SHOW_ALL_ACTION_ITEMS","_ref3","_this7","_callee4","result","_context4","encryption","encryptText","askMeAnything","question","version","_default","exports"],"sources":["ai-assistant.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.\n */\nimport uuid from 'uuid';\nimport {WebexPlugin} from '@webex/webex-core';\nimport '@webex/internal-plugin-mercury';\nimport {get, merge} from 'lodash';\nimport {Timer} from '@webex/common-timers';\n\nimport {\n AiAssistantRequestOptions,\n RequestOptions,\n RequestResponse,\n SummarizeMeetingOptions,\n} from './types';\nimport {\n AI_ASSISTANT_ERROR_CODES,\n AI_ASSISTANT_ERRORS,\n AI_ASSISTANT_REGISTERED,\n AI_ASSISTANT_RESULT,\n AI_ASSISTANT_STREAM,\n AI_ASSISTANT_UNREGISTERED,\n AI_ASSISTANT_SERVICE_NAME,\n ASSISTANT_API_RESPONSE_EVENT,\n ACTION_TYPES,\n CONTENT_TYPES,\n CONTEXT_RESOURCE_TYPES,\n RESPONSE_NAMES,\n} from './constants';\nimport {\n decryptCitedAnswer,\n decryptMessage,\n decryptScheduleMeeting,\n decryptToolUse,\n decryptWorkspace,\n} from './utils';\n\nconst AIAssistant = WebexPlugin.extend({\n namespace: 'AIAssistant',\n\n /**\n * registered value indicating events registration is successful\n * @instance\n * @type {Boolean}\n * @memberof AIAssistant\n */\n registered: false,\n\n /**\n * Initializer\n * @private\n * @param {Object} attrs\n * @param {Object} options\n * @returns {undefined}\n */\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n },\n\n /**\n * Explicitly sets up the AI assistant plugin by connecting to mercury, and listening for AI assistant events.\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n register() {\n if (!this.webex.canAuthorize) {\n this.logger.error('AI assistant->register#ERROR, Unable to register, SDK cannot authorize');\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n this.logger.info('AI assistant->register#INFO, AI assistant plugin already registered');\n\n return Promise.resolve();\n }\n\n return this.webex.internal.mercury\n .connect()\n .then(() => {\n this.listenForEvents();\n this.trigger(AI_ASSISTANT_REGISTERED);\n this.registered = true;\n })\n .catch((error) => {\n this.logger.error(`AI assistant->register#ERROR, Unable to register, ${error.message}`);\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Explicitly tears down the AI assistant plugin by disconnecting from mercury, and stops listening to AI assistant events\n * @returns {Promise}\n * @public\n * @memberof AIAssistant\n */\n unregister() {\n if (!this.registered) {\n this.logger.info('AI assistant->unregister#INFO, AI assistant plugin already unregistered');\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return this.webex.internal.mercury.disconnect().then(() => {\n this.trigger(AI_ASSISTANT_UNREGISTERED);\n this.registered = false;\n });\n },\n\n /**\n * registers for Assistant API events through mercury\n * @returns {undefined}\n * @private\n */\n listenForEvents() {\n this.webex.internal.mercury.on(ASSISTANT_API_RESPONSE_EVENT, (envelope) => {\n this._handleEvent(envelope.data);\n });\n },\n\n /**\n * unregisteres all the Assistant API events from mercury\n * @returns {undefined}\n * @private\n */\n stopListeningForEvents() {\n this.webex.internal.mercury.off(ASSISTANT_API_RESPONSE_EVENT);\n },\n\n /**\n * constructs the event name based on request id\n * This is used by the plugin to listen for the result of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getResultEventName(requestId: string) {\n return `${AI_ASSISTANT_RESULT}:${requestId}`;\n },\n\n /**\n * constructs the stream event name based on request id\n * This is used by the consumer to listen for the stream (i.e. the data) of a particular request\n * @param {UUID} requestId the id of the request\n * @returns {string}\n */\n _getStreamEventName(requestId: string) {\n return `${AI_ASSISTANT_STREAM}:${requestId}`;\n },\n\n /**\n * Takes incoming data and triggers correct events\n * @param {Object} data the event data\n * @returns {undefined}\n */\n _handleEvent(data) {\n this.trigger(this._getResultEventName(data.clientRequestId), data);\n },\n\n /**\n * Decrypts the response content in place\n * @param {any} responseContent the content object from the assistant-api response\n * @returns {Promise} resolves once decryption is complete\n */\n async _decryptContent(responseContent) {\n switch (responseContent.name) {\n case RESPONSE_NAMES.MESSAGE: {\n await decryptMessage(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.CITED_ANSWER: {\n await decryptCitedAnswer(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.SCHEDULE_MEETING: {\n await decryptScheduleMeeting(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.TOOL_RESULT: {\n // No encrypted content in tool_result\n break;\n }\n case RESPONSE_NAMES.TOOL_USE: {\n await decryptToolUse(responseContent, this.webex);\n break;\n }\n case RESPONSE_NAMES.WORKSPACE: {\n await decryptWorkspace(responseContent, this.webex);\n break;\n }\n default:\n this.logger.error(\n `AI assistant->_decryptContent#ERROR, Unknown response content name: ${responseContent.name}`\n );\n }\n },\n\n /**\n * Makes the request to the AI assistant service\n * @param {Object} options\n * @param {string} options.resource the URL to query\n * @param {Mixed} options.params additional params for the body of the request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n _request(options: RequestOptions): Promise<RequestResponse> {\n const {resource, params} = options;\n\n const timeout = this.config.requestTimeout;\n const requestId = options.requestId || uuid.v4();\n const eventName = this._getResultEventName(requestId);\n const streamEventName = this._getStreamEventName(requestId);\n\n // eslint-disable-next-line no-async-promise-executor\n return new Promise((resolve, reject) => {\n const timer = new Timer(() => {\n this.stopListening(this, eventName);\n this.trigger(streamEventName, {\n requestId,\n finished: true,\n errorMessage: AI_ASSISTANT_ERRORS.AI_ASSISTANT_TIMEOUT,\n errorCode: AI_ASSISTANT_ERROR_CODES.AI_ASSISTANT_TIMEOUT,\n });\n }, timeout);\n\n this.listenTo(this, eventName, async (data) => {\n timer.reset();\n const resultData = get(data, 'response.content', {});\n const errorMessage = get(data, 'response.errorMessage');\n const errorCode = get(data, 'response.errorCode');\n const responseType = get(data, 'responseType');\n\n if (data.finished) {\n timer.cancel();\n this.stopListening(this, eventName);\n }\n\n let decryptErrorMessage;\n\n try {\n if (!errorCode) {\n await this._decryptContent(resultData);\n }\n } catch (decryptError) {\n decryptErrorMessage = decryptError.message;\n }\n\n this.trigger(\n streamEventName,\n merge({}, data.response, {\n responseType,\n requestId,\n finished: data.finished,\n errorMessage: errorMessage || decryptErrorMessage,\n errorCode,\n })\n );\n });\n\n this.webex\n .request({\n service: AI_ASSISTANT_SERVICE_NAME,\n resource,\n method: 'POST',\n contentType: 'application/json',\n body: {clientRequestId: requestId, ...params},\n })\n .then(({body}) => {\n resolve({...body, requestId, streamEventName});\n })\n .catch((error) => {\n reject(error);\n });\n\n timer.start();\n });\n },\n\n /**\n * Common method to make AI assistant requests for meeting analysis\n * @param {Object} options\n * @param {string} options.contextResources array of context resources to include in the request\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.contentType the type of content ('action' or 'message')\n * @param {string} options.contentValue the value to use (action name or message text)\n * @param {Object} options.parameters optional parameters to include in the request (for action type only)\n * @param {Object} options.assistant optional parameter to specify the assistant to use\n * @param {Object} options.locale optional locale to use for the request, defaults to 'en_US'\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @param {string} options.entryPoint optional entryPoint to use for this request\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n * @public\n * @memberof AIAssistant\n */\n async makeAiAssistantRequest(options: AiAssistantRequestOptions): Promise<RequestResponse> {\n let value = options.contentValue;\n\n if (options.contentType === 'message') {\n value = await this._encryptData({\n text: options.contentValue,\n encryptionKeyUrl: options.encryptionKeyUrl,\n });\n }\n\n const content: any = {\n context: {\n resources: options.contextResources,\n },\n encryptionKeyUrl: options.encryptionKeyUrl,\n type: options.contentType,\n value,\n };\n\n if (options.parameters) {\n content.parameters = options.parameters;\n }\n\n return this._request({\n resource: options.sessionId ? `sessions/${options.sessionId}/messages` : 'sessions/messages',\n params: {\n async: 'chunked',\n locale: options.locale || 'en_US',\n content,\n ...(options.entryPoint ? {entryPoint: options.entryPoint} : {}),\n ...(options.assistant ? {assistant: options.assistant} : {}),\n },\n ...(options.requestId ? {requestId: options.requestId} : {}),\n });\n },\n\n /**\n * Returns the summary of a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {number} options.lastMinutes Optional number of minutes to summarize from the end of the meeting. If not included, summarizes from the start.\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n summarizeMeeting(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SUMMARIZE_FOR_ME,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n ...(options.lastMinutes ? {parameters: {lastMinutes: options.lastMinutes}} : {}),\n });\n },\n\n /**\n * Checks if the user's name was mentioned in a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n wasMyNameMentioned(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.WAS_MY_NAME_MENTIONED,\n });\n },\n\n /**\n * Returns all action items from a meeting\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n showAllActionItems(options: SummarizeMeetingOptions): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.ACTION,\n contentValue: ACTION_TYPES.SHOW_ALL_ACTION_ITEMS,\n });\n },\n\n /**\n * Helper method to encrypt text using the encryption key URL\n * @param {Object} options\n * @param {string} options.text the text to encrypt\n * @param {string} options.encryptionKeyUrl the encryption key URL to use for encryption\n * @returns {Promise<string>} returns a promise that resolves with the encrypted text\n */\n async _encryptData({text, encryptionKeyUrl}) {\n const result = await this.webex.internal.encryption.encryptText(encryptionKeyUrl, text);\n\n return result;\n },\n\n /**\n * Ask any question about the meeting content\n * @param {Object} options\n * @param {string} options.meetingInstanceId the meeting instance ID for the meeting from locus\n * @param {string} options.meetingSite the name.webex.com site for the meeting\n * @param {string} options.sessionId the session ID for subsequent requests, not required for the first request\n * @param {string} options.encryptionKeyUrl the encryption key URL for this meeting summary\n * @param {string} options.question the question to ask about the meeting content\n * @param {string} options.requestId optional request ID to use for this request, if not provided a new UUID will be generated\n * @returns {Promise<Object>} Resolves with an object containing the requestId, sessionId and streamEventName\n */\n askMeAnything(options: SummarizeMeetingOptions & {question: string}): Promise<RequestResponse> {\n return this.makeAiAssistantRequest({\n ...options,\n contextResources: [\n {\n id: options.meetingInstanceId,\n type: CONTEXT_RESOURCE_TYPES.MEETING,\n url: options.meetingSite,\n },\n ],\n contentType: CONTENT_TYPES.MESSAGE,\n contentValue: options.question,\n });\n },\n});\n\nexport default AIAssistant;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_default","exports","default","aiassistant","requestTimeout"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n aiassistant: {\n /**\n * Timeout before AI Assistant request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout:
|
|
1
|
+
{"version":3,"names":["_default","exports","default","aiassistant","requestTimeout"],"sources":["config.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2025 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n aiassistant: {\n /**\n * Timeout before AI Assistant request fails, in milliseconds.\n * @type {Number}\n */\n requestTimeout: 60000,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,WAAW,EAAE;IACX;AACJ;AACA;AACA;IACIC,cAAc,EAAE;EAClB;AACF,CAAC","ignoreList":[]}
|