Skip to content

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 (a UserWarning; silence it with warnings.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"]), and solvi report --overview counts those decisions;
  • nothing stable imports them, and solvi does not re-export them. Two commands load one when you ask for it: solvi hook (hooks) and solvi 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.

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.

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.

specialist

The propose → check → render specialist pattern. Since 0.7.

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.

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.