fix: pass instance ref to event handler

This commit is contained in:
Louis 2023-11-21 22:10:35 +07:00
parent 664806e7f1
commit 8f76b7c3e0

View File

@ -29,6 +29,7 @@ import { fs } from "@janhq/core";
*/ */
export default class JanInferencePlugin implements InferencePlugin { export default class JanInferencePlugin implements InferencePlugin {
controller = new AbortController(); controller = new AbortController();
isCancelled = false;
/** /**
* Returns the type of the plugin. * Returns the type of the plugin.
* @returns {PluginType} The type of the plugin. * @returns {PluginType} The type of the plugin.
@ -41,7 +42,9 @@ export default class JanInferencePlugin implements InferencePlugin {
* Subscribes to events emitted by the @janhq/core package. * Subscribes to events emitted by the @janhq/core package.
*/ */
onLoad(): void { onLoad(): void {
events.on(EventName.OnNewMessageRequest, this.handleMessageRequest); events.on(EventName.OnNewMessageRequest, (data) =>
JanInferencePlugin.handleMessageRequest(data, this)
);
} }
/** /**
@ -76,7 +79,8 @@ export default class JanInferencePlugin implements InferencePlugin {
* @returns {Promise<void>} A promise that resolves when the streaming is stopped. * @returns {Promise<void>} A promise that resolves when the streaming is stopped.
*/ */
async stopInference(): Promise<void> { async stopInference(): Promise<void> {
this.controller.abort(); this.isCancelled = true;
this.controller?.abort();
} }
/** /**
@ -109,9 +113,14 @@ export default class JanInferencePlugin implements InferencePlugin {
/** /**
* Handles a new message request by making an inference request and emitting events. * Handles a new message request by making an inference request and emitting events.
* Function registered in event manager, should be static to avoid binding issues.
* Pass instance as a reference.
* @param {MessageRequest} data - The data for the new message request. * @param {MessageRequest} data - The data for the new message request.
*/ */
private async handleMessageRequest(data: MessageRequest) { private static async handleMessageRequest(
data: MessageRequest,
instance: JanInferencePlugin
) {
const message: ThreadMessage = { const message: ThreadMessage = {
threadId: data.threadId, threadId: data.threadId,
content: "", content: "",
@ -122,9 +131,10 @@ export default class JanInferencePlugin implements InferencePlugin {
}; };
events.emit(EventName.OnNewMessageResponse, message); events.emit(EventName.OnNewMessageResponse, message);
this.controller = new AbortController(); instance.isCancelled = false;
instance.controller = new AbortController();
requestInference(data.messages, this.controller).subscribe({ requestInference(data.messages, instance.controller).subscribe({
next: (content) => { next: (content) => {
message.content = content; message.content = content;
events.emit(EventName.OnMessageResponseUpdate, message); events.emit(EventName.OnMessageResponseUpdate, message);
@ -136,7 +146,8 @@ export default class JanInferencePlugin implements InferencePlugin {
}, },
error: async (err) => { error: async (err) => {
message.content = message.content =
message.content.trim() + "\n" + "Error occurred: " + err.message; message.content.trim() +
(instance.isCancelled ? "" : "\n" + "Error occurred: " + err.message);
message.status = MessageStatus.Ready; message.status = MessageStatus.Ready;
events.emit(EventName.OnMessageResponseUpdate, message); events.emit(EventName.OnMessageResponseUpdate, message);
}, },