Decision: Approved
The Review Team approves the requested $500 in full, subject to PR #35 completing the normal merge process with the original contributor’s attribution preserved.
The contribution addresses an established network engineering need by providing a self-contained FLUX.2-klein-4B realtime image-to-image example over Trickle and the Live Runner. It demonstrates persistent session handling, live prompt and parameter updates, frame-skipping for low-latency operation, health-gated model startup, and both offchain and paid onchain execution.
The original work from PR #32 was preserved and carried forward by the repository maintainer in PR #35. The maintainer updated it to the current USD-per-hour pricing schema, corrected the signer’s maximum ticket face value, aligned the Compose files with current repository conventions, and independently tested a paid Arbitrum mainnet session. Independent review also confirmed two deployed Flux Klein runners and completed a paid inference session that returned valid transformed frames.
The requested amount is modest and proportionate to the scope, technical complexity, network relevance, and demonstrated maintainer adoption.
Before payment, PR #35 should be updated against the current main branch, its non-mergeable state resolved, and the normal review and merge process completed. The final history should continue to credit the applicant and preserve their original contribution.
The submitted FLUX_BATCH=2 implementation currently returns only one output for a two-frame input because latent IDs cached from a B=1 call are incorrectly reused for B=2. Review testing confirmed that including the batch dimension in the latent-ID cache key fixes the issue. This fix or an equivalent solution should be applied before merge and protected by an output-count regression test.
The example currently assumes a locally hosted, unauthenticated remote signer. Its --signer option accepts only a URL and does not expose the authentication headers or token refresh required by hosted signers such as PymtHouse. This limitation does not justify reducing the award because the documented local onchain configuration works and paid execution was independently verified.
Future Follow-Ups
- Pin the Diffusers revision, Livepeer gateway commit, model revision, base image digest, and Python dependencies for reproducible builds.
- Serialize inference, live parameter updates, model reset, and session teardown. Deterministic testing confirmed that
/update currently mutates shared model state while process_batch() is running in a worker thread. Teardown also calls MODEL.reset() and returns before the underlying asyncio.to_thread() inference has stopped, because cancelling the awaiting asyncio task does not cancel the thread.
- Fix finite-file EOF handling before merge. The runner currently responds to input EOF by canceling the inference worker, which can discard the in-flight or final buffered frame and produce an empty output.
Ecosystem follow-up: Extend the Livepeer live-runner payment flow to propagate the selected runner’s application identifier through LivePaymentSession, /generate-live-payment, and downstream metering. Current payment requests identify only the generic live type, causing services such as PymtHouse to report modelId=unknown. This is an upstream SDK/payment-attribution limitation and is not specific to the Flux Klein example.