diff --git a/src/execution.ts b/src/execution.ts index 99acd35..feb4bba 100644 --- a/src/execution.ts +++ b/src/execution.ts @@ -260,10 +260,12 @@ async function executeFromQueue(channel: string) { // handle function calls if (generatedMessage.function_call) { OpenAImessages.push(generatedMessage); - // FIXME: don't use new instance of FunctionManager - OpenAImessages.push( - new FunctionManager().handleFunction(generatedMessage.function_call) - ); + OpenAImessages.push({ + role: "function", + name: generatedMessage.function_call.name, + // FIXME: don't use new instance of FunctionManager + content: new FunctionManager().handleFunction(generatedMessage.function_call), + }); } } while (generatedMessage.function_call); diff --git a/src/funcitonManager.ts b/src/funcitonManager.ts index 4a0910e..008c14e 100644 --- a/src/funcitonManager.ts +++ b/src/funcitonManager.ts @@ -1,5 +1,4 @@ -import { ChatCompletionFunctions, ChatCompletionRequestMessage, ChatCompletionRequestMessageFunctionCall } from "openai"; - +import { ChatCompletionFunctions, ChatCompletionRequestMessageFunctionCall } from "openai"; import config from "./config"; type parameterMap = { @@ -61,32 +60,15 @@ export default class FunctionManager { return rvalue; } - public handleFunction(request: ChatCompletionRequestMessageFunctionCall): ChatCompletionRequestMessage { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let parsedArguments: any; - - const functionToRun = this.store.get(request.name ?? ""); - - // check if the function is registered - if (!functionToRun) { - return { - role: "system", - content: "Only use functions that were provided to you", - }; - } - + public handleFunction(request: ChatCompletionRequestMessageFunctionCall) { try { - parsedArguments = JSON.parse(request.arguments ?? ""); + const parsedArguments = JSON.parse(request.arguments ?? ""); + return this.store.get(request.name ?? "")?.execute(parsedArguments); } catch (e) { console.error("Function arguments raw: " + request.arguments); throw new Error(`Failed to parse the function JSON arguments when running function [${request.name}]`, {cause: e}); } - return { - role: "function", - name: request.name, - content: functionToRun.execute(parsedArguments), - }; } }