# clarifier.py from __future__ import annotations from typing import Dict, Any, List def missing_inputs_questions(plan: Dict[str,Any], binding: Dict[str,Dict[str,Any]]) -> List[str]: """ For each required input in plan['requires'], if binding[name]['match'] is None or score too low, produce a specific question asking for the exact data or where it lives. """ reqs = [r.get("input") or r.get("name") or "" for r in (plan.get("requires") or [])] out: List[str] = [] for r in reqs: b = binding.get(r, {}) if (not b) or (b.get("match") is None) or (float(b.get("score", 0.0)) < 0.46): out.append(f"Where can I find **{r}** in your files (exact column name), or please provide its value?") # Always end with planning constraints if out: out.append("Any constraints (time windows, cohorts, or routing/scheduling rules) I should apply?") return out def render_phase1_markdown(questions: List[str]) -> str: if not questions: return "**Clarification Questions**\n- No data gaps detected. Please confirm to proceed with analysis." out = ["**Clarification Questions**"] for q in questions: out.append(f"- {q}") return "\n".join(out)