Skip to content

Release v0.25.0#842

Merged
lchoquel merged 3 commits into
mainfrom
release/v0.25.0
Apr 28, 2026
Merged

Release v0.25.0#842
lchoquel merged 3 commits into
mainfrom
release/v0.25.0

Conversation

@lchoquel
Copy link
Copy Markdown
Member

@lchoquel lchoquel commented Apr 28, 2026

Release v0.25.0

Bumps version from 0.24.1 to 0.25.0.

Changelog

Added

  • GPT-5.5 model support. New gpt-5.5 entry on the openai, azure_openai and gateway backends.

  • gpt-image-2 image generation (OpenAI). New model entry with img-gen routing and constraints on openai, azure_openai.

Fixed

  • PDF input declared on Azure OpenAI and gateway for the GPT-5.4 series. gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.4-pro (and gpt-5.5) now advertise pdf in their inputs on azure_openai and the gateway, matching the existing OpenAI direct entries. Verified end-to-end with live document tests against both backends.

Changed

  • Img-gen taxonomies aligned for gpt-image-2. Convention: gpt_image for taxonomies/values shared across all OpenAI GPT Image models (legacy + gpt-image-2); gpt_image_legacy when the value applies only to gpt-image-1/-1-mini/-1.5 (gpt-image-2 uses unavailable where a legacy-only option does not apply). Renames:

    • AspectRatioTaxonomy.OPENAI_GPT_IMAGE_LEGACYGPT_IMAGE_LEGACY (value "openai_gpt_image_legacy""gpt_image_legacy")
    • AspectRatioTaxonomy.OPENAI_GPT_IMAGE_2GPT_IMAGE_2 (value "openai_gpt_image_2""gpt_image_2")
    • OutputFormatTaxonomy.GPTGPT_IMAGE_LEGACY (value "gpt""gpt_image_legacy")
    • OutputCompressionTaxonomy.GPT_IMAGEGPT_IMAGE_LEGACY (value "gpt_image""gpt_image_legacy")
    • InputFidelityTaxonomy.OPENAI_IMAGEGPT_IMAGE_LEGACY (value "openai_image""gpt_image_legacy")
    • NumImagesTaxonomy.GPTGPT_IMAGE (value "gpt""gpt_image")
    • InferenceTaxonomy.GPTGPT_IMAGE (value "gpt""gpt_image")
    • Removed dead AspectRatioTaxonomy.GPT.
    • InputImagesTaxonomy.GPT_IMAGE unchanged (already correct — shared across legacy and gpt-image-2).
  • HuggingFace and Fal img-gen workers honor model_choice rule. huggingface_img_gen and fal workers now pop "model" from args_dict instead of hardcoding inference_model.model_id, mirroring how prompt is already extracted. The model_choice = "model_id" rule is now required on every model under these backends; missing it raises ImgGenParameterError at call time. Rules added to qwen-image (HF) and to all Fal models (flux-pro, flux-pro/v1.1, flux-pro/v1.1-ultra, flux-2, fast-lightning-sdxl).


Summary by cubic

Release v0.25.0 adds gpt-5.5 and gpt-image-2, aligns image‑gen rules, and fixes PDF input support on azure_openai and the gateway. It also adds parameter support checks and polishes img‑gen workers.

  • New Features

    • Added gpt-5.5 across openai, azure_openai, and the gateway.
    • Added gpt-image-2 with routing and constraints; best-gpt now points to gpt-image-2.
    • Introduced ImgGenParamSupport and static PipeImgGen validation; expanded unit, integration, and e2e tests.
  • Bug Fixes

    • Declared pdf input for the GPT‑5.4 series and gpt-5.5 on azure_openai and the gateway.
    • Enforced model_choice and unified img‑gen taxonomies (gpt_image/gpt_image_legacy) to prevent wrong model selection on openai, fal, and huggingface.
    • Improved img‑gen workers: captured Azure token usage with correct zero‑token handling and longer timeout; standardized error messages using model name; removed sensitive debug logs; refreshed gateway model docs (including Gemini renames) and updated remote config.

Written for commit a549a29. Summary will update on new commits. Review in cubic

lchoquel and others added 2 commits April 28, 2026 15:46
* Add gpt-image-2 model and per-model background rule

- Add gpt-image-2 to OpenAI direct and Azure OpenAI backends with
  background = "unavailable" rule (model rejects transparent bg)
- Generalize BackgroundTaxonomy: GPT -> AVAILABLE / UNAVAILABLE
- Refactor OpenAI img-gen worker to consult rules; defaults to
  AVAILABLE for models without a rules table so gpt-image-1 family
  keeps transparent support unchanged
- Update Azure rules tables for gpt-image-1 family to "available"
- Refresh auto-generated gateway model docs (gemini 3.x renames)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Expand img-gen refactor plan in TODOS, wire gpt-image-2 rules

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Refactor image generation parameters to unify defaults and enhance compatibility

