Skip to content

v0.37.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 15:19
04434f7

[v0.37.0] - 2026-07-04

Highlights

  • PipeParallel always combines — and every run has a main output — A parallel now always combines its branch outputs into its declared output concept (with the new native.Composite concept as the ready-made combination vehicle), the combined_output field is deleted from the MTHDS language, and the main-stuff invariant is enforced end to end: every completed pipe run delivers a main_stuff, so downstream surfaces (delivery, graph tracing, telemetry, wire models) can rely on it unconditionally.
  • Portable, statically validated image generation — A new portable size parameter ("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) for PipeImgGen: New size parameter accepting portable tiers ("1k", "2k", "4k") or exact pixel dimensions (e.g. "2048x1152"). A tier means "this pixel class at my chosen aspect_ratio", mapped to each provider's own grid; an exact size is deterministic (declaring aspect_ratio alongside it is a validation error). Unsatisfiable requests fail as hard validation errors at blueprint-load time, never warn-and-ignore. When size is unset, no size intent is sent and the provider default applies. The MTHDS JSON Schema exposes the field, and an optional size default is supported in [cogt.img_gen_config.img_gen_param_defaults].
  • native.Composite concept: New native concept backed by CompositeContent — 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-banana models (including the new nano-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 clean ImgGenParameterError before 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 rules blocks (geometry taxonomies like gemini_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: the GoogleImageGenModel name enum is removed — model handles are deck config, not code constants).

Changed

  • PipeParallel always combines (Breaking): A PipeParallel controller now always combines its branch outputs into its declared output concept and stamps it as the main output. The declared output is strictly validated at author time and must be Composite or a structured concept whose fields and types match the branch result names. Combination replaces the removed combined_output field. Migration: pipes declaring both fields just drop the combined_output line; add_each_output-only pipes replace their placeholder output with Composite or a matching structured concept. add_each_output keeps its meaning and now defaults to false.
  • 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: str on PipelexPipeRunOutput and the /execute response extension), and PipeOutput.optional_main_stuff is replaced by PipeOutput.main_stuff.
  • Orchestrator SPI delivery split (Breaking): OrchestratorProtocol.run is now strictly the blocking arm (returning a completed PipelexPipeRunOutput). A new OrchestratorProtocol.start handles fire-and-forget, returning a PipelexPipeDispatchAck (IDs only). PipelexPipeRunOutput.is_completed is deleted — it is always a completed output now.
  • LLMWorkerInternalAbstract folded (Breaking): Removed and folded into LLMWorkerAbstract, which now owns the whole job lifecycle (capability checks, constraints, telemetry). Subclasses extend LLMWorkerAbstract directly and implement _gen_text/_gen_object, nothing else.
  • Type preservation across transport: Composite components (and their nested lists) now retain strict types across transport boundaries (dump_for_transport / hydration) via private class markers.
  • PipeParallel honors final_stuff_code: A requested final stuff code (e.g. from a PipeBatch) is now correctly stamped on the parallel's combined output.
  • Docs — inference plugins: Rewrote using-inference-plugins.md to demonstrate a genuine pipelex.plugins entry-point package instead of a legacy config workaround.
  • Linting pipeline (repo-local): in the pipelex repo itself, plxt lint now validates .mthds files against the locally generated schema (derived/mthds_schema.json) rather than the released schema bundled with plxt. This is a .pipelex/plxt.toml override for this repo only — the plxt.toml template distributed by pipelex init config is unchanged.
  • Dry-run mocks: Reduced the default dry-run mock list generation from 3 items to 2 to cut dry-run processing time.
  • Bumped mthds dependency from >=0.6.0 to >=0.7.0.

Fixed

  • PipeCondition pass-through failure: A continue outcome 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-only PipeParallel no longer silently reports the previous step's output as its main result.
  • add_each_output optional in the builder spec: PipeParallelSpec now defaults add_each_output to false like the blueprint does, so a generated always-combine spec with just branches and output no longer fails validation before to_blueprint().
  • Google img-gen size handling: The native Google worker and gateway path now send the requested image_size to 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 inputs rather than requiring an input_images rule, which had falsely reported Gemini models as unsupported.
  • Routing profile optional routes: optional_routes declared in routing_profiles.toml are no longer silently dropped by the factory.
  • Unknown boot orchestrator fails loud: Requesting a boot orchestrator no installed plugin provides — via --orchestrator <name> or Pipelex.make(boot_orchestrator=...) — now raises UnknownBootOrchestratorError at boot instead of silently falling back to in-process execution.
  • Failed boot no longer leaks process-global state: A Pipelex.make that 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 httpx streaming responses without crashing with httpx.ResponseNotRead.

Removed

  • combined_output field (Breaking): Removed from the MTHDS language for PipeParallel; pipes now declare their combination target directly in the output field.
  • Legacy external plugin setter (Breaking): Removed set_llm_worker_from_external_plugin from the inference manager, fully replaced by the pipelex.plugins entry point.

Security

  • Transformers vulnerability: Bumped transformers past CVE-2026-4372 (GHSA-29pf-2h5f-8g72) to resolve a high-severity RCE. To unblock this, the huggingface extra now requires huggingface_hub>=1.5.0,<2.0.0 (Breaking).

What's Changed

Full Changelog: v0.36.0...v0.37.0