fix(routines): include product safety and usage signals in prompts
Expose leave-on behavior, contraindications, safety alerts, and compact usage notes in AVAILABLE PRODUCTS so Gemini can make safer routine decisions with real-world product constraints.
This commit is contained in:
parent
9bbc34ffd2
commit
c0eeb0425d
1 changed files with 14 additions and 0 deletions
|
|
@ -342,6 +342,7 @@ def _build_products_context(
|
||||||
entry = (
|
entry = (
|
||||||
f' - id={ctx["id"]} name="{ctx["name"]}" brand="{ctx["brand"]}"'
|
f' - id={ctx["id"]} name="{ctx["name"]}" brand="{ctx["brand"]}"'
|
||||||
f" category={ctx.get('category', '')} recommended_time={ctx.get('recommended_time', '')}"
|
f" category={ctx.get('category', '')} recommended_time={ctx.get('recommended_time', '')}"
|
||||||
|
f" leave_on={ctx.get('leave_on', '')}"
|
||||||
f" targets={ctx.get('targets', [])}"
|
f" targets={ctx.get('targets', [])}"
|
||||||
)
|
)
|
||||||
if "actives" in ctx:
|
if "actives" in ctx:
|
||||||
|
|
@ -378,14 +379,27 @@ def _build_products_context(
|
||||||
entry += f" effects={notable}"
|
entry += f" effects={notable}"
|
||||||
if ctx.get("incompatible_with"):
|
if ctx.get("incompatible_with"):
|
||||||
entry += f" incompatible_with={ctx['incompatible_with']}"
|
entry += f" incompatible_with={ctx['incompatible_with']}"
|
||||||
|
if ctx.get("contraindications"):
|
||||||
|
entry += f" contraindications={ctx['contraindications']}"
|
||||||
if ctx.get("context_rules"):
|
if ctx.get("context_rules"):
|
||||||
entry += f" context_rules={ctx['context_rules']}"
|
entry += f" context_rules={ctx['context_rules']}"
|
||||||
|
safety = ctx.get("safety") or {}
|
||||||
|
if isinstance(safety, dict):
|
||||||
|
not_safe = {k: v for k, v in safety.items() if v is False}
|
||||||
|
if not_safe:
|
||||||
|
entry += f" safety_alerts={not_safe}"
|
||||||
if ctx.get("min_interval_hours"):
|
if ctx.get("min_interval_hours"):
|
||||||
entry += f" min_interval_hours={ctx['min_interval_hours']}"
|
entry += f" min_interval_hours={ctx['min_interval_hours']}"
|
||||||
if ctx.get("max_frequency_per_week"):
|
if ctx.get("max_frequency_per_week"):
|
||||||
entry += f" max_frequency_per_week={ctx['max_frequency_per_week']}"
|
entry += f" max_frequency_per_week={ctx['max_frequency_per_week']}"
|
||||||
usage_count = recent_usage_counts.get(p.id, 0)
|
usage_count = recent_usage_counts.get(p.id, 0)
|
||||||
entry += f" used_in_last_7_days={usage_count}"
|
entry += f" used_in_last_7_days={usage_count}"
|
||||||
|
usage_notes = ctx.get("usage_notes")
|
||||||
|
if usage_notes:
|
||||||
|
compact_notes = " ".join(str(usage_notes).split())
|
||||||
|
if len(compact_notes) > 260:
|
||||||
|
compact_notes = compact_notes[:257] + "..."
|
||||||
|
entry += f' usage_notes="{compact_notes}"'
|
||||||
lines.append(entry)
|
lines.append(entry)
|
||||||
return "\n".join(lines) + "\n"
|
return "\n".join(lines) + "\n"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue