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/consumer/types.ts
Riccardo Senica 017e538396 Vercel ai gateway (#10)
* feat: use vercel ai gateway

* fix: correct response handling

* ci: add pipeline
2025-10-11 15:07:54 +02:00

139 lines
3.1 KiB
TypeScript

import { z } from 'zod';
const petSchema = z.object({
type: z.string(),
name: z.string()
});
const regularStopSchema = z.object({
location: z.string(),
purpose: z.string(),
frequency: z.string()
});
const weekdayActivitySchema = z.object({
activity: z.string(),
location: z.string(),
duration_minutes: z.number()
});
const brandPreferenceSchema = z.object({
name: z.string(),
loyalty_score: z.number().min(1).max(10)
});
const subscriptionSchema = z.object({
name: z.string(),
amount: z.number(),
frequency: z.string(),
next_due_date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
category: z.enum([
'housing',
'utilities',
'insurance',
'services',
'memberships',
'digital',
'taxes',
'other'
]),
is_fixed_expense: z.boolean(),
auto_payment: z.boolean()
});
const spendingCategorySchema = z.object({
preference_score: z.number().min(1).max(10),
monthly_budget: z.number()
});
const exerciseActivitySchema = z.object({
activity: z.string(),
frequency: z.string(),
duration_minutes: z.number()
});
export type ExerciseActivity = z.infer<typeof exerciseActivitySchema>;
const socialActivitySchema = z.object({
activity: z.string(),
frequency: z.string()
});
export type SocialActivity = z.infer<typeof socialActivitySchema>;
const upcomingEventSchema = z.object({
name: z.string(),
date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
importance: z.number().min(1).max(10)
});
const coreSchema = z.object({
age: z.number(),
name: z.string(),
occupation: z.object({
title: z.string(),
level: z.string(),
income: z.number(),
location: z.string(),
schedule: z.array(z.string())
}),
home: z.object({
type: z.string(),
ownership: z.string(),
location: z.string(),
commute_distance_km: z.number()
}),
household: z.object({
status: z.string(),
members: z.array(z.string()),
pets: z.array(petSchema)
})
});
const routinesSchema = z.object({
weekday: z.record(z.string(), weekdayActivitySchema),
weekend: z.array(z.string()),
commute: z.object({
method: z.string(),
route: z.array(z.string()),
regular_stops: z.array(regularStopSchema)
})
});
const preferencesSchema = z.object({
diet: z.array(z.string()),
brands: z.array(brandPreferenceSchema),
price_sensitivity: z.number().min(1).max(10),
payment_methods: z.array(z.string())
});
const financesSchema = z.object({
subscriptions: z.array(subscriptionSchema),
spending_patterns: z.object({
impulsive_score: z.number().min(1).max(10),
categories: z.record(z.string(), spendingCategorySchema)
})
});
const habitsSchema = z.object({
exercise: z.array(exerciseActivitySchema),
social: z.array(socialActivitySchema)
});
const contextSchema = z.object({
stress_triggers: z.array(z.string()),
reward_behaviors: z.array(z.string()),
upcoming_events: z.array(upcomingEventSchema)
});
export const consumerSchema = z.object({
core: coreSchema,
routines: routinesSchema,
preferences: preferencesSchema,
finances: financesSchema,
habits: habitsSchema,
context: contextSchema
});
export type Consumer = z.infer<typeof consumerSchema>;