55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import 'dotenv/config';
|
|
import { Consumer, consumerSchema } from './types';
|
|
import { Tool } from './tool';
|
|
import { BaseTool, makeRequest } from '../anthropicClient';
|
|
import { generatePrompt } from './prompt';
|
|
import { generateConsumerSeed } from '@utils/generateConsumerSeed';
|
|
import prisma from '../../prisma/prisma';
|
|
|
|
export async function generate() {
|
|
const { letters, birthday, zipCode } = generateConsumerSeed();
|
|
|
|
const newConsumer = await prisma.consumer.create({
|
|
data: {
|
|
letters,
|
|
birthday: birthday.toDate(),
|
|
zipCode
|
|
}
|
|
});
|
|
|
|
console.info(`New consumer being generated with id ${newConsumer.id}`);
|
|
|
|
const prompt = generatePrompt(letters, birthday, zipCode);
|
|
|
|
try {
|
|
const result = (await makeRequest(prompt, Tool as BaseTool)) as Consumer;
|
|
|
|
const validConsumer = consumerSchema.safeParse(result);
|
|
|
|
if (validConsumer.error) {
|
|
throw Error(`Invalid consumer generated: ${validConsumer.error.message}`);
|
|
}
|
|
|
|
console.info('Generated consumer by Anthropic', validConsumer.data);
|
|
|
|
await prisma.consumer.update({
|
|
where: {
|
|
id: newConsumer.id
|
|
},
|
|
data: {
|
|
value: validConsumer.data
|
|
}
|
|
});
|
|
|
|
console.info(`Consumer with id ${newConsumer.id} stored in database.`);
|
|
|
|
return {
|
|
id: newConsumer.id,
|
|
consumer: validConsumer.data
|
|
};
|
|
} catch (error) {
|
|
console.error('Error generating purchases:', error);
|
|
throw error;
|
|
}
|
|
}
|