@webex/internal-plugin-llm 3.8.1-web-workers-keepalive.1 → 3.9.0-multiple-llm.1
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/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/llm.js +63 -24
- package/dist/llm.js.map +1 -1
- package/dist/llm.types.js.map +1 -1
- package/package.json +8 -8
- package/src/constants.ts +2 -0
- package/src/llm.ts +97 -33
- package/src/llm.types.ts +20 -5
- package/test/unit/spec/llm.js +2 -1
package/dist/constants.js
CHANGED
|
@@ -4,7 +4,8 @@ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/defi
|
|
|
4
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.LLM = void 0;
|
|
7
|
+
exports.LLM_DEFAULT_SESSION = exports.LLM = void 0;
|
|
8
8
|
// eslint-disable-next-line import/prefer-default-export
|
|
9
9
|
var LLM = exports.LLM = 'llm';
|
|
10
|
+
var LLM_DEFAULT_SESSION = exports.LLM_DEFAULT_SESSION = 'llm-default-session';
|
|
10
11
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LLM","exports"],"sources":["constants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const LLM = 'llm';\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG,KAAK"}
|
|
1
|
+
{"version":3,"names":["LLM","exports","LLM_DEFAULT_SESSION"],"sources":["constants.ts"],"sourcesContent":["// eslint-disable-next-line import/prefer-default-export\nexport const LLM = 'llm';\n\nexport const LLM_DEFAULT_SESSION = 'llm-default-session';\n"],"mappings":";;;;;;;AAAA;AACO,IAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG,KAAK;AAEjB,IAAME,mBAAmB,GAAAD,OAAA,CAAAC,mBAAA,GAAG,qBAAqB"}
|
package/dist/llm.js
CHANGED
|
@@ -7,6 +7,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
exports.default = exports.config = void 0;
|
|
10
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
10
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
11
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
12
13
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
@@ -65,22 +66,21 @@ var LLMChannel = exports.default = /*#__PURE__*/function (_ref) {
|
|
|
65
66
|
}
|
|
66
67
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
67
68
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.LLM);
|
|
69
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "defaultSessionId", _constants.LLM_DEFAULT_SESSION);
|
|
68
70
|
/**
|
|
69
|
-
*
|
|
70
|
-
* @
|
|
71
|
-
* @type {
|
|
72
|
-
* @public
|
|
71
|
+
* Map to store connection-specific data for multiple LLM connections
|
|
72
|
+
* @private
|
|
73
|
+
* @type {Map<string, {webSocketUrl?: string; binding?: string; locusUrl?: string; datachannelUrl?: string}>}
|
|
73
74
|
*/
|
|
74
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "
|
|
75
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "binding", void 0);
|
|
76
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "locusUrl", void 0);
|
|
77
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "datachannelUrl", void 0);
|
|
75
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "connections", new _map.default());
|
|
78
76
|
/**
|
|
79
77
|
* Register to the websocket
|
|
80
78
|
* @param {string} llmSocketUrl
|
|
79
|
+
* @param {string} sessionId - Connection identifier
|
|
81
80
|
* @returns {Promise<void>}
|
|
82
81
|
*/
|
|
83
82
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "register", function (llmSocketUrl) {
|
|
83
|
+
var sessionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.LLM_DEFAULT_SESSION;
|
|
84
84
|
return _this.request({
|
|
85
85
|
method: 'POST',
|
|
86
86
|
url: llmSocketUrl,
|
|
@@ -88,10 +88,13 @@ var LLMChannel = exports.default = /*#__PURE__*/function (_ref) {
|
|
|
88
88
|
deviceUrl: _this.webex.internal.device.url
|
|
89
89
|
}
|
|
90
90
|
}).then(function (res) {
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
// Get or create connection data
|
|
92
|
+
var sessionData = _this.connections.get(sessionId) || {};
|
|
93
|
+
sessionData.webSocketUrl = res.body.webSocketUrl;
|
|
94
|
+
sessionData.binding = res.body.binding;
|
|
95
|
+
_this.connections.set(sessionId, sessionData);
|
|
93
96
|
}).catch(function (error) {
|
|
94
|
-
_this.logger.error("Error connecting to websocket: ".concat(error));
|
|
97
|
+
_this.logger.error("Error connecting to websocket for ".concat(sessionId, ": ").concat(error));
|
|
95
98
|
throw error;
|
|
96
99
|
});
|
|
97
100
|
});
|
|
@@ -99,57 +102,93 @@ var LLMChannel = exports.default = /*#__PURE__*/function (_ref) {
|
|
|
99
102
|
* Register and connect to the websocket
|
|
100
103
|
* @param {string} locusUrl
|
|
101
104
|
* @param {string} datachannelUrl
|
|
105
|
+
* @param {string} sessionId - Connection identifier
|
|
102
106
|
* @returns {Promise<void>}
|
|
103
107
|
*/
|
|
104
108
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "registerAndConnect", function (locusUrl, datachannelUrl) {
|
|
105
|
-
|
|
109
|
+
var sessionId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _constants.LLM_DEFAULT_SESSION;
|
|
110
|
+
return _this.register(datachannelUrl, sessionId).then(function () {
|
|
106
111
|
if (!locusUrl || !datachannelUrl) return undefined;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
_this.
|
|
112
|
+
|
|
113
|
+
// Get or create connection data
|
|
114
|
+
var sessionData = _this.connections.get(sessionId) || {};
|
|
115
|
+
sessionData.locusUrl = locusUrl;
|
|
116
|
+
sessionData.datachannelUrl = datachannelUrl;
|
|
117
|
+
_this.connections.set(sessionId, sessionData);
|
|
118
|
+
return _this.connect(sessionData.webSocketUrl, sessionId);
|
|
110
119
|
});
|
|
111
120
|
});
|
|
112
121
|
/**
|
|
113
122
|
* Tells if LLM socket is connected
|
|
123
|
+
* @param {string} sessionId - Connection identifier
|
|
114
124
|
* @returns {boolean} connected
|
|
115
125
|
*/
|
|
116
126
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isConnected", function () {
|
|
117
|
-
|
|
127
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
128
|
+
var socket = _this.getSocket(sessionId);
|
|
129
|
+
return socket ? socket.connected : false;
|
|
118
130
|
});
|
|
119
131
|
/**
|
|
120
132
|
* Tells if LLM socket is binding
|
|
133
|
+
* @param {string} sessionId - Connection identifier
|
|
121
134
|
* @returns {string} binding
|
|
122
135
|
*/
|
|
123
136
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getBinding", function () {
|
|
124
|
-
|
|
137
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
138
|
+
var sessionData = _this.connections.get(sessionId);
|
|
139
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.binding;
|
|
125
140
|
});
|
|
126
141
|
/**
|
|
127
142
|
* Get Locus URL for the connection
|
|
143
|
+
* @param {string} sessionId - Connection identifier
|
|
128
144
|
* @returns {string} locus Url
|
|
129
145
|
*/
|
|
130
146
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getLocusUrl", function () {
|
|
131
|
-
|
|
147
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
148
|
+
var sessionData = _this.connections.get(sessionId);
|
|
149
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.locusUrl;
|
|
132
150
|
});
|
|
133
151
|
/**
|
|
134
152
|
* Get data channel URL for the connection
|
|
153
|
+
* @param {string} sessionId - Connection identifier
|
|
135
154
|
* @returns {string} data channel Url
|
|
136
155
|
*/
|
|
137
156
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getDatachannelUrl", function () {
|
|
138
|
-
|
|
157
|
+
var sessionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.LLM_DEFAULT_SESSION;
|
|
158
|
+
var sessionData = _this.connections.get(sessionId);
|
|
159
|
+
return sessionData === null || sessionData === void 0 ? void 0 : sessionData.datachannelUrl;
|
|
139
160
|
});
|
|
140
161
|
/**
|
|
141
162
|
* Disconnects websocket connection
|
|
142
163
|
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
164
|
+
* @param {string} sessionId - Connection identifier
|
|
143
165
|
* @returns {Promise<void>}
|
|
144
166
|
*/
|
|
145
167
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "disconnectLLM", function (options) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
_this.
|
|
150
|
-
|
|
168
|
+
var sessionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.LLM_DEFAULT_SESSION;
|
|
169
|
+
return _this.disconnect(options, sessionId).then(function () {
|
|
170
|
+
// Clean up sessions data
|
|
171
|
+
_this.connections.delete(sessionId);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* Disconnects all LLM websocket connections
|
|
176
|
+
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
177
|
+
* @returns {Promise<void>}
|
|
178
|
+
*/
|
|
179
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "disconnectAllLLM", function (options) {
|
|
180
|
+
return _this.disconnectAll(options).then(function () {
|
|
181
|
+
// Clean up all connection data
|
|
182
|
+
_this.connections.clear();
|
|
151
183
|
});
|
|
152
184
|
});
|
|
185
|
+
/**
|
|
186
|
+
* Get all active LLM connections
|
|
187
|
+
* @returns {Map} Map of sessionId to session data
|
|
188
|
+
*/
|
|
189
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getAllConnections", function () {
|
|
190
|
+
return new _map.default(_this.connections);
|
|
191
|
+
});
|
|
153
192
|
return _this;
|
|
154
193
|
}
|
|
155
194
|
return (0, _createClass2.default)(LLMChannel);
|
package/dist/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_internalPluginMercury","_interopRequireDefault","require","_constants","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","config","exports","llm","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","LLMChannel","_ref","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","LLM","llmSocketUrl","request","method","url","body","deviceUrl","webex","internal","device","then","res","webSocketUrl","binding","catch","error","logger","locusUrl","datachannelUrl","register","undefined","connect","connected","options","disconnect","_createClass2","Mercury"],"sources":["llm.ts"],"sourcesContent":["/* eslint-disable consistent-return */\n\nimport Mercury from '@webex/internal-plugin-mercury';\n\nimport {LLM} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {ILLMChannel} from './llm.types';\n\nexport const config = {\n llm: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n\n/**\n * LLMChannel to provide socket connections\n */\nexport default class LLMChannel extends (Mercury as any) implements ILLMChannel {\n namespace = LLM;\n\n /**\n * If the LLM plugin has been registered and listening\n * @instance\n * @type {Boolean}\n * @public\n */\n\n private webSocketUrl?: string;\n\n private binding?: string;\n\n private locusUrl?: string;\n\n private datachannelUrl?: string;\n\n /**\n * Register to the websocket\n * @param {string} llmSocketUrl\n * @returns {Promise<void>}\n */\n private register = (llmSocketUrl: string): Promise<void> =>\n this.request({\n method: 'POST',\n url: llmSocketUrl,\n body: {deviceUrl: this.webex.internal.device.url},\n })\n .then((res: {body: {webSocketUrl: string; binding: string}}) => {\n this.webSocketUrl = res.body.webSocketUrl;\n this.binding = res.body.binding;\n })\n .catch((error: any) => {\n this.logger.error(`Error connecting to websocket: ${error}`);\n throw error;\n });\n\n /**\n * Register and connect to the websocket\n * @param {string} locusUrl\n * @param {string} datachannelUrl\n * @returns {Promise<void>}\n */\n public registerAndConnect = (locusUrl: string, datachannelUrl: string): Promise<void> =>\n this.register(datachannelUrl).then(() => {\n if (!locusUrl || !datachannelUrl) return undefined;\n this.locusUrl = locusUrl;\n this.datachannelUrl = datachannelUrl;\n this.connect(this.webSocketUrl);\n });\n\n /**\n * Tells if LLM socket is connected\n * @returns {boolean} connected\n */\n public isConnected = (): boolean => this.connected;\n\n /**\n * Tells if LLM socket is binding\n * @returns {string} binding\n */\n public getBinding = (): string => this.binding;\n\n /**\n * Get Locus URL for the connection\n * @returns {string} locus Url\n */\n public getLocusUrl = (): string => this.locusUrl;\n\n /**\n * Get data channel URL for the connection\n * @returns {string} data channel Url\n */\n public getDatachannelUrl = (): string => this.datachannelUrl;\n\n /**\n * Disconnects websocket connection\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @returns {Promise<void>}\n */\n public disconnectLLM = (options: object): Promise<void> =>\n this.disconnect(options).then(() => {\n this.locusUrl = undefined;\n this.datachannelUrl = undefined;\n this.binding = undefined;\n this.webSocketUrl = undefined;\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_internalPluginMercury","_interopRequireDefault","require","_constants","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","config","exports","llm","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","LLMChannel","_ref","_inherits2","_super","_this","_classCallCheck2","_len","length","args","Array","_key","concat","_defineProperty2","_assertThisInitialized2","LLM","LLM_DEFAULT_SESSION","_map","llmSocketUrl","sessionId","undefined","request","method","url","body","deviceUrl","webex","internal","device","then","res","sessionData","connections","get","webSocketUrl","binding","set","catch","error","logger","locusUrl","datachannelUrl","register","connect","socket","getSocket","connected","options","disconnect","delete","disconnectAll","clear","_createClass2","Mercury"],"sources":["llm.ts"],"sourcesContent":["/* eslint-disable consistent-return */\n\nimport Mercury from '@webex/internal-plugin-mercury';\n\nimport {LLM, LLM_DEFAULT_SESSION} from './constants';\n// eslint-disable-next-line no-unused-vars\nimport {ILLMChannel} from './llm.types';\n\nexport const config = {\n llm: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n\n/**\n * LLMChannel to provide socket connections\n */\nexport default class LLMChannel extends (Mercury as any) implements ILLMChannel {\n namespace = LLM;\n defaultSessionId = LLM_DEFAULT_SESSION;\n /**\n * Map to store connection-specific data for multiple LLM connections\n * @private\n * @type {Map<string, {webSocketUrl?: string; binding?: string; locusUrl?: string; datachannelUrl?: string}>}\n */\n private connections: Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n }\n > = new Map();\n\n /**\n * Register to the websocket\n * @param {string} llmSocketUrl\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n private register = (\n llmSocketUrl: string,\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> =>\n this.request({\n method: 'POST',\n url: llmSocketUrl,\n body: {deviceUrl: this.webex.internal.device.url},\n })\n .then((res: {body: {webSocketUrl: string; binding: string}}) => {\n // Get or create connection data\n const sessionData = this.connections.get(sessionId) || {};\n sessionData.webSocketUrl = res.body.webSocketUrl;\n sessionData.binding = res.body.binding;\n this.connections.set(sessionId, sessionData);\n })\n .catch((error: any) => {\n this.logger.error(`Error connecting to websocket for ${sessionId}: ${error}`);\n throw error;\n });\n\n /**\n * Register and connect to the websocket\n * @param {string} locusUrl\n * @param {string} datachannelUrl\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n public registerAndConnect = (\n locusUrl: string,\n datachannelUrl: string,\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> =>\n this.register(datachannelUrl, sessionId).then(() => {\n if (!locusUrl || !datachannelUrl) return undefined;\n\n // Get or create connection data\n const sessionData = this.connections.get(sessionId) || {};\n sessionData.locusUrl = locusUrl;\n sessionData.datachannelUrl = datachannelUrl;\n this.connections.set(sessionId, sessionData);\n\n return this.connect(sessionData.webSocketUrl, sessionId);\n });\n\n /**\n * Tells if LLM socket is connected\n * @param {string} sessionId - Connection identifier\n * @returns {boolean} connected\n */\n public isConnected = (sessionId = LLM_DEFAULT_SESSION): boolean => {\n const socket = this.getSocket(sessionId);\n\n return socket ? socket.connected : false;\n };\n\n /**\n * Tells if LLM socket is binding\n * @param {string} sessionId - Connection identifier\n * @returns {string} binding\n */\n public getBinding = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.binding;\n };\n\n /**\n * Get Locus URL for the connection\n * @param {string} sessionId - Connection identifier\n * @returns {string} locus Url\n */\n public getLocusUrl = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.locusUrl;\n };\n\n /**\n * Get data channel URL for the connection\n * @param {string} sessionId - Connection identifier\n * @returns {string} data channel Url\n */\n public getDatachannelUrl = (sessionId = LLM_DEFAULT_SESSION): string => {\n const sessionData = this.connections.get(sessionId);\n\n return sessionData?.datachannelUrl;\n };\n\n /**\n * Disconnects websocket connection\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @param {string} sessionId - Connection identifier\n * @returns {Promise<void>}\n */\n public disconnectLLM = (\n options: {code: number; reason: string},\n sessionId: string = LLM_DEFAULT_SESSION\n ): Promise<void> =>\n this.disconnect(options, sessionId).then(() => {\n // Clean up sessions data\n this.connections.delete(sessionId);\n });\n\n /**\n * Disconnects all LLM websocket connections\n * @param {{code: number, reason: string}} options - The disconnect option object with code and reason\n * @returns {Promise<void>}\n */\n public disconnectAllLLM = (options?: {code: number; reason: string}): Promise<void> =>\n this.disconnectAll(options).then(() => {\n // Clean up all connection data\n this.connections.clear();\n });\n\n /**\n * Get all active LLM connections\n * @returns {Map} Map of sessionId to session data\n */\n public getAllConnections = (): Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n }\n > => new Map(this.connections);\n}\n"],"mappings":"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"}
|
package/dist/llm.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["llm.types.ts"],"sourcesContent":["interface ILLMChannel {\n registerAndConnect: (locusUrl: string
|
|
1
|
+
{"version":3,"names":[],"sources":["llm.types.ts"],"sourcesContent":["interface ILLMChannel {\n registerAndConnect: (\n locusUrl: string,\n datachannelUrl: string,\n sessionId?: string\n ) => Promise<void>;\n isConnected: (sessionId?: string) => boolean;\n getBinding: (sessionId?: string) => string;\n getLocusUrl: (sessionId?: string) => string;\n getDatachannelUrl: (sessionId?: string) => string;\n disconnectLLM: (options: {code: number; reason: string}, sessionId?: string) => Promise<void>;\n disconnectAllLLM: (options?: {code: number; reason: string}) => Promise<void>;\n getAllConnections: () => Map<\n string,\n {\n webSocketUrl?: string;\n binding?: string;\n locusUrl?: string;\n datachannelUrl?: string;\n }\n >;\n}\n// eslint-disable-next-line import/prefer-default-export\nexport type {ILLMChannel};\n"],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-llm",
|
|
3
3
|
"description": "",
|
|
4
|
-
"license": "Cisco
|
|
4
|
+
"license": "Cisco's General Terms (https://www.cisco.com/site/us/en/about/legal/contract-experience/index.html)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"devMain": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"directory": "packages/@webex/internal-plugin-llm"
|
|
11
11
|
},
|
|
12
12
|
"engines": {
|
|
13
|
-
"node": ">=
|
|
13
|
+
"node": ">=18"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@webex/internal-plugin-mercury": "3.
|
|
16
|
+
"@webex/internal-plugin-mercury": "3.9.0-multiple-llm.1"
|
|
17
17
|
},
|
|
18
18
|
"browserify": {
|
|
19
19
|
"transform": [
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
28
28
|
"@webex/jest-config-legacy": "0.0.0",
|
|
29
29
|
"@webex/legacy-tools": "0.0.0",
|
|
30
|
-
"@webex/test-helper-chai": "3.
|
|
31
|
-
"@webex/test-helper-mocha": "3.
|
|
32
|
-
"@webex/test-helper-mock-webex": "3.
|
|
33
|
-
"@webex/test-helper-test-users": "3.
|
|
30
|
+
"@webex/test-helper-chai": "3.9.0-multiple-llm.0",
|
|
31
|
+
"@webex/test-helper-mocha": "3.9.0-multiple-llm.0",
|
|
32
|
+
"@webex/test-helper-mock-webex": "3.9.0-multiple-llm.0",
|
|
33
|
+
"@webex/test-helper-test-users": "3.9.0-multiple-llm.0",
|
|
34
34
|
"eslint": "^8.24.0",
|
|
35
35
|
"prettier": "^2.7.1",
|
|
36
36
|
"sinon": "^9.2.4"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"test:style": "eslint ./src/**/*.*",
|
|
45
45
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
46
46
|
},
|
|
47
|
-
"version": "3.
|
|
47
|
+
"version": "3.9.0-multiple-llm.1"
|
|
48
48
|
}
|
package/src/constants.ts
CHANGED
package/src/llm.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import Mercury from '@webex/internal-plugin-mercury';
|
|
4
4
|
|
|
5
|
-
import {LLM} from './constants';
|
|
5
|
+
import {LLM, LLM_DEFAULT_SESSION} from './constants';
|
|
6
6
|
// eslint-disable-next-line no-unused-vars
|
|
7
7
|
import {ILLMChannel} from './llm.types';
|
|
8
8
|
|
|
@@ -42,39 +42,46 @@ export const config = {
|
|
|
42
42
|
*/
|
|
43
43
|
export default class LLMChannel extends (Mercury as any) implements ILLMChannel {
|
|
44
44
|
namespace = LLM;
|
|
45
|
-
|
|
45
|
+
defaultSessionId = LLM_DEFAULT_SESSION;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
48
|
-
* @
|
|
49
|
-
* @type {
|
|
50
|
-
* @public
|
|
47
|
+
* Map to store connection-specific data for multiple LLM connections
|
|
48
|
+
* @private
|
|
49
|
+
* @type {Map<string, {webSocketUrl?: string; binding?: string; locusUrl?: string; datachannelUrl?: string}>}
|
|
51
50
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
private connections: Map<
|
|
52
|
+
string,
|
|
53
|
+
{
|
|
54
|
+
webSocketUrl?: string;
|
|
55
|
+
binding?: string;
|
|
56
|
+
locusUrl?: string;
|
|
57
|
+
datachannelUrl?: string;
|
|
58
|
+
}
|
|
59
|
+
> = new Map();
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* Register to the websocket
|
|
63
63
|
* @param {string} llmSocketUrl
|
|
64
|
+
* @param {string} sessionId - Connection identifier
|
|
64
65
|
* @returns {Promise<void>}
|
|
65
66
|
*/
|
|
66
|
-
private register = (
|
|
67
|
+
private register = (
|
|
68
|
+
llmSocketUrl: string,
|
|
69
|
+
sessionId: string = LLM_DEFAULT_SESSION
|
|
70
|
+
): Promise<void> =>
|
|
67
71
|
this.request({
|
|
68
72
|
method: 'POST',
|
|
69
73
|
url: llmSocketUrl,
|
|
70
74
|
body: {deviceUrl: this.webex.internal.device.url},
|
|
71
75
|
})
|
|
72
76
|
.then((res: {body: {webSocketUrl: string; binding: string}}) => {
|
|
73
|
-
|
|
74
|
-
|
|
77
|
+
// Get or create connection data
|
|
78
|
+
const sessionData = this.connections.get(sessionId) || {};
|
|
79
|
+
sessionData.webSocketUrl = res.body.webSocketUrl;
|
|
80
|
+
sessionData.binding = res.body.binding;
|
|
81
|
+
this.connections.set(sessionId, sessionData);
|
|
75
82
|
})
|
|
76
83
|
.catch((error: any) => {
|
|
77
|
-
this.logger.error(`Error connecting to websocket: ${error}`);
|
|
84
|
+
this.logger.error(`Error connecting to websocket for ${sessionId}: ${error}`);
|
|
78
85
|
throw error;
|
|
79
86
|
});
|
|
80
87
|
|
|
@@ -82,50 +89,107 @@ export default class LLMChannel extends (Mercury as any) implements ILLMChannel
|
|
|
82
89
|
* Register and connect to the websocket
|
|
83
90
|
* @param {string} locusUrl
|
|
84
91
|
* @param {string} datachannelUrl
|
|
92
|
+
* @param {string} sessionId - Connection identifier
|
|
85
93
|
* @returns {Promise<void>}
|
|
86
94
|
*/
|
|
87
|
-
public registerAndConnect = (
|
|
88
|
-
|
|
95
|
+
public registerAndConnect = (
|
|
96
|
+
locusUrl: string,
|
|
97
|
+
datachannelUrl: string,
|
|
98
|
+
sessionId: string = LLM_DEFAULT_SESSION
|
|
99
|
+
): Promise<void> =>
|
|
100
|
+
this.register(datachannelUrl, sessionId).then(() => {
|
|
89
101
|
if (!locusUrl || !datachannelUrl) return undefined;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
this.
|
|
102
|
+
|
|
103
|
+
// Get or create connection data
|
|
104
|
+
const sessionData = this.connections.get(sessionId) || {};
|
|
105
|
+
sessionData.locusUrl = locusUrl;
|
|
106
|
+
sessionData.datachannelUrl = datachannelUrl;
|
|
107
|
+
this.connections.set(sessionId, sessionData);
|
|
108
|
+
|
|
109
|
+
return this.connect(sessionData.webSocketUrl, sessionId);
|
|
93
110
|
});
|
|
94
111
|
|
|
95
112
|
/**
|
|
96
113
|
* Tells if LLM socket is connected
|
|
114
|
+
* @param {string} sessionId - Connection identifier
|
|
97
115
|
* @returns {boolean} connected
|
|
98
116
|
*/
|
|
99
|
-
public isConnected = (): boolean =>
|
|
117
|
+
public isConnected = (sessionId = LLM_DEFAULT_SESSION): boolean => {
|
|
118
|
+
const socket = this.getSocket(sessionId);
|
|
119
|
+
|
|
120
|
+
return socket ? socket.connected : false;
|
|
121
|
+
};
|
|
100
122
|
|
|
101
123
|
/**
|
|
102
124
|
* Tells if LLM socket is binding
|
|
125
|
+
* @param {string} sessionId - Connection identifier
|
|
103
126
|
* @returns {string} binding
|
|
104
127
|
*/
|
|
105
|
-
public getBinding = (): string =>
|
|
128
|
+
public getBinding = (sessionId = LLM_DEFAULT_SESSION): string => {
|
|
129
|
+
const sessionData = this.connections.get(sessionId);
|
|
130
|
+
|
|
131
|
+
return sessionData?.binding;
|
|
132
|
+
};
|
|
106
133
|
|
|
107
134
|
/**
|
|
108
135
|
* Get Locus URL for the connection
|
|
136
|
+
* @param {string} sessionId - Connection identifier
|
|
109
137
|
* @returns {string} locus Url
|
|
110
138
|
*/
|
|
111
|
-
public getLocusUrl = (): string =>
|
|
139
|
+
public getLocusUrl = (sessionId = LLM_DEFAULT_SESSION): string => {
|
|
140
|
+
const sessionData = this.connections.get(sessionId);
|
|
141
|
+
|
|
142
|
+
return sessionData?.locusUrl;
|
|
143
|
+
};
|
|
112
144
|
|
|
113
145
|
/**
|
|
114
146
|
* Get data channel URL for the connection
|
|
147
|
+
* @param {string} sessionId - Connection identifier
|
|
115
148
|
* @returns {string} data channel Url
|
|
116
149
|
*/
|
|
117
|
-
public getDatachannelUrl = (): string =>
|
|
150
|
+
public getDatachannelUrl = (sessionId = LLM_DEFAULT_SESSION): string => {
|
|
151
|
+
const sessionData = this.connections.get(sessionId);
|
|
152
|
+
|
|
153
|
+
return sessionData?.datachannelUrl;
|
|
154
|
+
};
|
|
118
155
|
|
|
119
156
|
/**
|
|
120
157
|
* Disconnects websocket connection
|
|
121
158
|
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
159
|
+
* @param {string} sessionId - Connection identifier
|
|
160
|
+
* @returns {Promise<void>}
|
|
161
|
+
*/
|
|
162
|
+
public disconnectLLM = (
|
|
163
|
+
options: {code: number; reason: string},
|
|
164
|
+
sessionId: string = LLM_DEFAULT_SESSION
|
|
165
|
+
): Promise<void> =>
|
|
166
|
+
this.disconnect(options, sessionId).then(() => {
|
|
167
|
+
// Clean up sessions data
|
|
168
|
+
this.connections.delete(sessionId);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Disconnects all LLM websocket connections
|
|
173
|
+
* @param {{code: number, reason: string}} options - The disconnect option object with code and reason
|
|
122
174
|
* @returns {Promise<void>}
|
|
123
175
|
*/
|
|
124
|
-
public
|
|
125
|
-
this.
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
this.binding = undefined;
|
|
129
|
-
this.webSocketUrl = undefined;
|
|
176
|
+
public disconnectAllLLM = (options?: {code: number; reason: string}): Promise<void> =>
|
|
177
|
+
this.disconnectAll(options).then(() => {
|
|
178
|
+
// Clean up all connection data
|
|
179
|
+
this.connections.clear();
|
|
130
180
|
});
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Get all active LLM connections
|
|
184
|
+
* @returns {Map} Map of sessionId to session data
|
|
185
|
+
*/
|
|
186
|
+
public getAllConnections = (): Map<
|
|
187
|
+
string,
|
|
188
|
+
{
|
|
189
|
+
webSocketUrl?: string;
|
|
190
|
+
binding?: string;
|
|
191
|
+
locusUrl?: string;
|
|
192
|
+
datachannelUrl?: string;
|
|
193
|
+
}
|
|
194
|
+
> => new Map(this.connections);
|
|
131
195
|
}
|
package/src/llm.types.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
interface ILLMChannel {
|
|
2
|
-
registerAndConnect: (
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
registerAndConnect: (
|
|
3
|
+
locusUrl: string,
|
|
4
|
+
datachannelUrl: string,
|
|
5
|
+
sessionId?: string
|
|
6
|
+
) => Promise<void>;
|
|
7
|
+
isConnected: (sessionId?: string) => boolean;
|
|
8
|
+
getBinding: (sessionId?: string) => string;
|
|
9
|
+
getLocusUrl: (sessionId?: string) => string;
|
|
10
|
+
getDatachannelUrl: (sessionId?: string) => string;
|
|
11
|
+
disconnectLLM: (options: {code: number; reason: string}, sessionId?: string) => Promise<void>;
|
|
12
|
+
disconnectAllLLM: (options?: {code: number; reason: string}) => Promise<void>;
|
|
13
|
+
getAllConnections: () => Map<
|
|
14
|
+
string,
|
|
15
|
+
{
|
|
16
|
+
webSocketUrl?: string;
|
|
17
|
+
binding?: string;
|
|
18
|
+
locusUrl?: string;
|
|
19
|
+
datachannelUrl?: string;
|
|
20
|
+
}
|
|
21
|
+
>;
|
|
7
22
|
}
|
|
8
23
|
// eslint-disable-next-line import/prefer-default-export
|
|
9
24
|
export type {ILLMChannel};
|
package/test/unit/spec/llm.js
CHANGED
|
@@ -21,7 +21,8 @@ describe('plugin-llm', () => {
|
|
|
21
21
|
|
|
22
22
|
llmService = webex.internal.llm;
|
|
23
23
|
llmService.connect = sinon.stub().callsFake(() => {
|
|
24
|
-
|
|
24
|
+
// Simulate a successful connection by stubbing getSocket to return connected: true
|
|
25
|
+
llmService.getSocket = sinon.stub().returns({connected: true});
|
|
25
26
|
});
|
|
26
27
|
llmService.disconnect = sinon.stub().resolves(true);
|
|
27
28
|
llmService.request = sinon.stub().resolves({
|