forward() only popped _stream_gens on normal completion, so cancelled, timed-out, or preempted requests leaked their generator and skipped the finally block that unlinks the temp WAV files. Implement on_requests_finished to close each finished generator, which raises GeneratorExit inside it and triggers the existing cleanup. Signed-off-by: Yueqian Lin <linyueqian@outlook.com>