Records one meal — the whole meal in one call — as the list of what was eaten, one item per food with its quantity, calories, macros and source. Use it when the customer says what they ate. Ask before calling if the day or the meal type is unclear: never assume either. When quantities or a homemade or restaurant dish are too vague for a useful estimate, ask one concise bundled follow-up for the missing portions and any known label, recipe, batch or calorie values before recording. For a plate photo, guide the customer to one easy portion cue suited to the food: weight; otherwise spoonfuls or ladles, a fraction of the plate or batch, or a known container size. Offer only one likely alternative at a time. If no cue is available, ask for top and side photos with a ruler, a utensil of roughly known length, or their hand beside the food. Never infer a container's capacity or exact weight from appearance alone. If the customer accepts an estimate, give a range and record its stated midpoint as llm_estimate. Never silently use normal portions. Omit date for today's meal — the usual case. Name a day only when the customer did: pass their word (yesterday, 3 days ago, Tuesday) and IZeat resolves it in their time zone; pass YYYY-MM-DD only when they said the full date. Never compute a date yourself. meal_type is one of breakfast, morning_snack, lunch, afternoon_snack, dinner, evening — pick the nearest and say so if none fits. One meal of each type per day: when that day's dinner is already recorded, a second one is refused — use update_meal for additions or corrections, and another meal type for something eaten at another time. items: one entry per food, in the order the customer said them. Quantities are grams or millilitres, nothing else: convert what they said — cups, ounces, spoons, 'a banana' — with your own knowledge of that food, keep their words in as_said, and say in your reply that you converted. Figures may carry decimals; IZeat rounds once. Each item has its own source: 'label' when read from packaging or a nutrition label (photo or text); 'user' when the customer gave the numbers themselves; 'reference' for a plain, unmixed food — a vegetable, a fruit, rice, a chicken breast — whose weight the customer gave and whose values you quote from a standard composition table; 'llm_estimate' when you deduced anything: a mixed or homemade dish, or a portion you had to guess. A weighed steak next to an estimated sauce keeps its source; only the sauce is an estimate. Ask only what would change a figure by more than a third, in one short bundled question, and only when the customer's words leave it open: the fat something was cooked or dressed in; raw or cooked weight for what absorbs water — pasta, rice, grains, pulses, oats — where cooked weighs two to three times more; which variant when a family spans a factor of two (whole or skimmed milk, plain or sweetened yoghurt, which cheese, tuna in oil or in water). Everything else, take the likely reading and say it in your reply so the customer can correct it in a word: meat and fish weighed cooked, fruit without peel or stone, a medium egg, a 30 g handful of nuts, a 33 cl beer, a 12 cl glass of wine, 15 g of jam. Never ask how a vegetable was cooked when no fat was involved. setting only when the customer said where they ate (home, restaurant, friends, takeaway); never ask for it. idempotency_key: a random string you generate per meal, reused only if you retry this same call; the same key never creates a second meal. recipes: only when the customer cooked a dish from an IZeat catalogue recipe (find_recipes gives its reference). Record what they actually cooked and ate, with their own quantities and changes; recipes only says which rows are that dish: { "recipe": "aubergine-lasagne", "items": [1] } when the dish is one row, [1, 2, 3] when you listed its ingredients. Never add it for a dish that did not come from the catalogue. This link preserves journal facts; it does not count another recipe use for creator royalties. Returns only the customer-facing meal facts — every item with both measures — and the day so far against that day's target; internal IDs and timestamps are never returned. The returned meal facts include the complete recorded foods and quantities, totals, provenance or assumptions, and day balance. Never comment on how much it is. Example: log_meal { "meal_type": "lunch", "items": [ { "description": "grilled chicken breast", "amount": 180, "unit": "g", "kcal": 297, "protein_g": 56, "carb_g": 0, "fat_g": 6.5, "source": "reference" }, { "description": "steamed sweet potato", "amount": 80, "unit": "g", "kcal": 68, "protein_g": 1.3, "carb_g": 16, "fat_g": 0.1, "source": "reference" }, { "description": "homemade sauce", "amount": 40, "unit": "g", "kcal": 90, "protein_g": 1, "carb_g": 4, "fat_g": 8, "source": "llm_estimate" } ], "idempotency_key": "a3f9c1" }.
statement is the customer-facing IZeat message. It begins with "IZeat ·" so customers can distinguish information returned by IZeat from the assistant's own response. For write operations, it also states whether the requested change was recorded in their IZeat account.
Account: Sam (review@izeat.app)