v0.37.0
[v0.37.0] - 2026-07-04
Highlights
PipeParallelalways combines — and every run has a main output — A parallel now always combines its branch outputs into its declaredoutputconcept (with the newnative.Compositeconcept as the ready-made combination vehicle), thecombined_outputfield is deleted from the MTHDS language, and the main-stuff invariant is enforced end to end: every completed pipe run delivers amain_stuff, so downstream surfaces (delivery, graph tracing, telemetry, wire models) can rely on it unconditionally.- Portable, statically validated image generation — A new portable
sizeparameter ("1k"/"2k"/"4k"tiers or exact pixel dimensions) carries the same size intent across providers, Gemini models gain image-to-image editing and extreme banner aspect ratios, and Google image models are now validated against declarative geometry rules at blueprint-load time — unsatisfiable requests fail fast instead of at the provider call.
Added
- Portable image size (
size) forPipeImgGen: Newsizeparameter accepting portable tiers ("1k","2k","4k") or exact pixel dimensions (e.g."2048x1152"). A tier means "this pixel class at my chosenaspect_ratio", mapped to each provider's own grid; an exact size is deterministic (declaringaspect_ratioalongside it is a validation error). Unsatisfiable requests fail as hard validation errors at blueprint-load time, never warn-and-ignore. Whensizeis unset, no size intent is sent and the provider default applies. The MTHDS JSON Schema exposes the field, and an optionalsizedefault is supported in[cogt.img_gen_config.img_gen_param_defaults]. native.Compositeconcept: New native concept backed byCompositeContent— an untyped, named composition holding sub-contents as top-level fields, serving as the default combination vehicle for parallel branches. Supports the full content surface:smart_dump, kajson/transport round-trip, and markdown/HTML rendering.- Gemini image-to-image (img2img) support: The Google img-gen worker now forwards input images to the Gemini API as inline parts, enabling image editing and multi-image composition for the
nano-bananamodels (including the newnano-banana-2-lite). Every img-gen worker now validates input images against the model's declared capability at job start, rejecting img2img on unsupported models with a cleanImgGenParameterErrorbefore any provider call. - Banner aspect ratios: Support for extreme banner formats (
landscape_4_1,landscape_8_1,portrait_1_4,portrait_1_8) from Gemini 3.1 image models. All other image-gen backends reject them with a clean parameter error. - Static validation for Google image models: Google image models now use
rulesblocks (geometry taxonomies likegemini_3_flash) in the backend deck, catching unsupported aspect-ratio and size combinations at blueprint-load time. The Google img-gen factory is keyed by taxonomy instead of hardcoded model names (Breaking: theGoogleImageGenModelname enum is removed — model handles are deck config, not code constants).
Changed
PipeParallelalways combines (Breaking): APipeParallelcontroller now always combines its branch outputs into its declaredoutputconcept and stamps it as the main output. The declaredoutputis strictly validated at author time and must beCompositeor a structured concept whose fields and types match the branchresultnames. Combination replaces the removedcombined_outputfield. Migration: pipes declaring both fields just drop thecombined_outputline;add_each_output-only pipes replace their placeholderoutputwithCompositeor a matching structured concept.add_each_outputkeeps its meaning and now defaults tofalse.- Main-stuff invariant enforced (Breaking): Every pipe run now guarantees a
main_stuff; defensive "maybe there is no main stuff" branches are removed, wire models make the field required (main_stuff_name: stronPipelexPipeRunOutputand the/executeresponse extension), andPipeOutput.optional_main_stuffis replaced byPipeOutput.main_stuff. - Orchestrator SPI delivery split (Breaking):
OrchestratorProtocol.runis now strictly the blocking arm (returning a completedPipelexPipeRunOutput). A newOrchestratorProtocol.starthandles fire-and-forget, returning aPipelexPipeDispatchAck(IDs only).PipelexPipeRunOutput.is_completedis deleted — it is always a completed output now. LLMWorkerInternalAbstractfolded (Breaking): Removed and folded intoLLMWorkerAbstract, which now owns the whole job lifecycle (capability checks, constraints, telemetry). Subclasses extendLLMWorkerAbstractdirectly and implement_gen_text/_gen_object, nothing else.- Type preservation across transport:
Compositecomponents (and their nested lists) now retain strict types across transport boundaries (dump_for_transport/ hydration) via private class markers. PipeParallelhonorsfinal_stuff_code: A requested final stuff code (e.g. from aPipeBatch) is now correctly stamped on the parallel's combined output.- Docs — inference plugins: Rewrote
using-inference-plugins.mdto demonstrate a genuinepipelex.pluginsentry-point package instead of a legacy config workaround. - Linting pipeline (repo-local): in the pipelex repo itself,
plxt lintnow validates.mthdsfiles against the locally generated schema (derived/mthds_schema.json) rather than the released schema bundled withplxt. This is a.pipelex/plxt.tomloverride for this repo only — theplxt.tomltemplate distributed bypipelex init configis unchanged. - Dry-run mocks: Reduced the default dry-run mock list generation from 3 items to 2 to cut dry-run processing time.
- Bumped
mthdsdependency from>=0.6.0to>=0.7.0.
Fixed
PipeConditionpass-through failure: Acontinueoutcome with no pre-existing main stuff now fails loudly and actionably at the pipe level instead of crashing downstream surfaces.- Stale main stuff in parallels: A pipeline ending in an
add_each_output-onlyPipeParallelno longer silently reports the previous step's output as its main result. add_each_outputoptional in the builder spec:PipeParallelSpecnow defaultsadd_each_outputtofalselike the blueprint does, so a generated always-combine spec with justbranchesandoutputno longer fails validation beforeto_blueprint().- Google img-gen size handling: The native Google worker and gateway path now send the requested
image_sizeto the Gemini API instead of hardcoding"1K", making 2K/4K generation reachable. - Img2img support checks: The capability check now keys off the model's declared
inputsrather than requiring aninput_imagesrule, which had falsely reported Gemini models as unsupported. - Routing profile optional routes:
optional_routesdeclared inrouting_profiles.tomlare no longer silently dropped by the factory. - Unknown boot orchestrator fails loud: Requesting a boot orchestrator no installed plugin provides — via
--orchestrator <name>orPipelex.make(boot_orchestrator=...)— now raisesUnknownBootOrchestratorErrorat boot instead of silently falling back to in-process execution. - Failed boot no longer leaks process-global state: A
Pipelex.makethat raises during setup now releases the process-global singletons a partial boot acquired (config, logging, the kajson class registry, template registries), so a failed boot no longer poisons a subsequent boot in the same process. - HuggingFace streaming errors: The provider error-body reader now safely tolerates unread
httpxstreaming responses without crashing withhttpx.ResponseNotRead.
Removed
combined_outputfield (Breaking): Removed from the MTHDS language forPipeParallel; pipes now declare their combination target directly in theoutputfield.- Legacy external plugin setter (Breaking): Removed
set_llm_worker_from_external_pluginfrom the inference manager, fully replaced by thepipelex.pluginsentry point.
Security
- Transformers vulnerability: Bumped
transformerspast CVE-2026-4372 (GHSA-29pf-2h5f-8g72) to resolve a high-severity RCE. To unblock this, thehuggingfaceextra now requireshuggingface_hub>=1.5.0,<2.0.0(Breaking).
What's Changed
- Feature/img2 img with gpt image by @lchoquel in #1012
- Fix/dry run array change 3 to 2 by @thomashebrard in #1017
- PipeParallel always combines: required main stuff invariant (delete combined_output, add native.Composite) by @lchoquel in #1014
- Feature/more plugins by @lchoquel in #1015
- Fix CVE-2026-4372: bump transformers past 5.3.0 via huggingface_hub 1.x by @lchoquel in #1013
- Release v0.37.0 by @lchoquel in #1020
Full Changelog: v0.36.0...v0.37.0