# Fish Speech S2 Pro deploy: async-chunk streaming slow_ar → dac_decoder.
# Verified on 1× H20.
# Registry key and filename use the HF ``model_type=fish_qwen3_omni`` for
# auto-detection; human-readable "fish_speech" stays as the source directory.
async_chunk: true
enable_chunked_prefill: false

connectors:
  connector_of_shared_memory:
    name: SharedMemoryConnector
    extra:
      shm_threshold_bytes: 65536
      codec_streaming: true
      connector_get_sleep_s: 0.01
      connector_get_max_wait_first_chunk: 3000
      connector_get_max_wait: 300
      # ~21 Hz codec; 25 frames ≈ 1.16s of audio.
      codec_chunk_frames: 25
      codec_left_context_frames: 25
      initial_codec_chunk_frames: 4

stages:
  - stage_id: 0
    max_num_seqs: 4
    gpu_memory_utilization: 0.6
    enforce_eager: false
    trust_remote_code: true
    enable_prefix_caching: false
    async_scheduling: false
    # vLLM >=0.19 requires max_num_batched_tokens >= max_model_len when
    # enable_chunked_prefill=false. Bumped from legacy 3072 to match
    # max_model_len; chunked prefill stays off because the SlowAR decode
    # loop isn't chunked-prefill-safe.
    max_num_batched_tokens: 16384
    max_model_len: 16384
    devices: "0"
    output_connectors:
      to_stage_1: connector_of_shared_memory
    default_sampling_params:
      temperature: 0.8
      top_k: 30
      top_p: 0.9
      max_tokens: 2048
      seed: 42
      repetition_penalty: 1.0

  - stage_id: 1
    max_num_seqs: 1
    gpu_memory_utilization: 0.1
    enforce_eager: true
    trust_remote_code: true
    enable_prefix_caching: false
    async_scheduling: false
    max_num_batched_tokens: 16384
    max_model_len: 16384
    devices: "0"
    input_connectors:
      from_stage_0: connector_of_shared_memory
    default_sampling_params:
      temperature: 0.0
      top_p: 1.0
      top_k: -1
      max_tokens: 65536
      seed: 42
      repetition_penalty: 1.0
