mirror of
https://github.com/Comfy-Org/comfy-swift-sdk.git
synced 2026-11-04 23:47:26 +00:00
Labels
No labels
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Comfy-Org/comfy-swift-sdk#4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @mattmillerai on GitHub (Sep 18, 2026).
Original GitHub issue: https://github.com/Comfy-Org/comfy-swift-sdk/issues/85
Originally assigned to: @deepme987 on GitHub.
Follow-ups deferred when #80 landed (merge commit
1e5d452). #80's checks were green and the review panel's blocking gate was skipped, so these were filed rather than held.SDK design decisions (yours)
1. Surface the disclosure half of alt-provider routing — flagged HIGH.
The request half is wired up:
modelProvider/strictMode/fallbackProvidergo out on the query. The disclosure half is not. WithmodelProviderset andstrictModeat the server default (false), the contract drops untranslatable native input fields and discloses them via theX-Comfy-Router-Dropped-Paramsresponse header — and the SDK never surfaces that to callers, so a silent field drop is invisible.X-Comfy-Router-Fallback-Providerhas the same problem: a caller cannot tell which provider actually served the call.Note when implementing: that header is a JSON-encoded array held in a single string, not a comma-separated OpenAPI list. It needs a
JSONDecoder, not asplit(separator: ",")— entries are sentences containing commas of their own. See the spec note onRouterDroppedParamsHeader.2. Should
fallbackProviderbeBool?rather thanString?It has boolean semantics but is free-form, and the contract disables fallback only for the exact literal
"false"— so"False","0","no"silently do nothing and the caller still pays for a second billable generation. Likely a cross-SDK call, since this mirrors the Python/TS siblings.3. Should the query participate in the
Idempotency-Keyfingerprint at allThe three new params now silently join it, so a reused key with different params is refused. #80 documented that this is the behaviour; whether it should be is still open.
4.
RouterModelsE2ETests.swift— billable live testsThey dispatch real generations with no explicit
idempotencyKey:and budgets (300s, 600s) at or below Router's own hold, removing the headroomRouterModels.defaultTimeout(660s) exists for. A retry storm here costs real money.Upstream spec-prose fixes — route to the canonical contract, not the vendored copy
spec/router-openapi.yamlisGENERATED ONE-WAY — DO NOT HAND-EDIT. These four defects were verified present verbatim in the newest upstream (cloud@8759533), so fixing them here would be reverted at the next sync. They belong in the source contract:RouterErrorType's owndescriptionstill reads "The set is closed at fifteen values" and enumerates fifteen, after three buckets (cancelled,queue_timeout,request_not_found) were added tox-comfy-error-types. It is now eighteen.RouterQueueCancelResponse's description says it is the body on "the202and the400", but the cancel route declares it on202and409.model_provideris set.Filed while shepherding #80 to merge. Review threads on #80 carry the full reviewer analysis for each item.