* feat: use vercel ai gateway * fix: correct response handling * ci: add pipeline
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { PurchaseList, purchaseListSchema } from './types';
|
|
import { Tool } from './tool';
|
|
import { BaseTool, makeRequest } from '@utils/aiGatewayClient';
|
|
import { generatePrompt } from './prompt';
|
|
import { Consumer } from '@consumer/types';
|
|
|
|
export async function generate(editedConsumer: Consumer, date: Date) {
|
|
const consumerPrompt = await generatePrompt(
|
|
editedConsumer,
|
|
parseInt(process.env.PURCHASE_REFLECTION_THRESHOLD ?? '50'),
|
|
date,
|
|
parseInt(process.env.NUMBER_OF_WEEKS ?? '4')
|
|
);
|
|
|
|
try {
|
|
const result = (await makeRequest(
|
|
consumerPrompt,
|
|
Tool as BaseTool
|
|
)) as PurchaseList;
|
|
|
|
const validPurchases = purchaseListSchema.safeParse(result);
|
|
|
|
if (validPurchases.error) {
|
|
throw Error(`Invalid purchases: ${validPurchases.error.message}`);
|
|
}
|
|
|
|
const totalPurchases = validPurchases.data.weeks.reduce(
|
|
(acc, week) => acc + week.purchases.length,
|
|
0
|
|
);
|
|
|
|
console.info(
|
|
`Generated ${totalPurchases} purchases for new purchase list for consumer`
|
|
);
|
|
|
|
return validPurchases.data;
|
|
} catch (error) {
|
|
console.error('Error generating purchases:', error);
|
|
throw error;
|
|
}
|
|
}
|