Skip to content

0.7.0

Latest

Choose a tag to compare

@jeronimodeleon jeronimodeleon released this 28 Jul 20:47
· 15 commits to main since this release
ec81e81

Updated 2026-08-01: added the "don't pin genblaze==0.7.0" paragraph to this already-published release's notes (originally published without it). No published package artifacts changed; canonical text lives in CHANGELOG.md, which this body is generated from.

[0.7.0] - 2026-07-28

Bug-fix wave with one new opt-in feature and one new provider. Closes a
regression in the ReDoS pattern-safety heuristic (both the shape #196/#200
fixed and two further false-positive/false-negative bugs those same fixes
introduced), adds an opt-in rate-limit backoff for chat()/vision helpers,
ships a native Gemini image provider, fixes Runway's image-to-video routing,
and closes a verify --fetch SSRF gap.

This heading is the release wave name and the git tag (v0.7.0);
individual PyPI package versions move independently and are listed below (the
umbrella genblaze package is 0.4.5). Wave tags and the umbrella's PyPI
versions are separate sequences that happen to look alike — don't pin
genblaze==0.7.0. A pin on a wave tag either fails outright or, worse,
resolves silently to an unrelated umbrella build from a different wave (e.g.
genblaze==0.4.0 on PyPI predates the v0.4.0 wave). Pin the exact umbrella
version above, or a lockfile for full reproducibility (the umbrella pins
ranges, not exact versions, for its own dependencies).

Released package versions

  • genblaze (umbrella) 0.4.4 → 0.4.5
  • genblaze-core 0.3.7 → 0.3.8
  • genblaze-cli 0.3.5 → 0.3.6
  • genblaze-assemblyai 0.3.1 → 0.3.2
  • genblaze-decart 0.3.2 → 0.3.3
  • genblaze-elevenlabs 0.3.2 → 0.3.3
  • genblaze-gmicloud 0.3.4 → 0.3.5
  • genblaze-google 0.3.3 → 0.3.4
  • genblaze-hume 0.3.2 → 0.3.3
  • genblaze-lmnt 0.3.2 → 0.3.3
  • genblaze-nvidia 0.3.2 → 0.3.3
  • genblaze-openai 0.3.3 → 0.3.4
  • genblaze-runway 0.3.2 → 0.3.3
  • genblaze-stability-audio 0.3.2 → 0.3.3

