From 124ac5cbf044675bfdf99c85e43c317e379b778f Mon Sep 17 00:00:00 2001 From: Wroclaw Date: Sun, 30 Jul 2023 01:32:09 +0200 Subject: [PATCH] Simplify the ChatCompletion calling loop removes duplicate code in while loop --- src/execution.ts | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/execution.ts b/src/execution.ts index ea05d6d..feb4bba 100644 --- a/src/execution.ts +++ b/src/execution.ts @@ -1,5 +1,5 @@ import DiscordApi, { GuildTextBasedChannel } from "discord.js"; -import { ChatCompletionRequestMessage } from "openai"; +import { ChatCompletionRequestMessage, ChatCompletionResponseMessage } from "openai"; import { database, openai } from "./index"; import Moderation from "./moderation"; @@ -241,27 +241,10 @@ async function executeFromQueue(channel: string) { } OpenAImessages = toOpenAIMessages(messages); - let answer = await openai.createChatCompletion({ - ...config.chatCompletionConfig, - messages: OpenAImessages, - // FIXME: don't use new instance of FunctionManager - functions: new FunctionManager().getFunctions(), - }); + let generatedMessage: ChatCompletionResponseMessage | undefined = undefined; + let answer: Awaited>; - logUsedTokens(answer, message, ++functionRanCounter); - - let generatedMessage = answer.data.choices[0].message; - if (!generatedMessage) throw new Error("empty message received"); - - // handle function calls - while (generatedMessage.function_call) { - OpenAImessages.push(generatedMessage); - OpenAImessages.push({ - role: "function", - name: generatedMessage.function_call.name, - // FIXME: don't use new instance of FunctionManager - content: new FunctionManager().handleFunction(generatedMessage.function_call), - }); + do { answer = await openai.createChatCompletion({ ...config.chatCompletionConfig, messages: OpenAImessages, @@ -272,8 +255,19 @@ async function executeFromQueue(channel: string) { logUsedTokens(answer, message, ++functionRanCounter); generatedMessage = answer.data.choices[0].message; - if (!generatedMessage) throw new Error("empty message received"); - } + if (!generatedMessage) throw new Error("Empty message received"); + + // handle function calls + if (generatedMessage.function_call) { + OpenAImessages.push(generatedMessage); + 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); const answerContent = answer.data.choices[0].message?.content;