in projects/deliberation_at_scale/packages/orchestrator/src/lib/openai.ts [124:183]
export async function createFunctionCompletion(options: FunctionCompletionOptions): Promise<FunctionCall | undefined> {
const {
taskInstruction,
taskContent,
functionSchema,
model = 'gpt-3.5-turbo-0613',
} = options;
const startTime = dayjs();
const waitingMessageInterval = setInterval(() => {
const passedTimeMs = dayjs().diff(startTime, 'ms');
console.info(`Waiting on function completion (${passedTimeMs}): ${taskInstruction.trim().slice(0, 100)}`);
}, ONE_SECOND_MS * 3);
const [completionResult, completionLogResult] = await Promise.allSettled([
// perform the structured completion
openaiClient.chat.completions.create({
model,
messages : [{
role: 'user',
content: taskInstruction,
}, {
role: 'user',
content: taskContent,
}],
functions: [functionSchema],
}),
// log the prompt to the database for transparency on decision making and debugging
supabaseClient.from('completions').insert({
prompt: `
Task instruction:
${taskInstruction}
Task content:
${taskContent}
`,
model: { name: model },
type: 'gpt',
}),
]);
// disable debugging
clearInterval(waitingMessageInterval);
if (completionResult.status !== 'fulfilled') {
console.error(`Failed to get a valid function completion: ${completionResult.reason}`);
return;
}
if (completionLogResult.status !== 'fulfilled') {
console.error(`Failed to log the function completion: ${completionLogResult.reason}`);
return;
}
const completion = completionResult.value.choices?.[0];
const functionCall = completion?.message?.function_call;
return functionCall;
}