genblaze-core

  • Security the ReDoS pattern-safety heuristic (pattern_safety.py) missed
    two more catastrophic-backtracking shapes on top of #157 (fixed in 0.6.0):
    a quantified alternation with overlapping branches whose textual prefixes
    differ, and adjacent unbounded-quantified groups whose reachable character
    sets actually overlap despite looking disjoint by source text alone (#196,
    #200). Both are now rejected by assert_safe(). That charset-overlap gate
    itself had two bugs, also closed here: an unescaped . no longer resolves
    to the literal character '.' (it now correctly means "matches anything"),
    so a pattern like (.+)([a-z]+)$ is rejected as it should be; and a
    (?:...)/(?P<name>...) group's marker prefix is now stripped before
    charset analysis, so a genuinely safe pattern like (?:[a-z]+)(?:[0-9]+)$
    is no longer wrongly rejected. Upgrade impact: the shipped connector
    catalog contains no pattern of either shape, so this only affects
    third-party or future connectors — a ModelFamily pattern with two or
    more adjacent unbounded groups where one uses . will now be rejected at
    import time (fix: separate the groups with a mandatory, non-nullable
    delimiter, or narrow . to an explicit character class); a pattern using
    (?:...)/(?P<name>...) that was previously (incorrectly) rejected will
    now import successfully. Lookaround groups ((?=...), (?!...)) keep
    their existing, unchanged handling.
  • Fixed Mp4Handler.embed() raised on a str path instead of accepting
    one like every other media handler, and Pipeline.step() accepted any
    object as a provider instead of validating it's a BaseProvider — a
    non-provider value previously surfaced a confusing failure deep inside
    run() instead of immediately at the call site (#224, #225).

genblaze-openai

  • Added opt-in rate-limit backoff for chat()/achat() and the vision
    helpers via retry_on_rate_limit=/retry_policy= kwargs, wrapping calls in
    genblaze_core.providers.retry.call_with_rate_limit_retry (#221). A
    follow-up in this same release disables the SDK's own internal retry when
    genblaze already manages backoff on an internally-created client, closing a
    double-retry (multiplicative wait) bug the initial opt-in introduced; a
    caller-supplied client= keeps its own retry configuration untouched
    (#221, #235). The identical feature and fix landed in genblaze-google
    (see below); currently wired into openai/google only — see
    docs/features/llm-calls.md.
  • Docs confirmed estimate_cost() already computed per-model pricing
    correctly; the reported gap was a documentation error in
    docs/reference/pricing-recipes.md, now corrected, plus added test
    coverage pinning the existing (correct) behavior (#222, #223). No
    production code changed.

genblaze-google

  • Added the same opt-in rate-limit backoff described under
    genblaze-openai above (#221, #235).
  • Added GeminiImageProvider, a native Gemini image-generation provider
    (google-gemini-image entry point) alongside the existing Imagen provider,
    sharing client construction via a new GoogleClientMixin (#205).
  • Fixed a probe-confirmed-LIVE but known-gated Imagen slug reported a
    misleading authoritative OK instead of OK_PROVISIONAL, mirroring the
    same gmicloud fix below (#206).
  • Fixed chat()/vision calls sent an ImageURLContent input as an
    unsupported field instead of translating it to Gemini's
    inline_data/file_data wire format (#217).

genblaze-gmicloud

  • Fixed preflight validation didn't distinguish a known-catalog slug from
    one confirmed callable with the caller's API key, reporting a misleading
    authoritative OK for a probe-confirmed slug that isn't confirmed-callable
    instead of OK_PROVISIONAL (#193). Added a guard against a misconfigured
    base_url/GMI_BASE_URL pointed at the wrong endpoint shape (a
    silent-404 footgun), and an edit-mode fallback path.

genblaze-runway

  • Fixed image_to_video on models that require an input image (e.g.
    gen4_turbo, gen3a_turbo) now raises a clear, actionable error instead of
    silently failing when no image is supplied; corrected the model catalog's
    ratio literals, which were wrong pixel-dimension strings for several models
    (#226).

genblaze-lmnt

  • Fixed an unsupported seed parameter was silently forwarded to
    generate_detailed instead of being dropped; it's now dropped with a
    one-time warning so callers know to stop passing it (#207).

genblaze-cli

  • Fixed verify --fetch accepted a file:// URL with a remote authority
    (e.g. file://evil-host/path) instead of rejecting it, and could leak
    presigned-URL userinfo/credentials into output; both are now blocked/
    redacted. Also dedupes redundant stream-hash computation on the same asset
    (#214).

genblaze (umbrella)

  • Fixed the umbrella's lazy __getattr__ lost the original install hint
    to a generic message when propagating OptionalDependencyError instead of
    preserving it (#213).
  • Added a parquet extra re-exposing genblaze-core[parquet], so
    pip install "genblaze[parquet]" — the exact incantation
    OptionalDependencyError prints for ParquetSink — resolves instead of
    failing with an unknown-extra error.

Packaging

  • Fixed nine connectors' (genblaze-assemblyai, -decart,
    -elevenlabs, -google, -hume, -lmnt, -nvidia, -openai,
    -stability-audio) genblaze-core dependency floor was raised to
    >=0.3.7 for local_file_url() users, but each package's own published
    version wasn't bumped alongside it (#209) — a pypi-pin-parity trap that
    would have blocked (not silently shipped) this release. Closed here by
    bumping all nine to a new patch version.
  • Fixed genblaze-openai and genblaze-google import
    call_with_rate_limit_retry, new in genblaze-core 0.3.8 this release,
    but still declared a genblaze-core>=0.3.7 floor — the same class of gap
    as the item above, catchable only because it's caught here rather than by
    any automated gate (tools/prepare_release.py doesn't check connector→core
    floors against the symbols a connector actually imports). Both floors are
    now genblaze-core>=0.3.8,<0.4.

Internal

  • Fixed install-verify's "Wait for PyPI to index the umbrella" pre-check
    only polled for the genblaze umbrella itself, but genblaze[all] also
    resolves the ~14 connector packages that propagate across PyPI's CDN
    independently — so the pre-check could pass while a connector's simple-index
    page was still stale, and the very next pip install "genblaze[all]==$version"
    false-red the job on a genuinely-healthy release (hit twice during the
    v0.6.0 release, #189). The fresh install step itself now retries up to 5
    times (30s apart) so transient propagation of any package is tolerated; a
    truly missing/unresolvable package still fails the job after retries are
    exhausted. The umbrella pre-check and the import-smoke invocation are
    unchanged. Release tooling only — no packaged code changed.
  • Fixed the lint job's ruff version could drift from what contributors
    run locally, producing false-red CI on a clean local run; pinned to
    0.14.0 (#212).
  • Fixed Dependabot could propose a major-version bump on a runtime
    dependency, which this repo's pinning policy caps below the next major by
    hand; Dependabot config now excludes major-version updates for runtime
    deps (#216).
  • Fixed tools/batch_cluster.py could drop an in-flight dependency
    blocker between clustering passes (#210).
  • Chore bumped the GitHub Actions dependency group (#191).