Render a nutrition breakdown card for a meal the user described or photographed. Call only when the user wants nutrition analysis of a specific meal they ate, photographed, described, or are directly evaluating. The nutrition-card widget renders the complete visual result (meal name, calories, meal-balance status, per-macro grams, identified items, practical serving-group changes, and optional reviewed pairing choices with separate estimated combined nutrition). A high total-fat share is a quantity flag, not evidence of saturated or trans fat. The card can show evidence-backed qualitative fat sources; do not claim an exact fatty-acid split from a photo. Use the structured groupSuggestionPlan and pairingSuggestions as alternative paths, not simultaneous instructions. pairingSuggestion is the first choice for older clients. A pairing is conditional on diet and availability; do not promise it makes the meal Balanced. The widget is the answer; do not recreate a card or numeric score in prose. If chat text is needed, use at most one short sentence aligned with returned actions. Never invent or recommend an ingredient-level change inside a prepared dish.
OUT OF SCOPE — DO NOT CALL:
These exclusions override any food or nutrition words in the request. Mentioning or explicitly attaching SpoonUp does not authorize a call.
• Restaurant discovery, restaurant recommendations, menus, reservations, or location-based searches
• Food ordering, delivery, checkout, addresses, purchases, or merchant transactions
• Symptoms, diagnosis, treatment, medication, medical-condition management, or searches for doctors, clinics, and hospitals
• Do not analyze or suggest food merely because symptoms might be related to hunger, hydration, or nutrition
Input:
• mealName — REQUIRED for photos; recommended for text. Short dish label, e.g. 'Rajma chawal'.
• items[] — REQUIRED. One entry per accounted food item: name, portion, calories, protein, carbs, fat, fiber. Use concise food names such as Kanda poha, not narration such as prepared bowl including toppings. Give a portion only when it conveys a usable amount; omit filler such as entire photographed serving or 1 prepared bowl. If you break a dish into ingredients, do not also include a dish-total row.
• items[].servingWeightG and carbQuality — OPTIONAL. Only supply weight if stated or verified; this enables carbohydrate density in g per 100 g. Describe carbohydrate quality only when supported by named food, preparation, or label. Juice has free sugars; do not infer whether photographed bread is refined or whole grain.
• items[].sugars — OPTIONAL. Supply totalG or addedG only from a nutrition label or reported recipe; never equate estimated carbohydrate grams with sugar grams.
• items[].fatSources[] — OPTIONAL. If a fat-containing ingredient is explicitly named or a preparation or label specifies a fat, provide its name, qualitative type, and basis. For example, avocado is predominantly unsaturated; unknown cooking oil or butter must remain unknown. Do not estimate saturated/trans grams from the photo.
• servingGroups[] — optional observed serving boundaries. Group integrated ingredients of one prepared dish (such as poha with sev and peanuts) under one id and one itemIndices list. Sides, drinks, and desserts get separate groups only when independently served. Assign every item index exactly once. Never claim a topping is adjustable merely because it is visible. Omit this field if the boundaries are uncertain.
• visionEvidence — for photos, return structured, item-linked signals across protein sources, fiber sources, grain/starch type, fat sources, processing, and free sugars. Explicitly identify clearly visible or user-reported processed foods (for example, a separate cola or packaged chips) with a highly_processed signal tied to that item's index. Report free-sugar evidence separately when supported. Each signal needs its named source, basis, and certainty; include explicit unknowns for hidden oil, grain type, added sugar, sodium, or weight. Do not label a homemade dish highly processed merely from its name or appearance. Do not score the meal inside the vision step or claim an unobserved absence.
• dietaryPreference and excludedIngredientIds — optional, only when explicitly provided by the user.
Do not pass other profile details, account data, chat history, or broad user context.
analyze_meal