Large Transaction Update

This commit is contained in:
Logan Cusano
2023-02-27 00:20:54 -05:00
parent 0c4fee091e
commit 384dd7011f
6 changed files with 79 additions and 31 deletions

View File

@@ -3,6 +3,7 @@ const log = new DebugBuilder("server", "openAiController");
const crypto = require('crypto')
const { createTransaction } = require("./transactionController");
const { authorizeTokenUsage } = require("../middleware/balanceAuthorization");
const { encode } = require("gpt-3-encoder")
const { Configuration, OpenAIApi } = require('openai');
@@ -86,7 +87,7 @@ async function getTextGeneration(_prompt, callback, { _model = "text-davinci-003
* @param {*} param1 Default parameters can be modified
* @returns
*/
exports.submitTextPromptTransaction = async (prompt, temperature, max_tokens, discord_account_id, callback) => {
exports.submitTextPromptTransaction = async (prompt, temperature, max_tokens, discord_account_id, interaction, command, callback) => {
getTextGeneration(prompt, (err, gptResult) => {
if (err) callback(err, undefined);
@@ -116,29 +117,59 @@ exports.submitTextPromptTransaction = async (prompt, temperature, max_tokens, di
* @param {*} image_size The size of the image ["256x256" | "512x512" | "1024x1024"]
* @param {*} callback
*/
exports.submitImagePromptTransaction = async (prompt, discord_account_id, images_to_generate, image_size, callback) => {
exports.submitImagePromptTransaction = async (prompt, discord_account_id, images_to_generate, image_size, interaction, command, callback) => {
let pricePerImage = 800;
log.DEBUG(image_size)
switch(image_size){
case "1024x1024":
log.DEBUG("1024 selected");
pricePerImage = 1000;
break;
case "512x512":
pricePerImage = 900;
log.DEBUG("512 selected");
break;
case "256x256":
log.DEBUG("256 selected");
pricePerImage = 800;
break;
default:
log.DEBUG("256px defaulted");
pricePerImage = 800;
break;
}
if (!images_to_generate) images_to_generate = 1;
if (!image_size) images_to_generate = "256x256";
getImageGeneration(prompt, {
_image_size: image_size,
_images_to_generate: images_to_generate
}, (err, dalleResult) => {
if (err) callback(err, undefined);
totalTokensToBeUsed = pricePerImage * images_to_generate;
// TODO - Use the pricing table to calculate discord tokens
log.DEBUG("DALL-E Result", dalleResult);
const discordTokensUsed = 100;
const providerTokensUsed = 100;
const dalleResultHash = crypto.createHash('sha1').update(JSON.stringify({ discord_account_id : prompt, images_to_generate: image_size })).digest('hex')
log.DEBUG("Total tokens to be used", totalTokensToBeUsed, pricePerImage, images_to_generate);
if (dalleResult){
createTransaction(dalleResultHash, discord_account_id, discordTokensUsed, providerTokensUsed, 2, async (err, transactionResult) => {
authorizeTokenUsage(interaction, command, totalTokensToBeUsed, (isAuthorized) => {
if (isAuthorized) {
getImageGeneration(prompt, {
_image_size: image_size,
_images_to_generate: images_to_generate
}, (err, dalleResult) => {
if (err) callback(err, undefined);
if (transactionResult){
log.DEBUG("Transaction Created: ", transactionResult);
callback(undefined, ({ results: dalleResult, totalTokens: discordTokensUsed}));
}
});
}
});
// TODO - Use the pricing table to calculate discord tokens
log.DEBUG("DALL-E Result", dalleResult);
const dalleResultHash = crypto.createHash('sha1').update(JSON.stringify({ discord_account_id : prompt, images_to_generate: image_size })).digest('hex')
if (dalleResult){
createTransaction(dalleResultHash, discord_account_id, totalTokensToBeUsed, totalTokensToBeUsed, 2, async (err, transactionResult) => {
if (err) callback(err, undefined);
if (transactionResult){
log.DEBUG("Transaction Created: ", transactionResult);
callback(undefined, ({ results: dalleResult, totalTokens: totalTokensToBeUsed}));
}
});
}
});
}
})
}