- Set `quality` default to `medium` for OpenAI direct image generation, aligning with Azure OpenAI.
- Introduce `output_compression` parameter for OpenAI models, defaulting to `100` for JPEG/WEBP outputs.
- Update TOML configuration files for both OpenAI and Azure backends to include `output_compression`.
- Modify `ImgGenArgsFactory` to handle new output compression logic and ensure compatibility with existing models.
- Enhance unit tests to cover new defaults and parameter handling, ensuring robust functionality across image generation workflows.

* Unify img-gen taxonomy naming on `gpt_image` / `gpt_image_legacy`

Convention: `gpt_image` for taxonomies/values shared across all OpenAI GPT
Image models (legacy + gpt-image-2); `gpt_image_legacy` when the value
applies only to gpt-image-1/-1-mini/-1.5 (gpt-image-2 = `unavailable`).
Local backend TOMLs and the remote Pipelex Gateway config updated in
lockstep.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Capture img-gen token usage and extend Azure timeout

- Parse usage tokens from Azure img gen response into job report
- Bump Azure img gen HTTP timeout to 600s for slow gpt-image-2 calls
- Pass model name in gateway img gen args; add debug logging
- Drop hardcoded gpt-image-2 model_id to use deck default
- Simplify img_gen test fixtures and prompt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Rename ModelName taxonomy to ModelChoice with model_id/model_name arms

- Rename ImgGenArgTopic.MODEL_NAME → MODEL_CHOICE; ModelNameTaxonomy → ModelChoiceTaxonomy
- Replace STANDARD arm with MODEL_ID (passes model_id) and MODEL_NAME (passes model name)
- Thread model_name through ImgGenArgsFactory and all img-gen workers (Azure, OpenAI, Gateway, Fal, HuggingFace)
- Drop now-redundant model_choice rule from legacy gpt-image-* entries (default behavior)
- Gateway worker no longer overrides args_dict["model"] — driven by rules instead
- Refresh gateway model docs to include gpt-image-2
- Update unit tests for the new taxonomy and model_name plumbing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Add gpt-5.5 and declare PDF input on Azure/gateway for gpt-5.4 series

Adds gpt-5.5 (Azure deployment gpt-5.5-2026-04-24, fixed_temperature=1)
on openai, azure_openai, and the gateway. Live LLM inference verified on
all three backends.

Also declares pdf in inputs for gpt-5.4, gpt-5.4-mini, gpt-5.4-nano,
gpt-5.4-pro, and gpt-5.5 on azure_openai and the gateway, matching the
existing OpenAI direct entries. PDF capability verified end-to-end with
TestLLMDocument (path + URL) on all three backends.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* changelog

* cleanup TODO

* Fix img-gen model arg via model_choice rule on OpenAI/HF/Fal

OpenAI img-gen was silently falling back to DALL-E 2: rules omitted
model_choice, so args_dict reached images.generate() without "model".
HF and Fal workers hardcoded inference_model.model_id and ignored
the rule entirely.

- Declare `model_choice = "model_id"` on OpenAI gpt-image-* rules,
  HF qwen-image, and all 5 Fal models — in both kit configs and
  the .pipelex/ project overrides.
- HF and Fal workers now pop "model" from args_dict (mirroring
  prompt) and raise ImgGenParameterError if missing.
- Auto-regenerated gateway model docs reflect PDF inputs on the
  gpt-5.4 series and gpt-5.5.

Verified live against fal/fast-lightning-sdxl,
huggingface/qwen-image, google/nano-banana.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Validate positive dimensions for OpenAI img-gen sizes

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Forward model_name (not model_id) to img-gen arg factories

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Update test to assert model_name in img-gen error message

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Apr 28, 2026

Greptile Summary

  • Adds gpt-image-2 and gpt-5.5 model support across OpenAI, Azure OpenAI, and gateway backends, with a unified ImgGenArgsFactory-based args pipeline replacing per-worker hardcoded logic.
  • Introduces ImgGenParamSupport for load-time blueprint validation, renames img-gen taxonomies to gpt_image_legacy/gpt_image convention, and enforces model_choice rules on Fal and HuggingFace workers.
  • The best-gpt alias is promoted from gpt-image-1.5 to gpt-image-2; callers relying on transparent background, output_format, or input_fidelity via this alias will now get ImgGenParameterError at runtime.

Confidence Score: 4/5

Safe to merge; only P2 style/logic findings, core paths look correct

No P0/P1 findings. Two P2 issues: an error message uses model_id instead of model_name, and an or-based token extraction can silently swap token categories on a zero count. Neither affects the happy path.

pipelex/plugins/azure_rest/azure_img_gen_worker.py (token extraction logic), pipelex/cogt/img_gen/img_gen_args_factory.py (error message variable)

Important Files Changed

