webex / webex-js-sdk

JavaScript SDK for Webex
https://webex.github.io/webex-js-sdk/
Other
167 stars 334 forks source link

fix(plugin-meetings): trigger transcript connected after llm online #3668

Closed mkesavan13 closed 6 days ago

mkesavan13 commented 1 week ago

COMPLETES AdHoc

This pull request addresses

So, while joining a meeting using the Web SDK, we check if the enableAutomaticLLM is set to true and connect the LLM websocket and once we do this, we notify the customer through an event meeting:transcription:connected

We do this once the updateLLMConnection method is resolved. However, this is inaccurate sometimes leading to early emission of the event

by making the following changes

To avoid such inaccuracy, this change will here-on listen to the 'online' event emitted by the LLM plugin and then trigger the meeting:transcription:connected event

Screenrecording

Here's link to the sharepoint upload.

Change Type

The following scenarios where tested

I certified that


Make sure to have followed the contributing guidelines before submitting.

aws-amplify-us-east-2[bot] commented 1 week ago

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-3668.d3m3l2kee0btzx.amplifyapp.com

mkesavan13 commented 6 days ago

@sreenara

Have we found out when the resolution of this promise is inaccurate?

Also, was there a design change on the LLM side that caused this issue?

Third, is there an offline event analogous to the online event which we need to take care of? What if the LLM goes offline and we need to report this to the user and wait for online again? I see that we are switching off the listener in the function that's added.

mkesavan13 commented 6 days ago

@Kesari3008 - Updated the PR description with recording share point link. Please check

mkesavan13 commented 6 days ago

Oh. We cannot do that. So, we are just passing on this function to the llm.on as callback. However, if we do not have it as an arrow function, TriggerProxy would think we refer 'this' as LLM and not Meetings

For arrow functions, this always is where it is declared. Whereas for regular functions, it takes this as the object from where it is being called.

We cannot also bind it. If you see the test file, we test assert.calledWith(llm.on, 'online', meeting.handleLLMOnline)

If we bind it, llm.on would receive a bound function and not the actual meeting.handleLLMOnline

And if we do assert.calledWith(llm.on, 'online', meeting.handleLLMOnline.bind(meeting)) in the test, this would be considered as a separate bound function and not the same as it is bound in the meeting.

You can check processRelayEvent method as an example of this type of declarations in the same file

@sreenara