vibesketch.inputs.recipe

Resolve a recipe’s stages into the calls vibe-qc would run, refusing the rest.

A recipe (vibesketch.document.model.Recipe) is program-neutral. This module spells each stage as the keywords of vibe-qc’s run_job, the way vibesketch.inputs.vibeqc spells a job, so a reviewer sees exactly what a launch would send, and refuses, with the reason, every option the route cannot express (AGENTS.md, ground rule 5): a dispersion correction on the molecular DFT and Hessian routes until vibe-qc propagates it (vibe-qc #548), a functional or basis vibe-qc does not resolve, a MACE run without the operator’s licence acknowledgement, which a recipe never carries. Nothing is translated into a different method.

A recipe runs as QVF job containers (vibesketch.document.campaign), and a container carries only the options vibe-qc can read back from JSON. A stage that needs one it cannot is refused here, at review and compile time, rather than by vibe-qc when the campaign is already running: vibe-qc 0.17.23 has no container encoding for dlpno_ccsd_options (vibeqc._qvf_options._OPAQUE_RECORDS), so a DLPNO stage cannot pin its triples_mode (vibe-qc #558, found by the 2026-10-20 ethene pilot).

The vocabulary comes from vibe-qc’s source: method="mace" with MLIPOptions(model, device, dtype, weight_sha256, accept_academic_license); method="rks" with functional, basis, density_fit, cosx, grid_level, rks_options (conv_tol_energy, conv_tol_grad), optimize with optimizer_backend="ase", fmax and max_opt_steps, and hessian with the finite-difference displacement; method="dlpno-ccsd(t)" with dlpno_thresholds (loose, normal, tight), frozen_core (chemical or all-electron) and dlpno_ccsd_options={"triples_mode": ...}.

Functions

resolve_recipe(recipe, species)

Every stage of recipe resolved per species id, in stage order.

resolve_stage(stage[, species])

stage as vibe-qc's run_job keywords, or the reasons it is refused.

Classes

ResolvedStage(stage, kind, program[, ...])

What one stage of a recipe would run, or why it cannot.

class vibesketch.inputs.recipe.ResolvedStage(stage, kind, program, keywords=<factory>, at_launch=<factory>, checks=<factory>, refusals=<factory>)[source]

Bases: object

What one stage of a recipe would run, or why it cannot.

Parameters:
stage: str
kind: str
program: str
keywords: dict[str, Any]

The run_job keywords, in vibe-qc’s names; empty when refused.

at_launch: dict[str, str]

Settings the operator supplies at launch, never saved in the recipe.

checks: dict[str, Any]

What the stage’s validator checks on the result, in the recipe’s units.

refusals: list[str]
property refused: bool[source]
to_dict()[source]
Return type:

dict[str, Any]

vibesketch.inputs.recipe.resolve_recipe(recipe, species)[source]

Every stage of recipe resolved per species id, in stage order.

Parameters:
Return type:

dict[str, list[ResolvedStage]]

vibesketch.inputs.recipe.resolve_stage(stage, species=None)[source]

stage as vibe-qc’s run_job keywords, or the reasons it is refused.

species adds the charge and multiplicity vibe-qc’s Molecule takes; a species with an unpaired electron makes the Kohn-Sham route uks.

Parameters:
  • stage (Stage)

  • species (Species | None)

Return type:

ResolvedStage