Filename Overview
pipelex/cogt/img_gen/img_gen_args_factory.py Adds model_name parameter to make_args_for_model, new INPUT_IMAGES/INPUT_FIDELITY topic handlers, and model_choice taxonomy routing; one minor error message inconsistency (model_id vs model_name)
pipelex/plugins/openai/openai_img_gen_worker.py Migrates to unified ImgGenArgsFactory, adds images.edit routing for input-image requests, robust size/format fallback detection, and multipart conversion helper; looks correct
pipelex/plugins/openai/openai_img_gen_factory.py Refactored to support both legacy GPT Image and gpt-image-2 size validation; comprehensive constraint checks for gpt-image-2 dimensions
pipelex/plugins/azure_rest/azure_img_gen_worker.py Adds model_name pass-through, timeout bump to 600s, and usage token extraction; minor logical issue with or for zero-valued token counts
pipelex/cogt/img_gen/img_gen_param_support.py New capability-check module reusing factory as single truth source; clean NamedTuple approach with abstain-on-unknown-taxonomy policy
pipelex/pipe_operators/img_gen/pipe_img_gen.py New _validate_param_support_against_model_rules hook wired into static validation; gracefully skips unresolvable choices
pipelex/kit/configs/inference/backends/openai.toml Adds gpt-5.5, gpt-image-2 (and dated snapshot), rules for all gpt-image models including model_choice; looks complete
pipelex/kit/configs/inference/backends/azure_openai.toml PDF input added to GPT-5.4 series, gpt-5.5 added, taxonomy renames applied to all gpt-image models; gpt-image-2 added with correct unavailable rules for output_format/compression/input_fidelity

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[OpenAIImgGenWorker._gen_image_list] --> B[ImgGenArgsFactory.make_args_for_model]
    B --> C{model_rules loop}
    C --> D[model_choice → model key]
    C --> E[aspect_ratio → size string]
    C --> F[inference → quality/steps]
    C --> G[input_images → image data URLs]
    C --> H[output_format / compression]
    B --> I[args_dict]
    I --> J{image key present?}
    J -- yes --> K[_convert_image_data_urls_for_openai_sdk]
    K --> L[images.edit **args_dict]
    J -- no --> M[images.generate **args_dict]
    L --> N[ImagesResponse]
    M --> N
    N --> O{response.size?}
    O -- yes --> P[parse WxH from response]
    O -- no --> Q[_get_requested_size from args_dict]
    Q --> P
    N --> R{response.output_format?}
    R -- yes --> S[use reported format]
    R -- no --> T[detect from bytes]
    T --> S
    P --> U[GeneratedImageRawDetails]
    S --> U
Loading
Prompt To Fix All With AI
This is a comment left during a code review.
Path: pipelex/cogt/img_gen/img_gen_args_factory.py
Line: 192

Comment:
**Inconsistent variable in error message**

`model_id` is used here while all other error messages in this method use `model_name`. An operator will see the raw `model_id` (e.g., `"gpt-image-2-2026-04-21"`) instead of the human-readable config name (e.g., `"gpt-image-2"`), making the message harder to act on.

```suggestion
            msg = f"Model '{model_name}' does not support input_fidelity"
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: pipelex/plugins/azure_rest/azure_img_gen_worker.py
Line: 107-112

Comment:
**`or` short-circuits on zero token count**

`usage_dict.get("prompt_tokens") or usage_dict.get("input_tokens")` evaluates the right-hand side when the left is falsy — including when it is `0`. A zero `prompt_tokens` value (rare but valid) would fall through to `input_tokens`, potentially misattributing token categories. The same applies to the output-tokens line.

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "Release v0.25.0" | Re-trigger Greptile

Comment thread pipelex/cogt/img_gen/img_gen_args_factory.py Outdated
Comment thread pipelex/plugins/azure_rest/azure_img_gen_worker.py Outdated
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 41 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="pipelex/plugins/gateway/gateway_img_gen_worker.py">

<violation number="1" location="pipelex/plugins/gateway/gateway_img_gen_worker.py:77">
P1: Avoid logging the full image-generation args payload; it can leak prompt and input image data. Log only non-sensitive metadata (e.g., model, endpoint, arg keys).</violation>
</file>

<file name="pipelex/plugins/azure_rest/azure_img_gen_worker.py">

<violation number="1" location="pipelex/plugins/azure_rest/azure_img_gen_worker.py:110">
P2: Use `is not None` checks when reading token counts; current truthiness checks drop valid `0` token values.</violation>
</file>

<file name="tests/e2e/pipelex/pipes/pipe_operators/pipe_img_gen/test_pipe_img_gen_validation.py">

<violation number="1" location="tests/e2e/pipelex/pipes/pipe_operators/pipe_img_gen/test_pipe_img_gen_validation.py:112">
P3: Skip these checks when the model exists but has no img-gen rules; otherwise the test can become routing-dependent and flaky.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread pipelex/plugins/gateway/gateway_img_gen_worker.py Outdated
Comment thread pipelex/plugins/azure_rest/azure_img_gen_worker.py Outdated
- Use model_name in input_fidelity error message for consistency
- Replace walrus + or with explicit is None checks for token counts to preserve valid 0 values
- Remove args_dict debug log in gateway worker to avoid leaking prompt and input image data

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lchoquel lchoquel merged commit ab2ab43 into main Apr 28, 2026
31 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 28, 2026
@lchoquel lchoquel deleted the release/v0.25.0 branch April 28, 2026 14:20
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants