{"ok":true,"site":{"host":"solaris-xi-olive.vercel.app","url":"https://solaris-xi-olive.vercel.app/","type":"live","desc":"Solaris","tools":[{"name":"get_model_spec","kind":"answer","impl":"imperative","description":"Call this FIRST. Returns all parameter names, ranges, units, fixed physical/economic constants, and output metric definitions. Everything you need to form valid inputs for set_params, sweep, and grid_search.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_state","kind":"answer","impl":"imperative","description":"Returns current slider values (params), the latest full-fidelity result, pinned run labels, and whether a sweep is loaded. Use this to understand what the user has configured before making changes.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_params","kind":"act","impl":"imperative","description":"Updates one or more sliders and immediately returns the new full-fidelity result. Partial updates are fine — unspecified params keep their current values. The sliders visibly move on screen when you call this.","inputSchema":{"type":"object","properties":{"panels":{"type":"integer","minimum":0,"maximum":40},"batteryKwh":{"type":"number","minimum":0,"maximum":30},"inverterKw":{"type":"number","minimum":1,"maximum":10},"dailyLoadKwh":{"type":"number","minimum":3,"maximum":25},"loadShape":{"type":"string","enum":["evening_heavy","flat","daytime_heavy"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run","kind":"act","impl":"imperative","description":"Runs the full-fidelity 8760-hour simulation. Pass a partial params override to evaluate a hypothetical config without moving the sliders. Use this after sweep/grid_search to get precise numbers on a shortlisted config.","inputSchema":{"type":"object","properties":{"panels":{"type":"integer","minimum":0,"maximum":40},"batteryKwh":{"type":"number","minimum":0,"maximum":30},"inverterKw":{"type":"number","minimum":1,"maximum":10},"dailyLoadKwh":{"type":"number","minimum":3,"maximum":25},"loadShape":{"type":"string","enum":["evening_heavy","flat","daytime_heavy"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"sweep","kind":"act","impl":"imperative","description":"Sweeps one numeric parameter across a range (fast simulation). Use this before grid_search to understand how a single variable moves key metrics. Returns top 10 by annual cost + the best config. Max 500 steps. Shows an approval modal when > 200 configs.","inputSchema":{"type":"object","required":["param","from","to","steps"],"properties":{"param":{"type":"string","enum":["panels","batteryKwh","inverterKw","dailyLoadKwh"]},"from":{"type":"number"},"to":{"type":"number"},"steps":{"type":"integer","minimum":2,"maximum":500}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"grid_search","kind":"act","impl":"imperative","description":"Evaluates a Cartesian product of parameter ranges (fast simulation). Use for multi-dimensional optimisation after 1-D sweeps have narrowed the interesting region. Hard cap 20,000 configs. Returns top 10 ranked by your objective. Shows an approval modal when > 200 configs.","inputSchema":{"type":"object","required":["ranges","objective"],"properties":{"ranges":{"type":"object","description":"Map of paramName → { from, to, steps }","additionalProperties":{"type":"object","required":["from","to","steps"],"properties":{"from":{"type":"number"},"to":{"type":"number"},"steps":{"type":"integer","minimum":2}}}},"objective":{"type":"string","enum":["min_annual_cost","min_payback","max_self_sufficiency"]},"constraints":{"type":"object","properties":{"minSelfSufficiencyPct":{"type":"number","minimum":0,"maximum":100},"maxCapexINR":{"type":"number","minimum":0}}}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"pin_run","kind":"act","impl":"imperative","description":"Pins the current configuration and full-fidelity result under a label. Use this before moving to a different config so you can compare candidates later with compare_runs.","inputSchema":{"type":"object","required":["label"],"properties":{"label":{"type":"string","maxLength":40}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compare_runs","kind":"act","impl":"imperative","description":"Returns a metric-by-metric diff table for the given pinned run labels. Use after pinning several candidate configs to pick the winner.","inputSchema":{"type":"object","required":["labels"],"properties":{"labels":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":10}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"explain_state","kind":"act","impl":"imperative","description":"Returns a plain-language paragraph describing the current configuration, what the numbers mean, and the key tradeoffs. Use this to summarise findings for the user or to sanity-check your understanding before making further changes.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/solaris-xi-olive.vercel.app.svg","apiSurface":"spec","category":"Developer Tools","toolCount":9}}