import { OpenAI } from "https://deno.land/x/openai/mod.ts"; import { OPENAI_API_KEY } from "@lib/env.ts"; const openAI = OPENAI_API_KEY && new OpenAI(OPENAI_API_KEY); export async function summarize(content: string) { if (!openAI) return; const chatCompletion = await openAI.createChatCompletion({ model: "gpt-3.5-turbo", messages: [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": content.slice(0, 2000) }, { "role": "user", "content": "Please summarize the article in one sentence as short as possible", }, ], }); return chatCompletion.choices[0].message.content; } export async function shortenTitle(content: string) { if (!openAI) return; const chatCompletion = await openAI.createChatCompletion({ model: "gpt-3.5-turbo", messages: [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": content.slice(0, 2000) }, { "role": "user", "content": "Please shorten the provided website title as much as possible, don't rewrite it, just remove unneccesary informations. Please remove for example any mention of the name of the website.", }, ], }); return chatCompletion.choices[0].message.content; } export async function extractAuthorName(content: string) { if (!openAI) return; const chatCompletion = await openAI.createChatCompletion({ model: "gpt-3.5-turbo", messages: [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": content.slice(0, 2000) }, { "role": "user", "content": "If you are able to extract the name of the author from the text please respond with the name, otherwise respond with 'not found'", }, ], }); const author = chatCompletion.choices[0].message.content; if (author !== "not found") return author; return ""; } export async function createTags(content: string) { if (!openAI) return; const chatCompletion = await openAI.createChatCompletion({ model: "gpt-3.5-turbo", messages: [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": content.slice(0, 2000) }, { "role": "user", "content": "Please respond with a list of genres the corresponding article falls into, dont include any other informations, just a comma seperated list of top 5 categories. Please respond only with tags that make sense even if there are less than five.", }, ], }); return chatCompletion.choices[0].message.content?.toLowerCase().split(", ") .map((v) => v.replaceAll(" ", "-")); }