medusa-product-ai-widget
Version:
A widget to improve product descriptions with AI
38 lines • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ai_1 = require("ai");
const PROMPTS = {
fix_writing: "Fix spelling and grammar. Don't introduce new ideas, just fix the writing.",
make_longer: "Make the text longer, without losing the original meaning. Get creative.",
make_shorter: "Make as short as possbile, without losing the original meaning. Don't introduce any new ideas or words, but fix grammar and spelling.",
improve_seo: "Paraphrase this product description using SEO best practices. Use active voice and short sentences to make the content more readable for potential shoppers in the context of the focus keyword: '{keyword}'. Text length may exceed 160 characters. The text should be unique and not copied from other sources. The focus keyword should be used 2-3 times in your output.",
};
async function default_1(req, res) {
// Create an OpenAI API client
const openAiService = req.scope.resolve("openAiService");
// Extract the relevant data from the request body
const { messages, type, description, keyword } = req.body;
// Set up the initial prompt
let prompt = PROMPTS[type];
if (type === "improve_seo") {
prompt = prompt.replace("{keyword}", keyword);
}
// Add the prompt to the messages
const userMessages = [
{
role: "user",
content: "Prompt: " + prompt + " Description: " + description,
},
];
messages.push(...userMessages);
// Ask OpenAI for a streaming chat completion given the prompt
const completion = await openAiService.create(messages);
// Set up response headers
res.setHeader("Content-Type", "text/plain");
// Convert the response into a friendly text-stream
const stream = (0, ai_1.OpenAIStream)(completion);
// Pipe the stream to the response
(0, ai_1.streamToResponse)(stream, res);
}
exports.default = default_1;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXNjcmlwdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3JvdXRlcy9hZG1pbi9jb21wbGV0aW9uL3Byb2R1Y3QtZGVzY3JpcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsMkJBQW9EO0FBR3BELE1BQU0sT0FBTyxHQUFZO0lBQ3ZCLFdBQVcsRUFDVCw0RUFBNEU7SUFDOUUsV0FBVyxFQUNULDBFQUEwRTtJQUM1RSxZQUFZLEVBQ1YsdUlBQXVJO0lBQ3pJLFdBQVcsRUFDVCw4V0FBOFc7Q0FDalgsQ0FBQztBQUVhLEtBQUssb0JBQVcsR0FBWSxFQUFFLEdBQWE7SUFDeEQsOEJBQThCO0lBQzlCLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXpELGtEQUFrRDtJQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUUxRCw0QkFBNEI7SUFDNUIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTNCLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtRQUMxQixNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDL0M7SUFFRCxpQ0FBaUM7SUFDakMsTUFBTSxZQUFZLEdBQUc7UUFDbkI7WUFDRSxJQUFJLEVBQUUsTUFBTTtZQUNaLE9BQU8sRUFBRSxVQUFVLEdBQUcsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFdBQVc7U0FDOUQ7S0FDRixDQUFDO0lBRUYsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBRS9CLDhEQUE4RDtJQUM5RCxNQUFNLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEQsMEJBQTBCO0lBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVDLG1EQUFtRDtJQUNuRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFZLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEMsa0NBQWtDO0lBQ2xDLElBQUEscUJBQWdCLEVBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFuQ0QsNEJBbUNDIn0=