This repository has been archived on 2026-02-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
synthetic-consumer-data/utils/purchases/store.ts

84 lines
2.0 KiB
TypeScript

import { PurchaseList, purchaseListSchema } from './types';
import { Tool } from './tool';
import { BaseTool, makeRequest } from '../anthropicClient';
import { generatePrompt } from './prompt';
import { Consumer } from '../consumer/types';
import prisma from '../../prisma/prisma';
export async function generate(
id: number | undefined,
editedConsumer: Consumer,
date: Date
) {
const consumerPrompt = await generatePrompt(
editedConsumer,
parseInt(process.env.PURCHASE_REFLECTION_THRESHOLD ?? '50'),
date,
parseInt(process.env.NUMBER_OF_WEEKS ?? '4')
);
const consumer = id
? await prisma.consumer.update({
where: {
id
},
data: {
editedValue: editedConsumer
}
})
: await prisma.consumer.create({
data: {
editedValue: editedConsumer
}
});
const newPurchaseList = await prisma.purchaseList.create({
data: {
consumerId: consumer.id
}
});
console.info(
`Generating purchase list with id ${newPurchaseList.id} for consumer with id ${consumer.id}`
);
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 purchase list with id ${newPurchaseList.id} for consumer wth id ${id}`
);
await prisma.purchaseList.update({
where: {
id: newPurchaseList.id
},
data: {
value: validPurchases.data
}
});
console.info(
`Purchase list with id ${newPurchaseList.id} for consumer with id ${id} stored in database.`
);
return validPurchases.data;
} catch (error) {
console.error('Error generating purchases:', error);
throw error;
}
}