v0.42.0 — Your Box, Your Default
Born on real hardware: deploying to an NVIDIA DGX Spark exposed how much of the local-first story assumed bare metal. 0.41.1 made Spark Mode work in Docker, 0.41.2 made discovery find your local models - 0.42.0 lets you make one of them the default and generates workflows with it.
Added
Default model picker. New workflow_default_model setting: steps without an explicit model: use it instead of the built-in default. Pick it in the onboarding wizard - detected local providers now list their models (Ollama tags, vLLM/NIM served ids) - or set it via PATCH /api/settings. Values are validated against the model registry at write time (UNKNOWN_MODEL on typos), persisted to the DB, restored at startup. Empty string clears it.
Any Ollama model, first-class. ollama/<tag> resolves dynamically like nim/<id> always has - any locally pulled model at $0/run, region local, same injection-safe character discipline. Base URLs honour OLLAMA_HOST everywhere.
Workflow generation on local models. The "describe it in plain English" generator no longer demands a cloud API key on a box that runs local models. Provider resolution picks, in order: SANDCASTLE_ADVISOR_PROVIDER, any cloud provider with a configured key, the local provider named by workflow_default_model, and on a Spark a reachable local NIM/vLLM. Verified end-to-end on GB10 hardware: full workflow YAML generated by a local vLLM, zero cloud keys.
/health/providers models list - reachable local providers return their model names; that is what the wizard picker renders.
Changed
- Bare-default resolution order:
workflow_default_model(when set) -> Spark NIM autoroute (when applicable) ->sonnet. Explicitmodel: sonnetcounts as the bare default - the same convention the Spark autoroute has used since 0.33. Explicit non-default models are never rewritten. - The onboarding wizard keeps cloud API key entry visible alongside detected local providers (was either/or).
pip install sandcastle-ai==0.42.0