WaledRashed24/comics
0
1"use server"2 3import type { ChatCompletionMessageParam } from "openai/resources/chat"4import OpenAI from "openai"5import { LLMPredictionFunctionParams } from "@/types"6 7export async function predict({8 systemPrompt,9 userPrompt,10 nbMaxNewTokens,11 llmVendorConfig12}: LLMPredictionFunctionParams): Promise<string> {13 const openaiApiKey = `${14 llmVendorConfig.apiKey ||15 process.env.AUTH_OPENAI_API_KEY ||16 ""17 }`18 const openaiApiModel = `${19 llmVendorConfig.modelId ||20 process.env.LLM_OPENAI_API_MODEL ||21 "gpt-4-turbo"22 }`23 24 if (!openaiApiKey) { throw new Error(`cannot call OpenAI without an API key`) }25 26 27 const openaiApiBaseUrl = `${process.env.LLM_OPENAI_API_BASE_URL || "https://api.openai.com/v1"}`28 29 const openai = new OpenAI({30 apiKey: openaiApiKey,31 baseURL: openaiApiBaseUrl,32 })33 34 const messages: ChatCompletionMessageParam[] = [35 { role: "system", content: systemPrompt },36 { role: "user", content: userPrompt },37 ]38 39 try {40 const res = await openai.chat.completions.create({41 messages: messages,42 stream: false,43 model: openaiApiModel,44 temperature: 0.8,45 max_tokens: nbMaxNewTokens,46 47 // TODO: use the nbPanels to define a max token limit48 })49 50 return res.choices[0].message.content || ""51 } catch (err) {52 console.error(`error during generation: ${err}`)53 return ""54 }55}