export async function createPromptCompletion()

in projects/deliberation_at_scale/packages/orchestrator/src/lib/openai.ts [185:241]


export async function createPromptCompletion(options: PromptCompletionOptions): Promise<string | undefined>  {
    const {
        taskInstruction,
        taskContent,
        model = 'gpt-4-0613',
    } = options;
    const startTime = dayjs();
    const waitingMessageInterval = setInterval(() => {
        const passedTimeMs = dayjs().diff(startTime, 'ms');
        console.info(`Waiting on prompt completion (${passedTimeMs}): ${taskInstruction.trim().slice(0, 100)}`);
    }, ONE_SECOND_MS * 3);
    const prompt = `
        Task instruction:
        ${taskInstruction}

        Task content:
        ${taskContent}
    `;
    const [completionResult, completionLogResult] = await Promise.allSettled([

        // perform the structured completion
        openaiClient.chat.completions.create({
            model,
            messages: [{
                role: 'user',
                content: taskInstruction,
            },{
                role: 'user',
                content: taskContent,
            }]
        }),

        // log the prompt to the database for transparency on decision making and debugging
        supabaseClient.from('completions').insert({
            prompt,
            model: { name: model },
            type: 'gpt',
        }),
    ]);

    // disable debugging
    clearInterval(waitingMessageInterval);

    if (completionResult.status !== 'fulfilled') {
        console.error(`Failed to get a valid prompt completion: ${completionResult.reason}`);
        return;
    }

    if (completionLogResult.status !== 'fulfilled') {
        console.error(`Failed to log the prompt completion: ${completionLogResult.reason}`);
        return;
    }

    const completion = completionResult.value.choices?.[0].message.content ?? undefined;

    return completion;
}