GITTModel for diffusion-only fits, model downloads for pybamm-only users, full app-URL helpers, and clearer configuration error messages
GITTModel — a first-class diffusion-only model
GITTModel and HalfCellGITTModel are now first-class models in
ionworkspipeline (with matching ionworks_schema siblings). GITT
fits overwhelmingly use the same lightweight model rather than SPMe:
x-averaged particle diffusion per electrode, a single lumped ohmic
resistance, fixed OCPs, and no Butler-Volmer kinetics, electrolyte
dynamics, or thermal effects. Shipping it as a built-in model unblocks
server-side GITT fits and backs the new half-cell GITT fit template.Download ionworks-defined models for plain pybamm
Users who have onlyionworks-schema / ionworks-api — and not the
licensed ionworkspipeline package — can now obtain ionworks-defined
models (ECM, LumpedSPMR, the MSMR models, GITTModel) in a form
they can load and run with plain pybamm. A new endpoint builds the
model server-side (where the license lives) and returns a loadable
serialisation, exposed through the Python SDK.App-URL helpers for every routed resource
The SDK’sclient.urls grew from a single .measurement() method to
a full set of web-app link builders — project, model,
parameterized_model, optimization, pipeline, study,
simulation, cell_specification, cell_instance, and more — so
callers never hand-construct app.ionworks.com URLs from IDs. The
helpers are environment-aware, deriving the right host for whichever
API environment the client is configured against.Stricter, clearer pipeline configuration
Most user-driven errors inionworkspipeline now raise a clear
configuration error instead of a generic one, so configuration
mistakes — wrong field types, out-of-range values, missing keys — are
routed to a clear Configuration error for the user instead of
being treated as an internal error. Optimizer configuration is now
also validated up front: passing options meant for a different
optimizer now hard-errors at submission time instead of being silently
ignored.Pipeline
Pipeline
Improvements
- Objective- and variable-level cost scoping is now driven by a single source of truth mapping each objective to the variables it should compute. This lets a weighted Wasserstein cost (position-shifting dQ/dV) and a per-variable SSE cost be combined over one objective, with each cost explicitly scoped to the variables it should consume. Electrode balancing gained an option to emit dQ/dV on the model’s own full-window voltage axis so a weighted Wasserstein comparison can align peaks in voltage rather than on the data grid.
- Strict optimizer-option validation: unknown optimizer option keys (and method/option mismatches) are rejected at submission time, and unknown constructor options are rejected at runtime with an actionable message — the previous behaviour silently ignored them. The typed option wrappers for each supported optimizer (CMA-ES, PSO, Differential Evolution, XNES, Bayesian Optimization, SOBER, TuRBO) remain the recommended way to pass options.
- Failure handling across the fitting and design-optimization paths is now unified onto a single constant, so the two paths can no longer drift apart and failures are better-conditioned for surrogate-based fits.
- ECM coulomb-count capacity reference is now computed per segment. Multi-measurement fits previously accumulated the cumulative integral across concatenated segment boundaries, inflating the capacity estimate to roughly the sum of per-segment throughputs and triggering spurious capacity-sanity-check warnings.
- A custom
geometrywith symbolic bounds is now correctly restored before the simulation is built, instead of arriving in a form that choked the solver. - Custom models now correctly honour their serialised mesh and geometry settings, instead of having them silently rebuilt from defaults.
Python API
Python API
Improvements
client.model.download/serialize(introduced above) return ionworks-defined models in a plain-pybamm-loadable form.client.urls(introduced above) now builds links for every routed resource, environment-aware.