diff --git a/functions.js b/functions.js index 6b53169..7cce43d 100644 --- a/functions.js +++ b/functions.js @@ -22,20 +22,8 @@ const Discord = require('discord.js'); const FuzzySearch = require('fuzzy-search'); // OpenAI -const { Configuration, OpenAIApi } = require("openai"); - -const configuration = new Configuration({ - apiKey: process.env.OPENAI_API_KEY, -}); -const openai = new OpenAIApi(configuration); -async function openAIStatus(o) { - const response = await o.listModels(); - const models = response.data.data; - models.forEach(e => { - console.log(`Model ID: ${e.id}`); - }); -}; -openAIStatus(openai); +const OpenAI = require("openai"); +const openai = new OpenAI(); // Various imports from other files const config = require('./config.json'); @@ -379,9 +367,9 @@ const functions = { }, gpt(prompt, response, usage) { const gptEmbed = new Discord.MessageEmbed() - .setAuthor({ name: "NodBot powered by GPT-3", iconURL: "https://assets.vfsh.dev/openai-logos/PNGs/openai-logomark.png" }) + .setAuthor({ name: "NodBot powered by GPT-3.5", iconURL: "https://assets.vfsh.dev/openai-logos/PNGs/openai-logomark.png" }) .setDescription(`**Prompt**\n${prompt}\n\n**Response**\n${response}`) - .setFooter({ text: `This prompt used ${usage.tokens} tokens for a cost of ${usage.usdc}¢` }) + .setFooter({ text: `This prompt used ${usage.tokens} tokens for a cost of ${usage.usdc}¢. Generated using ${strings.ai.chatModel}` }) return { embeds: [gptEmbed] }; }, generatingResponse() { @@ -570,16 +558,17 @@ const functions = { openAI: { chatPrompt(userPrompt) { return new Promise(async (resolve, reject) => { - const response = await openai.createCompletion({ - model: 'text-davinci-003', - prompt: userPrompt, - temperature: 0.7, - max_tokens: 250 + const response = await openai.chat.completions.create({ + messages: [{ + role: 'user', + content: userPrompt + }], + model: strings.ai.chatModel }).catch(e => { reject(e); return null; }); - resolve(response.data); + resolve(response); }); }, imagePrompt(userPrompt, size, userId) { diff --git a/package.json b/package.json index 55b30c9..3ec6382 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dotenv": "^10.0.0", "fuzzy-search": "^3.2.1", "mysql": "^2.18.1", - "openai": "^3.2.1", + "openai": "^4.12.0", "tenorjs": "^1.0.10" }, "engines": { diff --git a/slash-commands/chat.js b/slash-commands/chat.js index efeaad7..2c9ba34 100644 --- a/slash-commands/chat.js +++ b/slash-commands/chat.js @@ -1,5 +1,6 @@ const { SlashCommandBuilder } = require('@discordjs/builders'); const fn = require('../functions.js'); +const strings = require('../strings.json'); module.exports = { data: new SlashCommandBuilder() @@ -15,13 +16,14 @@ module.exports = { await interaction.editReply(fn.embeds.generatingResponse()); const userPrompt = interaction.options.getString("prompt"); const response = await fn.openAI.chatPrompt(userPrompt).catch(e => console.error(e)); - const responseText = response.choices[0].text; + const responseText = response.choices[0].message.content; const usage = { tokens: response.usage.total_tokens, - usdc: response.usage.total_tokens * ( 0.2 / 1000 ) // 0.2¢ per 1000 tokens or 0.0002¢ per token. + usdc: (response.usage.prompt_tokens * (strings.ai.chatPromptCentsPer / strings.ai.chatPromptUnits)) + + (response.usage.completion_tokens * (strings.ai.chatResCentsPer / strings.ai.chatResUnits)) }; const gptEmbed = fn.embeds.gpt(userPrompt, responseText, usage); await interaction.editReply(gptEmbed); - fn.upload.openai(interaction.user.id, userPrompt, "gpt-3.5-turbo", usage.tokens, usage.usdc); + fn.upload.openai(interaction.user.id, userPrompt, strings.ai.chatModel, usage.tokens, usage.usdc); }, }; \ No newline at end of file diff --git a/strings.json b/strings.json index b82b6db..94ee7cf 100644 --- a/strings.json +++ b/strings.json @@ -32,5 +32,12 @@ "1024x1024": 2.0 } }, + "ai": { + "chatModel": "gpt-3.5-turbo", + "chatPromptCentsPer": 0.15, + "chatPromptUnits": 1000, + "chatResCentsPer": 0.2, + "chatResUnits": 1000 + }, "temp": {} } \ No newline at end of file