Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
ee97715
feat(webinar): refactor mercury to support multiple connections
mickelr Aug 11, 2025
08cec92
feat(webinar): refactor llm to support multiple connections
mickelr Aug 12, 2025
76b03e0
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Aug 13, 2025
747972e
feat(webinar): refactor llm to support multiple connections
mickelr Aug 15, 2025
769788a
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Aug 15, 2025
bf5d1cf
feat(webinar): refactor llm to support multiple connections
mickelr Aug 19, 2025
fc1e29d
feat(webinar): refactor llm to support multiple connections
mickelr Aug 19, 2025
4e78451
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 20, 2025
6314d63
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 20, 2025
333f9cc
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 21, 2025
ab6ed81
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 21, 2025
5c7965c
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 21, 2025
e637351
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 21, 2025
de644e1
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Aug 22, 2025
c2c2bdd
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Aug 25, 2025
417e82d
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 25, 2025
3e78f3f
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 25, 2025
6a38330
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 26, 2025
78d117c
feat(webinar): refactor meeting/index to support multiple connections
mickelr Aug 26, 2025
258cbb8
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 2, 2025
cc31bf6
feat(webinar): refactor meeting/index to support multiple connections
mickelr Sep 3, 2025
024907d
feat(webinar): add set default socket func
mickelr Sep 3, 2025
ec9df82
feat(webinar): refactor webinar/index to support multiple connections
mickelr Sep 9, 2025
5aad590
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 9, 2025
78af02d
feat(webinar): refactor webinar/index to support multiple connections
mickelr Sep 9, 2025
22328c4
feat(webinar): refactor webinar/index to support multiple connections
mickelr Sep 10, 2025
92c15a1
feat(webinar): refactor webinar/index to support multiple connections
mickelr Sep 10, 2025
3c96269
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 10, 2025
751f4cf
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 11, 2025
6406e7c
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 11, 2025
af94e46
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnections
mickelr Sep 16, 2025
17e7e26
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 16, 2025
7e3ac9f
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 16, 2025
595af00
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 16, 2025
509ceeb
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 18, 2025
327121b
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 18, 2025
d31a80d
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 19, 2025
d697f0d
feat(webinar): refactor mercury/llm to support multiple connections
mickelr Sep 19, 2025
81a9c5e
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 22, 2025
d78f99a
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnections
mickelr Sep 22, 2025
6ca77ca
feat(webinar): modify unit test
mickelr Sep 23, 2025
4fe708b
feat(multipleLLM): modify unit test
mickelr Sep 25, 2025
318f185
feat(multipleLLM): modify unit test
mickelr Sep 25, 2025
7c87b1a
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Sep 26, 2025
2ada9a5
feat(multipleLLM): modify unit test
mickelr Sep 29, 2025
5d4965d
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Oct 9, 2025
3ae1629
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnections
mickelr Oct 9, 2025
694a6e0
feat(multipleLLM): make unit test work for mercury and llm
mickelr Oct 9, 2025
08a72ce
feat(multipleLLM): for deploy feature branch
mickelr Oct 9, 2025
7f5e301
Merge branch 'next' into feat/mulitLLMConnections
mickelr Oct 13, 2025
58598b0
feat(multipleLLM): update log
mickelr Oct 14, 2025
ea420cf
Merge remote-tracking branch 'webex/next' into feat/mulitLLMConnections
mickelr Oct 15, 2025
91197c8
Merge remote-tracking branch 'origin/feat/mulitLLMConnections' into f…
mickelr Oct 15, 2025
69548b5
feat(multipleLLM): force publish
mickelr Oct 15, 2025
f70e3ef
feat(multipleLLM): force publish
mickelr Oct 15, 2025
51ec0b8
feat(multipleLLM): force publish (#4539)
mickelr Oct 15, 2025
62cece6
feat(legacy-tools): publish all packages (#4543)
Shreyas281299 Oct 17, 2025
556ceee
Merge remote-tracking branch 'upstream/next' into multi-llms
mickelr Oct 20, 2025
46d11cb
feat(multipleLLM): merge multiple LLM channel logic
mickelr Oct 20, 2025
1dd547e
Merge remote-tracking branch 'upstream/multi-llms' into multi-llms
mickelr Oct 20, 2025
439177c
Merge remote-tracking branch 'upstream/next' into feat/mulitLLMConnec…
mickelr Oct 27, 2025
65a98ac
feat(multiLLM): modify shutdown logic
mickelr Nov 12, 2025
09e4e58
feat(multiLLM): modify shutdown logic
mickelr Nov 12, 2025
b096015
feat(multiLLM): modify shutdown logic
mickelr Nov 13, 2025
955ebd9
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Nov 13, 2025
b32c452
feat(multiLLM): modify shutdown logic
mickelr Nov 17, 2025
b15d82b
feat(multiLLM): rewrite _emit function
mickelr Nov 17, 2025
db4d5c3
Merge branch 'multi-llms' into feat/mulitLLMConnectionsWithShutdown
mickelr Nov 17, 2025
69eac5e
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Nov 17, 2025
0428339
feat(multiLLM): rewrite _emit function
mickelr Nov 17, 2025
3ecda4a
feat(multiLLM): fix disconnect issue
mickelr Nov 18, 2025
abeeabd
feat(multiLLM): make this.socket as default session one
mickelr Nov 20, 2025
c5c5fde
Merge remote-tracking branch 'origin/feat/mulitLLMConnectionsWithShut…
mickelr Nov 20, 2025
6874c46
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Nov 20, 2025
5ac7f35
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Jan 8, 2026
4337c45
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Jan 15, 2026
a3fd304
feat(multiLLMConnectons): modify ut
mickelr Jan 15, 2026
f169dd4
feat(multiLLMConnectons): modify ut
mickelr Jan 16, 2026
ec3429e
feat(multiLLMConnectons): modify ut
mickelr Jan 16, 2026
f4d4f70
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Jan 20, 2026
c6ac54b
feat(jwt4LLM): remove tag name
mickelr Jan 20, 2026
ee7fca2
feat(jwt4LLM): remove tag name
mickelr Jan 20, 2026
5fe7400
feat(jwt4LLM): remove tag name
mickelr Jan 20, 2026
e88e850
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Feb 12, 2026
0331796
feat(multiLLM): fix ut error
mickelr Feb 12, 2026
1762657
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Feb 24, 2026
25d93e3
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Feb 25, 2026
d8cfbd3
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Mar 1, 2026
a1fae0e
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Mar 1, 2026
e4ccd4b
feat(multi-llm): the session maybe already removed from this.sockets
mickelr Mar 1, 2026
9fec23d
Merge remote-tracking branch 'origin/feat/mulitLLMConnectionsWithShut…
mickelr Mar 1, 2026
a7ed95b
feat(multi-llm): reset failed session state before rejecting connect
mickelr Mar 2, 2026
61ef67a
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Mar 2, 2026
6572587
feat(multi-llm): merge jwt logic
mickelr Mar 2, 2026
5fd46ba
feat(multi-llm): modify ut
mickelr Mar 2, 2026
805ed54
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Mar 3, 2026
891143a
feat(multi-llm): modify ut
mickelr Mar 3, 2026
c7970c0
Merge remote-tracking branch 'origin/feat/mulitLLMConnectionsWithShut…
mickelr Mar 3, 2026
a6e2353
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 3, 2026
49b0d3f
Merge branch 'feat/mulitLLMConnectionsWithShutdown' into feat/mulitpl…
mickelr Mar 3, 2026
a4c4bc8
feat(multi-llm): modify ut
mickelr Mar 4, 2026
9941a82
feat(multi-llm): modify ut
mickelr Mar 4, 2026
0045311
feat(multi-llm): roll back
mickelr Mar 4, 2026
6fa8de2
Merge branch 'feat/mulitLLMConnectionsWithShutdown' into feat/mulitpl…
mickelr Mar 4, 2026
347a269
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Mar 4, 2026
8ef1235
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 5, 2026
646b3d4
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Mar 5, 2026
be29181
Merge remote-tracking branch 'origin/feat/mulitLLMConnectionsWithShut…
mickelr Mar 5, 2026
18edfb9
Merge branch 'feat/mulitLLMConnectionsWithShutdown' into feat/mulitpl…
mickelr Mar 5, 2026
daa5b42
feat(webinar 5k): connect both main and ps session data channels
mickelr Mar 5, 2026
f40e52e
feat(webinar 5k): connect both main and ps session data channels
mickelr Mar 5, 2026
2e21a0f
feat(multiple data channel): modify ut
mickelr Mar 5, 2026
d3987e9
feat(multiple data channel): modify ut
mickelr Mar 6, 2026
7c32a0f
feat(multiple data channel): modify ut
mickelr Mar 6, 2026
0d35e5d
feat(multiple data channel): modify ut
mickelr Mar 6, 2026
3c69e6b
feat(multiple data channel): modify ut
mickelr Mar 6, 2026
02770db
feat(multiple data channel): update doc
mickelr Mar 8, 2026
237860a
feat(multiple data channel): update doc
mickelr Mar 8, 2026
eef7a6d
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Mar 8, 2026
5562135
Merge branch 'feat/mulitLLMConnectionsWithShutdown' into feat/mulitpl…
mickelr Mar 9, 2026
5b6aa19
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 9, 2026
a25f531
Merge branch 'next' into feat/mulitLLMConnectionsWithShutdown
mickelr Mar 10, 2026
f6d4baf
feat(multiple data channel): increase max listeners
mickelr Mar 10, 2026
d44237c
feat(multiple data channel): increase max listeners
mickelr Mar 10, 2026
f81de23
Merge remote-tracking branch 'origin/feat/mulitLLMConnectionsWithShut…
mickelr Mar 10, 2026
8df0f72
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 11, 2026
5407b9f
feat(multiple data channel): add new constants file
mickelr Mar 12, 2026
05b7f22
Merge remote-tracking branch 'origin/next' into feat/mulitLLMConnecti…
mickelr Mar 12, 2026
5da4716
feat(multiple data channel): update doc
mickelr Mar 12, 2026
504e05c
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 12, 2026
b107448
Merge branch 'feat/mulitLLMConnectionsWithShutdown' into feat/mulitpl…
mickelr Mar 12, 2026
2f1fdf3
Merge remote-tracking branch 'origin/next' into feat/mulitpleDataChannel
mickelr Mar 13, 2026
6585bea
feat(webinar 5k): keep both data channels
mickelr Mar 13, 2026
7de2a43
feat(webinar 5k): use constant for vociea
mickelr Mar 13, 2026
f0c476d
Merge branch 'feat/keep_both_datachannels_4_mai&ps' into feat/mulitpl…
mickelr Mar 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/@webex/internal-plugin-voicea/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const TRANSCRIPTION_TYPE = {

export const VOICEA = 'voicea';
export const DEFAULT_SPOKEN_LANGUAGE = 'en';
export const LLM_PRACTICE_SESSION = 'llm-practice-session';

export const ANNOUNCE_STATUS = {
IDLE: 'idle',
Expand Down
43 changes: 35 additions & 8 deletions packages/@webex/internal-plugin-voicea/src/voicea.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
AIBRIDGE_RELAY_TYPES,
TRANSCRIPTION_TYPE,
VOICEA,
LLM_PRACTICE_SESSION,
ANNOUNCE_STATUS,
TURN_ON_CAPTION_STATUS,
TOGGLE_MANUAL_CAPTION_STATUS,
Expand Down Expand Up @@ -89,6 +90,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
if (!this.hasSubscribedToEvents) {
// @ts-ignore
this.webex.internal.llm.on('event:relay.event', this.eventProcessor);
// @ts-ignore
this.webex.internal.llm.on(`event:relay.event:${LLM_PRACTICE_SESSION}`, this.eventProcessor);
this.hasSubscribedToEvents = true;
}
}
Expand All @@ -102,6 +105,8 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
this.captionServiceId = undefined;
// @ts-ignore
this.webex.internal.llm.off('event:relay.event', this.eventProcessor);
// @ts-ignore
this.webex.internal.llm.off(`event:relay.event:${LLM_PRACTICE_SESSION}`, this.eventProcessor);
this.hasSubscribedToEvents = false;
this.announceStatus = ANNOUNCE_STATUS.IDLE;
this.captionStatus = TURN_ON_CAPTION_STATUS.IDLE;
Expand Down Expand Up @@ -264,13 +269,20 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
private sendAnnouncement = (): void => {
this.announceStatus = ANNOUNCE_STATUS.JOINING;
this.listenToEvents();
// @ts-ignore
this.webex.internal.llm.socket.send({
const socket =
// @ts-ignore
this.webex.internal.llm.getSocket(LLM_PRACTICE_SESSION) || this.webex.internal.llm.socket;
const binding =
// @ts-ignore
this.webex.internal.llm.getBinding(LLM_PRACTICE_SESSION) ||
// @ts-ignore
this.webex.internal.llm.getBinding();
socket.send({
id: `${this.seqNum}`,
type: 'publishRequest',
recipients: {
// @ts-ignore
route: this.webex.internal.llm.getBinding(),
route: binding,
},
// If captionServiceId exists, send it as the 'to' header; otherwise keep headers empty.
headers: this.captionServiceId ? {to: this.captionServiceId} : {},
Expand Down Expand Up @@ -320,13 +332,20 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
public requestLanguage = (languageCode: string): void => {
// @ts-ignore
if (!this.webex.internal.llm.isConnected()) return;
// @ts-ignore
this.webex.internal.llm.socket.send({
const socket =
// @ts-ignore
this.webex.internal.llm.getSocket(LLM_PRACTICE_SESSION) || this.webex.internal.llm.socket;
const binding =
// @ts-ignore
this.webex.internal.llm.getBinding(LLM_PRACTICE_SESSION) ||
// @ts-ignore
this.webex.internal.llm.getBinding();
socket.send({
id: `${this.seqNum}`,
type: 'publishRequest',
recipients: {
// @ts-ignore
route: this.webex.internal.llm.getBinding(),
route: binding,
},
headers: {
to: this.captionServiceId,
Expand Down Expand Up @@ -363,8 +382,16 @@ export class VoiceaChannel extends WebexPlugin implements IVoiceaChannel {
// @ts-ignore
if (!this.webex.internal.llm.isConnected()) return;

// @ts-ignore
this.webex.internal.llm.socket.send({
const socket =
// @ts-ignore
this.webex.internal.llm.getSocket(LLM_PRACTICE_SESSION) || this.webex.internal.llm.socket;
const binding =
// @ts-ignore
this.webex.internal.llm.getBinding(LLM_PRACTICE_SESSION) ||
// @ts-ignore
this.webex.internal.llm.getBinding();

socket?.send({
id: `${this.seqNum}`,
type: 'publishRequest',
recipients: {
Expand Down
75 changes: 73 additions & 2 deletions packages/@webex/internal-plugin-voicea/test/unit/spec/voicea.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ import Mercury from '@webex/internal-plugin-mercury';
import LLMChannel from '@webex/internal-plugin-llm';

import VoiceaService from '../../../src/index';
import {EVENT_TRIGGERS, TOGGLE_MANUAL_CAPTION_STATUS} from '../../../src/constants';
import {
EVENT_TRIGGERS,
LLM_PRACTICE_SESSION,
TOGGLE_MANUAL_CAPTION_STATUS,
} from '../../../src/constants';

describe('plugin-voicea', () => {
const locusUrl = 'locusUrl';
Expand All @@ -28,6 +32,7 @@ describe('plugin-voicea', () => {
voiceaService.connect = sinon.stub().resolves(true);
voiceaService.webex.internal.llm.isConnected = sinon.stub().returns(true);
voiceaService.webex.internal.llm.getBinding = sinon.stub().returns(undefined);
voiceaService.webex.internal.llm.getSocket = sinon.stub().returns(undefined);
voiceaService.webex.internal.llm.getLocusUrl = sinon.stub().returns(locusUrl);

voiceaService.request = sinon.stub().resolves({
Expand Down Expand Up @@ -87,7 +92,9 @@ describe('plugin-voicea', () => {

voiceaService.sendAnnouncement();

assert.calledOnceWithExactly(spy, 'event:relay.event', sinon.match.func);
assert.calledTwice(spy);
assert.calledWith(spy, 'event:relay.event', sinon.match.func);
assert.calledWith(spy, `event:relay.event:${LLM_PRACTICE_SESSION}`, sinon.match.func);
});

it('includes captionServiceId in headers when set', () => {
Expand Down Expand Up @@ -1205,5 +1212,69 @@ describe('plugin-voicea', () => {
});
});

describe('#multiple llm connections', () => {
let defaultSocket;
let practiceSocket;

beforeEach(() => {
defaultSocket = new MockWebSocket();
practiceSocket = new MockWebSocket();

voiceaService.webex.internal.llm.socket = defaultSocket;
voiceaService.webex.internal.llm.getSocket.callsFake((channel) =>
channel === LLM_PRACTICE_SESSION ? practiceSocket : undefined
);
voiceaService.webex.internal.llm.getBinding.callsFake((channel) =>
channel === LLM_PRACTICE_SESSION ? 'practice-binding' : 'default-binding'
);
voiceaService.seqNum = 1;
});

it('sendAnnouncement uses the practice session socket and binding when available', () => {
voiceaService.announceStatus = 'idle';

voiceaService.sendAnnouncement();

assert.calledOnce(practiceSocket.send);
assert.notCalled(defaultSocket.send);

const sent = practiceSocket.send.getCall(0).args[0];
expect(sent).to.have.nested.property('recipients.route', 'practice-binding');
});

it('requestLanguage uses the practice session socket and binding when available', () => {
voiceaService.requestLanguage('fr');

assert.calledOnce(practiceSocket.send);
assert.notCalled(defaultSocket.send);

const sent = practiceSocket.send.getCall(0).args[0];
expect(sent).to.have.nested.property('recipients.route', 'practice-binding');
expect(sent).to.have.nested.property('data.clientPayload.translationLanguage', 'fr');
});

it('processes relay events from the practice session channel', async () => {
const announcementSpy = sinon.spy(voiceaService, 'processAnnouncementMessage');

voiceaService.listenToEvents();

// eslint-disable-next-line no-underscore-dangle
await voiceaService.webex.internal.llm._emit(`event:relay.event:${LLM_PRACTICE_SESSION}`, {
headers: {from: 'svc-practice'},
data: {
relayType: 'voicea.annc',
voiceaPayload: {
translation: {allowed_languages: ['en'], max_languages: 1},
ASR: {spoken_languages: ['en']},
},
},
sequenceNumber: 10,
});

assert.calledOnce(announcementSpy);
assert.equal(voiceaService.captionServiceId, 'svc-practice');
});
});

});
});
26 changes: 22 additions & 4 deletions packages/@webex/plugin-meetings/src/annotation/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
} from './constants';

import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
import {HTTP_VERBS, LOCUSEVENT} from '../constants';
import {HTTP_VERBS, LOCUSEVENT, LLM_PRACTICE_SESSION} from '../constants';

/**
* @description Annotation to handle LLM and Mercury message and locus API
Expand Down Expand Up @@ -116,6 +116,12 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
);
// @ts-ignore
this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
// @ts-ignore
this.webex.internal.llm.on(
`event:relay.event:${LLM_PRACTICE_SESSION}`,
this.eventDataProcessor,
this
);
this.hasSubscribedToEvents = true;
}
}
Expand All @@ -134,7 +140,11 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {

// @ts-ignore
this.webex.internal.llm.off('event:relay.event', this.eventDataProcessor);

// @ts-ignore
this.webex.internal.llm.off(
`event:relay.event:${LLM_PRACTICE_SESSION}`,
this.eventDataProcessor
);
this.hasSubscribedToEvents = false;
}
}
Expand Down Expand Up @@ -306,12 +316,20 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
* @returns {void}
*/
private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
const socket =
// @ts-ignore
this.webex.internal.llm.getSocket(LLM_PRACTICE_SESSION) || this.webex.internal.llm.socket;
const binding =
// @ts-ignore
this.webex.internal.llm.getBinding(LLM_PRACTICE_SESSION) ||
// @ts-ignore
this.webex.internal.llm.getBinding();
const data = {
id: `${this.seqNum}`,
type: 'publishRequest',
recipients: {
// @ts-ignore
route: this.webex.internal.llm.getBinding(),
route: binding,
},
headers: {
to: strokeData.toUserId,
Expand Down Expand Up @@ -339,7 +357,7 @@ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
};

// @ts-ignore
this.webex.internal.llm.socket.send(data);
socket.send(data);
this.seqNum += 1;
}
}
Expand Down
1 change: 1 addition & 0 deletions packages/@webex/plugin-meetings/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const LOCAL = 'local';
export const LOCI = 'loci';
export const LOCUS_URL = 'locusUrl';
export const END = 'end';
export const LLM_PRACTICE_SESSION = 'llm-practice-session';

export const MAX_RANDOM_DELAY_FOR_MEETING_INFO = 3 * 60 * 1000;
export const MEETINGINFO = 'meetingInfo';
Expand Down
21 changes: 7 additions & 14 deletions packages/@webex/plugin-meetings/src/meeting/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6228,31 +6228,24 @@ export default class Meeting extends StatelessWebexPlugin {
// @ts-ignore - Fix type
const {
url = undefined,
info: {datachannelUrl = undefined, practiceSessionDatachannelUrl = undefined} = {},
self: {datachannelToken = undefined, practiceSessionDatachannelToken = undefined} = {},
info: {datachannelUrl = undefined} = {},
self: {datachannelToken = undefined} = {},
} = this.locusInfo || {};

const isJoined = this.isJoined();

const dataChannelTokenType = this.getDataChannelTokenType();
const isPracticeSession = dataChannelTokenType === DataChannelTokenType.PracticeSession;
// @ts-ignore
const currentToken = this.webex.internal.llm.getDatachannelToken(dataChannelTokenType);

const locusToken = isPracticeSession ? practiceSessionDatachannelToken : datachannelToken;
const currentToken = this.webex.internal.llm.getDatachannelToken(DataChannelTokenType.Default);

const finalToken = currentToken ?? locusToken;
const finalToken = currentToken ?? datachannelToken;

if (!currentToken && locusToken) {
if (!currentToken && datachannelToken) {
// @ts-ignore
this.webex.internal.llm.setDatachannelToken(locusToken, dataChannelTokenType);
this.webex.internal.llm.setDatachannelToken(datachannelToken, DataChannelTokenType.Default);
}

// webinar panelist should use new data channel in practice session
const dataChannelUrl =
isPracticeSession && practiceSessionDatachannelUrl
? practiceSessionDatachannelUrl
: datachannelUrl;
const dataChannelUrl = datachannelUrl;

// @ts-ignore - Fix type
if (this.webex.internal.llm.isConnected()) {
Expand Down
1 change: 1 addition & 0 deletions packages/@webex/plugin-meetings/src/meeting/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,7 @@ const MeetingUtil = {
meeting.stopPeriodicLogUpload();

meeting.breakouts.cleanUp();
meeting.webinar.cleanUp();
meeting.simultaneousInterpretation.cleanUp();
meeting.locusMediaRequest = undefined;

Expand Down
Loading
Loading