diff --git a/functions.js b/functions.js index 2547257..fd0e479 100644 --- a/functions.js +++ b/functions.js @@ -377,26 +377,21 @@ const functions = { interaction.reply({ embeds: [ strainEmbed ]}); }, - dalle(user, prompt, imageUrl) { + dalle(prompt, imageUrl, size) { const dalleEmbed = new Discord.MessageEmbed() .setAuthor({ name: "NodBot powered by DALL-E", iconURL: "https://assets.vfsh.dev/openai-logos/PNGs/openai-logomark.png" }) .addFields( { name: "Prompt", value: prompt } ) .setImage(imageUrl) - .setFooter({ text: user.username, iconURL: user.avatarURL() }) - .setTimestamp(); + .setFooter({ text: `This ${size} image cost ${strings.costs.dalle[size]}¢ to generate.` }) return { embeds: [dalleEmbed] }; }, - gpt(user, prompt, response) { + 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" }) - .addFields( - { name: "Prompt", value: prompt }, - { name: "Response", value: response } - ) - .setFooter({ text: user.username, iconURL: user.avatarURL() }) - .setTimestamp(); + .setDescription(`**Prompt**\n${prompt}\n\n**Response**\n${response}`) + .setFooter({ text: `This prompt used ${usage.tokens} tokens for a cost of ${usage.usd}¢` }) return { embeds: [gptEmbed] }; } }, @@ -580,7 +575,7 @@ const functions = { reject(e); return null; }); - resolve(response.data.choices[0].text); + resolve(response.data); }); }, imagePrompt(userPrompt, size, userId) { diff --git a/slash-commands/chat.js b/slash-commands/chat.js index e3aee29..a538115 100644 --- a/slash-commands/chat.js +++ b/slash-commands/chat.js @@ -14,7 +14,12 @@ module.exports = { await interaction.deferReply(); const userPrompt = interaction.options.getString("prompt"); const response = await fn.openAI.chatPrompt(userPrompt).catch(e => console.error(e)); - const gptEmbed = fn.embeds.gpt(interaction.user, userPrompt, response); + const responseText = response.choices[0].text.slice(2); + const usage = { + tokens: response.usage.total_tokens, + usd: response.usage.total_tokens * ( 0.2 / 1000 ) // 0.2¢ per 1000 tokens or 0.0002¢ per token. + }; + const gptEmbed = fn.embeds.gpt(userPrompt, responseText, usage); await interaction.editReply(gptEmbed); }, }; \ No newline at end of file diff --git a/slash-commands/dalle.js b/slash-commands/dalle.js index ff105f6..a848e02 100644 --- a/slash-commands/dalle.js +++ b/slash-commands/dalle.js @@ -26,7 +26,7 @@ module.exports = { const size = interaction.options.getString("size") ? interaction.options.getString("size") : "512x512"; const imageUrl = await fn.openAI.imagePrompt(userPrompt, size); - const dalleEmbed = fn.embeds.dalle(interaction.user, userPrompt, imageUrl); + const dalleEmbed = fn.embeds.dalle(userPrompt, imageUrl, size); await interaction.editReply(dalleEmbed); } catch (err) { const errorId = fn.generateErrorId(); diff --git a/strings.json b/strings.json index bcf8a14..b82b6db 100644 --- a/strings.json +++ b/strings.json @@ -22,5 +22,15 @@ "bussin fr, no cap", "ongggg no :billed_cap: fr fr" ], + "costs": { + "gpt": { + "gpt-3.5-turbo": 0.2 + }, + "dalle": { + "256x256": 1.6, + "512x512": 1.8, + "1024x1024": 2.0 + } + }, "temp": {} } \ No newline at end of file