Experimental¶
solvi.experimental holds pieces that work and are tested but have not yet shown a measured gain, or a measured use,
of the kind the rest of solvi promises. Their API may change in any release. Each one either graduates or is removed by
1.2 (two minor releases after 1.0).
from solvi.experimental import STATUS
STATUS["lora"] # {"since": "0.7", "what": "...", "missing": "...", "script": None, "deadline": "1.2"}
How you can tell you are using one:
- importing it warns once with a
solvi.ExperimentalWarning(aUserWarning; silence it withwarnings.filterwarnings("ignore", category=solvi.ExperimentalWarning)); - a decision made by a System that uses one records it in the stored decision (
meta["experimental"], e.g.["lora"]), andsolvi report --overviewcounts those decisions; - nothing stable imports them, and
solvidoes not re-export them. Two commands load one when you ask for it:solvi hook(hooks) andsolvi serve --guard --upstream(mcp).
Graduating needs a bar fixed before the measurement, a script in benchmarks/ that measures it, the bar met and
independently reviewed, no import of anything experimental, a conformance check, and a docs move; the old path then
keeps working for one release. Removal: a piece that has not graduated by its deadline, or that measures negative,
is removed and the negative result published.
Each section below gives the piece's STATUS entry: what it is, since when it exists, what it is missing to graduate,
the script that measures it (none yet for any of them) and where the guide describes it.
learning¶
The learning loop: trusted labels → a ladder of updates → gates → promote or roll back
(solvi.experimental.learning.Learning(system, store); was system.learning(...) before 1.0). Since 0.7.
- Missing: a simulation on real data that decides the default gates; the gate's holdout must come from the audit, and a rollback during a drift flag must hold.
- Script: none yet. Deadline: 1.2.
- Guide: Learning from corrections with gates and rollback; API: solvi.experimental.learning.
lora¶
A LoRA adapter on the decider for one question (solvi.experimental.lora.adapt_lora(part, examples); was
part.adapt_lora(...); needs solvi[lora]). Since 0.7.
- Missing: a decision on real use, a benchmark script in the repo, and wiring as the learning loop's adapter step; measured gains over fit come with overconfidence.
- Script: none yet. Deadline: 1.2.
- Guide: A LoRA adapter per question; API: solvi.experimental.lora.
compile¶
A written specification compiled by an LLM into catalog parts, accepted when two drafts agree and the specification's
tests pass (with its sandbox, solvi.experimental.compile.sandbox). Since 0.9.
- Missing: acceptance on larger specifications and a benchmark script in benchmarks/.
- Script: none yet. Deadline: 1.2.
- Guide: A specification compiled into the catalog; API: solvi.experimental.compile, sandbox.
hooks¶
solvi hook: a coding agent's pre-edit rule checks and skill picker (Claude Code; Codex built from its documented
hook schema). Since 0.7.1.
- Missing: false deny and ask rates on real coding-agent sessions, with a script.
- Script: none yet. Deadline: 1.2.
- Guide: solvi behind a coding agent's hooks;
API: solvi.experimental.hooks; runnable:
examples/22_coding_agent_hooks.py.
specialist¶
The propose → check → render specialist pattern. Since 0.7.
- Missing: a measured specialist (charts has no accuracy number yet).
- Script: none yet. Deadline: 1.2.
- API: solvi.experimental.specialist.
charts¶
Verified charts: every number quoted from the text, a deterministic SVG. Since 0.7.
- Missing: accuracy on real texts with the rule-based and the LLM proposer.
- Script: none yet. Deadline: 1.2.
- Guide: Verified charts;
API: solvi.experimental.charts; runnable:
examples/21_verified_chart.py.
mcp¶
An MCP stdio proxy that puts the agent guard in front of tools/call (solvi serve --guard --upstream). Since 0.9.
- Missing: a measured run through the proxy against a real MCP server.
- Script: none yet. Deadline: 1.2.
- Guide: An MCP proxy; API: solvi.solutions.guard (the proxy is rendered there).
oncalib¶
Recalibrating a guarantee on the fly from outcomes, every N labels or after a drift flag. Since 1.0.
- Missing: a recalibration that keeps the guarantee's promise (it does not: see its module docs).
- Script: none yet. Deadline: 1.2.
- Guide: Outcomes as labels; API: solvi.experimental.oncalib. The stable path recalibrates explicitly, on a schedule or after a drift flag.
counterfactual¶
The smallest change of a decision's inputs that changes its answer (adverse-action reasons;
solvi.experimental.counterfactual.search(res, question), was res.counterfactual(...)). Since 0.7.
- Missing: one measured use, e.g. adverse-action reasons on the credit gallery task.
- Script: none yet. Deadline: 1.2.
- Guide: Counterfactual explanations; API: solvi.experimental.counterfactual.
Tried and left out¶
Some ideas were measured and did not make it into solvi, experimental or not; the changelog lists them with what was measured.