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;
}