# Voxtral TTS deploy: async-chunk streaming generator → audio tokenizer.
# Verified on 1× H20.
#
# Mistral tokenizer/config/load flags are declared per-stage here because
# DeployConfig does not yet expose them as pipeline-wide fields. They must
# match on every stage so the engine args stay consistent across workers.
async_chunk: true

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
      codec_chunk_frames: 25
      codec_chunk_frames_at_begin: 5
      codec_left_context_frames: 25

stages:
  - stage_id: 0
    max_num_batched_tokens: 32768
    max_num_seqs: 32
    gpu_memory_utilization: 0.8
    enforce_eager: false
    trust_remote_code: true
    enable_prefix_caching: false
    async_scheduling: true
    max_model_len: 4096
    devices: "0"
    output_connectors:
      to_stage_1: connector_of_shared_memory
    default_sampling_params:
      temperature: 0.0
      top_p: 1.0
      top_k: -1
      max_tokens: 2048
      seed: 42
      repetition_penalty: 1.1
      extra_args:
        cfg_alpha: 1.2
    tokenizer_mode: mistral
    config_format: mistral
    load_format: mistral
    skip_mm_profiling: true
    enable_chunked_prefill: false

  - stage_id: 1
    max_num_seqs: 32
    gpu_memory_utilization: 0.1
    enforce_eager: true
    trust_remote_code: true
    enable_prefix_caching: false
    async_scheduling: false
    max_num_batched_tokens: 65536
    max_model_len: 65536
    devices: "0"
    input_connectors:
      from_stage_0: connector_of_shared_memory
    default_sampling_params:
      temperature: 0.9
      top_p: 0.8
      top_k: 40
      max_tokens: 2048
      seed: 42
      repetition_penalty: 1.05
    tokenizer_mode: mistral
    config_format: mistral
    load_format: mistral
    skip_mm_profiling: true
