import { generateObject } from "ai"; import { z } from "zod"; import { resolveModel, type AiConfig } from "../factory"; const SubstitutionsSchema = z.object({ substitutions: z.array(z.object({ name: z.string(), ratio: z.string(), note: z.string(), flavorImpact: z.enum(["minimal", "moderate", "significant"]), })), }); export type Substitution = z.infer["substitutions"][number]; const LANG: Record = { en: "English", fr: "French" }; export async function substituteIngredient( ingredient: string, recipeContext: string, config?: AiConfig, locale?: string ): Promise { const model = resolveModel(config); const lang = LANG[locale ?? "en"] ?? "English"; const { object } = await generateObject({ model, schema: SubstitutionsSchema, system: `You are a professional chef specializing in ingredient substitutions. Provide practical, commonly available substitutes. For each substitute: name what to use, the ratio (e.g. '1:1', '3/4 the amount'), and a brief note on technique adjustments. Rate the flavor impact honestly. Respond in ${lang}.`, prompt: `Suggest 3-4 substitutes for "${ingredient}" in this recipe context: ${recipeContext}`, }); return object.substitutions; }