nc://storm

v0.1.0Pinned
ThomSharktools/nodecode-storm: Fans one question across a multi-seat panel of models, then a judge synthesizes the reports. - a rewrite of bmtrnavsky/storm-fusion-research-pipeline (MIT), credited to bmtrnavsky9e3ada9· 9 Nov1 commit
test1 filecell.lisp18.4 KB

nodecode-storm

Storm Panel Research: one question fanned out across a panel of model seats, then a judge synthesizes the seat reports. A Nodecode rewrite of bmtrnavsky/storm-fusion-research-pipeline by bmtrnavsky.

The method is an adaptation of Stanford's STORM (Shao et al., NAACL 2024): discover the viewpoints a question deserves, answer it from each one, ground the claims, synthesize. The panel adds the part a single answer cannot have: the judge recommends, and the human decides.

Get it

Tell the agent "add the storm cell", or run nodecode add nc://storm.

Set it up

Nothing is required: with no section at all every seat, and the judge, run on the session's own model. To make a lineup the default, put the section in ~/.nodecode/config.jsonc:

"storm": {
  "lineup": ["alpha/model-a", "beta/model-b"],  // models every seat answers on; empty = the session's own
  "judge": "gamma/model-c",                      // the judge's model; empty = the session's own
  "max_tokens": 4000                             // one side call's ceiling, at least 256
}

/settings and the page's Settings tab write the same section. A model is provider/model as /models lists the lane, or a bare model on the session's own provider.

Use it

The model calls the tool, or you ask in words — "run a panel on whether we ship Friday with an operations seat and a support seat":

{"topic": "Should we ship on Friday?",
 "seats": [{"name": "operations", "brief": "the deploy window, the rollback",
            "questions": ["Is the window open?", "Who is awake at 18:00?"]},
           {"name": "support", "brief": "the on-call queue"}],
 "lineup": ["alpha/model-a", "beta/model-b"],
 "judge": "gamma/model-c"}

Every seat answers on every model in the lineup — two seats on two models is four reports — and one judge call reads all of them. The answer is one JSON object:

{"success": true,
 "panel": {"seat_reports": [{"seat": "operations", "model": "alpha/model-a",
                             "findings": "..."}],
           "synthesis": "consensus, then the contradictions and their weights...",
           "contradictions": [{"claim": "...", "seats_for": ["operations"],
                               "seats_against": ["support"], "weight": "..."}],
           "unresolved": ["..."]},
 "calls": [{"seat": "operations", "model": "alpha/model-a"}]}

Through eval the same round is (storm:panel "topic" '((:name "operations" :brief "the deploy window"))), and (help :storm) answers the method. A run that fails answers {"success": false, "error", "hint"}: the hint names what to check, and nothing was swapped in for the model that failed — the panel never silently substitutes a brain.

/storm shows the lineup the next round runs on; the row runs /storm status, which asks no model. Caps: 12 seats, 4 lineup slots, as the panel spec sets them.

What it does not do

Nested fanout through a mixture-of-agents preset, a per-call temperature and a token-usage report: the host's side call takes a completion ceiling and no temperature, and answers text with no usage, so the rewrite drops both. See NOTICE.

Run .github/test-cell.sh tools/nodecode-storm from the cells repository.

Add nc://storm

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at 9e3ada9.

    $ nodecode add nc://storm

    Or tell the agent add the storm cell.