·
1 commit
to main
since this release
Immutable
release. Only release title and notes can be modified.
Added
- Queued model surface:
models.submit(),models.subscribe(),models.handle(), and theRequestHandlethey return (status(),get(),cancel(),iter_events()). Sync and async. Gated server side — a caller it is not enabled for gets403NotEnabled. ComfyError.resend_refused—Trueonly on the failure re-raised after a refused same-key resend. Check it before letting an outer retry wrapper re-enterrun(), which would mint a fresh key and bill a second generation.retry.may_have_claimed_key(exc)— whether a failure could have left the key claimed.router_exceptions.error_from_completion()— the typed exception a completed-but-failed queued request reports, orNone.
Changed
models.runnow raises the failure that claimed the key when a same-key retry is refused422 idempotency_key_reuse, with the refusal chained on__cause__and.resend_refusedset.except IdempotencyKeyReuseno longer catches this — catch the real failure (orComfyError) and inspect__cause__.- The substitution only applies when a claim-capable failure preceded the refusal. After a never-delivered transport error or a released
429, a422is a genuine refusal and is raised as itself. Among eligible failures the most recent wins, not the first.
Fixed
- A
409naming no error code raises plainComfyErrorinstead of guessingHashMismatch. Envelopedhash_mismatchand Router-bucketed409s are unaffected.
Full changelog: v0.2.0...v0.3.0