# source: funasr-asr-airgap.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: funasr-asr
  annotations:
    recipe.vllm.ai/hardware-verified: "L4,T4"
spec:
  engine:
    engine: flex
    version: v0.1.1
  base:
    engine_args:
      command: "python /opt/FunASR/examples/industrial_data_pretraining/fun_asr_nano/serve_vllm.py --spk-model /opt/models/campplus --vad-model /opt/models/fsmn-vad --model /opt/models/Fun-ASR-Nano-2512 --gpu-memory-utilization 0.9 --port $NEUTREE_FLEX_PORT"
      health_path: /openapi.json
      passthrough: true
      ready_timeout_s: 1800
  variants:
    airgap:
      description: "Airgap FunASR，ASR + VAD(fsmn-vad) + 说话人模型(CAM++) 全部打包进镜像，可离线运行。说话人分离(diarization)：请求带 spk=true 时每段输出 speaker(SPK0/SPK1)。"
      model:
        registry: ""
        name: "-"
        version: ""
        task: text-generation
        info:
          parameter_count: "0.6B"
          quantization: bf16
          context_length: "4K"
          architecture: dense
      vram_minimum_gb: 6
      resources:
        cpu: "2"
        memory: "8"
  features:
    - name: image
      group: 部署
      type: input
      display_name: "工作负载镜像"
      description: "镜像在镜像仓库中的完整地址（registry/project/name:tag）。"
      input:
        value_type: string
        default: "<your-registry>/neutree-flex-funasr:airgap-v0.1.2"
      engine_args:
        image: "${value}"
---
# source: mineru-hybrid-airgap.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: mineru-hybrid-airgap
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "L4,T4"
spec:
  engine:
    engine: flex
    version: v0.1.1
  base:
    engine_args:
      command: "mineru-api --host 0.0.0.0 --port $NEUTREE_FLEX_PORT --enable-vlm-preload true"
      health_path: /health
      passthrough: true
      ready_timeout_s: 1200
  variants:
    airgap:
      description: "Airgap MinerU hybrid（pipeline + VLM），原生 MinerU API：上传 PDF/图片，服务端解析后经 /file_parse（同步）或 /tasks→/tasks/{id}→/result（异步）返回 markdown。VLM 与 pipeline 权重全部打包进镜像，可离线运行（MINERU_MODEL_SOURCE=local）。--enable-vlm-preload 在启动期预加载 VLM（由 ready_timeout_s 兜底），避免首个请求触发懒加载导致健康检查超时被杀。切片/共享 GPU 需在 command 末尾追加 --gpu-memory-utilization（如共享设备用 0.4）。"
      model:
        registry: ""
        name: "-"
        version: ""
        task: text-generation
        info:
          parameter_count: "1.2B"
          quantization: bf16
          context_length: "8K"
          architecture: dense
      vram_minimum_gb: 8
      resources:
        cpu: "2"
        memory: "16"
  features:
    - name: image
      group: 部署
      type: input
      display_name: "工作负载镜像"
      description: "airgap 镜像在你自己 registry 中的完整地址（registry/project/name:tag）。"
      input:
        value_type: string
        default: "<your-registry>/neutree-flex-mineru-api:hybrid-v0.1.1"
      engine_args:
        image: "${value}"
---
# source: mineru-hybrid-v4-airgap.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: mineru-hybrid-v4-airgap
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "T4"
spec:
  engine:
    engine: flex
    version: v0.1.2
  base:
    engine_args:
      command: "mineru-api --host 0.0.0.0 --port $NEUTREE_FLEX_PORT --preload-models"
      health_path: /v1/health
      passthrough: true
      ready_timeout_s: 1200
  variants:
    airgap:
      description: "Airgap MinerU 4（4.0.5）hybrid（小模型 + VLM，tier standard），原生 MinerU v1 API：POST /v1/uploads → PUT /v1/uploads/{id}/content → POST /v1/uploads/{id}/complete → POST /v1/parse/jobs → 轮询 GET /v1/parse/jobs/{id} → GET /v1/files/{file_id}/content 取 markdown。与 MinerU 3.x 的 /file_parse、/tasks 不兼容，3.x 客户端请继续用 mineru-hybrid-airgap。上传地址请用网关地址自行拼接，不要跟随响应里的 upload_url（那是工作负载内部地址）。权重全部打包进镜像，可离线运行（MINERU_MODEL_SOURCE=local）。--preload-models 在启动期加载 VLM 与小模型，/v1/health 在模型就绪后才应答（由 ready_timeout_s 兜底）。显存默认按约 6 GB 预算分配，验证配置下无需额外参数。"
      model:
        registry: ""
        name: "-"
        version: ""
        task: text-generation
        info:
          parameter_count: "1.2B"
          quantization: bf16
          context_length: "8K"
          architecture: dense
      vram_minimum_gb: 8
      resources:
        cpu: "2"
        memory: "16"
  features:
    - name: image
      group: 部署
      type: input
      display_name: "工作负载镜像"
      description: "airgap 镜像在你自己 registry 中的完整地址（registry/project/name:tag）。"
      input:
        value_type: string
        default: "<your-registry>/neutree-flex-mineru-api:v4-hybrid-v0.1.2"
      engine_args:
        image: "${value}"
---
# source: k8s-only/paddleocr-vl-airgap.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: paddleocr-vl-airgap
  workspace: default
  annotations:
    # 仅 K8s plane。工作负载用的是 PaddlePaddle 官方镜像，里面没有 ray[serve]
    # 和 flex 的 serve/flex/v0_1_1/app.py —— 而 Ray/SSH（static node）plane 要求
    # engine_args.image 通过 Ray 的 runtime_env container 起 worker，必须自带这两样
    # （mineru / funasr 的 airgap 镜像是我们自己 build 时塞进去的，所以两个 plane 都能跑）。
    # K8s plane 是普通 Deployment，直接跑镜像的 command，不经 Ray，因此不受影响。
    neutree.ai/supported-planes: "kubernetes"
spec:
  engine:
    engine: flex
    version: v0.1.1
  base:
    engine_args:
      # 官方 compose 把服务拆成 api + vlm 两个容器，是因为 pipeline 镜像里的默认配置
      # （/home/paddleocr/pipeline_config_vllm.yaml）把 VLRecognition 指向了
      # http://paddleocr-vlm-server:8080/v1。这里改用 paddlex 内置的 PaddleOCR-VL-1.6
      # 流水线配置，它的 genai_config.backend 是 native —— VLM 在同进程内用
      # paddlepaddle 直接跑，于是单容器即可提供完整流水线 API。
      command: "paddlex --serve --pipeline PaddleOCR-VL-1.6 --host 0.0.0.0 --port $NEUTREE_FLEX_PORT"
      health_path: /health
      # 对外是 /layout-parsing 这类自定义路径，不是 OpenAI 路径，保持 flex 默认的透传。
      passthrough: true
      ready_timeout_s: 1200
  variants:
    airgap:
      description: "【仅 K8s 集群】Airgap PaddleOCR-VL 1.6 完整流水线 API，单容器：POST /layout-parsing 传图片/PDF，返回版面解析结果与 markdown。用官方 paddleocr-vl 离线镜像（-offline tag），版面检测 PP-DocLayoutV3、VLM PaddleOCR-VL-1.6、文档预处理 UVDoc / PP-LCNet_x1_0_doc_ori 四个模型全部已打包进镜像，启动不联网，也不需要另起 VLM 容器（官方 compose 拆成 api + vlm 两个容器只是为了让 VLM 走 vLLM）。VLM 用 paddle 原生后端（genai_config.backend: native）在同进程内推理，吞吐低于 vLLM；高并发场景可另外部署 paddleocr-genai-vllm-server 并改流水线配置把 VLRecognition 指过去。passthrough 保持 true：/layout-parsing 不在 router 声明的 OpenAI 路由里，靠透传转发。"
      model:
        registry: ""
        name: "-"
        version: ""
        task: text-generation
        info:
          parameter_count: "0.9B"
          quantization: bf16
          context_length: "16K"
          architecture: dense
      vram_minimum_gb: 8
      resources:
        cpu: "4"
        memory: "16"
  features:
    - name: image
      group: 部署
      type: input
      display_name: "工作负载镜像"
      description: "离线（-offline）镜像的完整地址，按 GPU 架构二选一：Blackwell（RTX 50 / sm120）用 -sm120-offline，其余 CC >= 8.0（A10/A100/L20/RTX 30-40 等）用 -offline。注意是 paddleocr-vl（流水线镜像，约 10 GB），不是 paddleocr-genai-vllm-server（只有 VLM 的 OpenAI 服务）。离线集群先在联网机器 docker pull + save，导入后重打 tag 推到自己的 registry，再填这里。"
      input:
        value_type: string
        default: "ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-vl:latest-nvidia-gpu-offline"
        suggestions:
          - value: "ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-vl:latest-nvidia-gpu-offline"
            label: "通用 NVIDIA CC>=8.0（约 10 GB）"
          - value: "ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-vl:latest-nvidia-gpu-sm120-offline"
            label: "Blackwell / sm120（RTX 50 系）"
      engine_args:
        image: "${value}"
---
# source: qwen3-asr-1.7b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-asr-1-7b
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "L20"
spec:
  engine:
    engine: vllm
    version: v0.31.0-audio
  replicas:
    num: 1
  deployment_options:
    scheduler:
      type: consistent_hash
  base:
    engine_args:
      trust_remote_code: true
      trust_request_chat_template: true
  variants:
    default:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: huggingface
        name: Qwen/Qwen3-ASR-1.7B
        task: text-generation
        info:
          parameter_count: "2349217408"
          context_length: "65536"
          architecture: Qwen3ASRForConditionalGeneration
          num_hidden_layers: 28
          num_attention_heads: 16
          num_key_value_heads: 8
          head_dim: 128
          max_position_embeddings: 65536
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            max_position_embeddings: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_count: "auto"
            parameter_dtype: auto
      resources:
        cpu: "0"
        memory: "0"
      vram_minimum_gb: 5
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
        max: 65536
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
      engine_args:
        max_num_seqs: "${value}"
---
# source: qwen3-embedding-8b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-embedding-8b
  workspace: default
  display_name: "qwen3-embedding-8b"
  labels:
    icon_url: https://cdn-thumbnails.huggingface.co/social-thumbnails/Qwen.png
spec:
  engine:
    engine: vllm
    version: v0.24.0
  replicas:
    num: 1
  deployment_options:
    scheduler:
      type: roundrobin
  variables:
    RAY_SCHEDULER_TYPE: roundrobin
  base:
    engine_args:
      runner: pooling
      limit_mm_per_prompt: "{\"image\": 1}"
      mm-processor-kwargs: "{\"do_resize\": true}"
      gpu_memory_utilization: 0.92
      tensor_parallel_size: 1
      trust_remote_code: true
      max_model_len: 16384
  variants:
    default:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。部署前需选择模型 registry 和版本。"
      model:
        registry: ""
        name: qwen3-embedding-8b
        version: ""
        task: text-embedding
        info:
          parameter_count: "7567295488"
          parameter_dtype: bfloat16
      resources:
        cpu: "8"
        memory: "16"
      vram_minimum_gb: 16
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）。默认沿用来源配置。"
      input:
        value_type: int
        default: "16384"
        min: 1
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
      engine_args:
        max_num_seqs: "${value}"
    - name: gpu-memory-utilization
      group: 核心参数
      type: input
      display_name: "显存利用率"
      description: "引擎可用显存比例，默认沿用来源配置。"
      input:
        value_type: number
        default: "0.92"
        min: 0.01
        max: 1
      engine_args:
        gpu_memory_utilization: "${value}"
---
# source: qwen3-forcedaligner-0.6b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-forcedaligner-0-6b
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "L20"
spec:
  engine:
    engine: vllm
    version: v0.31.0-audio
  replicas:
    num: 1
  deployment_options:
    scheduler:
      type: consistent_hash
  base:
    engine_args:
      hf_overrides:
        architectures:
          - Qwen3ASRForcedAlignerForTokenClassification
      trust_remote_code: true
      trust_request_chat_template: true
  variants:
    default:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: modelscope
        name: Qwen/Qwen3-ForcedAligner-0.6B
        task: text-rerank
        info:
          context_length: "8192"
          architecture: Qwen3ASRForConditionalGeneration
          num_hidden_layers: 28
          num_attention_heads: 16
          num_key_value_heads: 8
          head_dim: 128
          max_position_embeddings: 8192
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            max_position_embeddings: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_dtype: auto
          missing_fields:
            - parameter_count
      resources:
        cpu: "0"
        memory: "0"
      vram_minimum_gb: 2
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
        max: 8192
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
      engine_args:
        max_num_seqs: "${value}"
---
# source: qwen3-reranker-8b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-reranker-8b
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "A800-80GB-PCIe"
spec:
  engine:
    engine: vllm
    version: v0.24.0-p1
  replicas:
    num: 1
  deployment_options:
    scheduler:
      type: roundrobin
  variables:
    RAY_SCHEDULER_TYPE: roundrobin
  base:
    engine_args:
      chat_template: "/vllm-workspace/examples/pooling/score/template/qwen3_reranker.jinja"
      gpu_memory_utilization: 0.92
      hf_overrides:
        architectures:
          - Qwen3ForSequenceClassification
        classifier_from_token:
          - "no"
          - "yes"
        is_original_qwen3_reranker: true
      max_model_len: 16384
      runner: pooling
      tensor_parallel_size: 1
      trust_remote_code: true
  variants:
    default:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。部署时需确保配置中的 chat_template 文件可用。"
      model:
        registry: nfs-185
        name: qwen3-reranker-8b
        version: npyi2xojc6v6ausu
        task: text-rerank
        info:
          parameter_count: "8188548096"
          context_length: "40960"
          architecture: Qwen3ForCausalLM
          num_hidden_layers: 36
          num_attention_heads: 32
          num_key_value_heads: 8
          head_dim: 128
          max_position_embeddings: 40960
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            max_position_embeddings: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_count: "auto"
            parameter_dtype: auto
      resources:
        cpu: "8"
        memory: "16"
      vram_minimum_gb: 17
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）。默认沿用来源配置。"
      input:
        value_type: int
        default: "16384"
        min: 1
        max: 40960
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数。留空沿用引擎默认值。"
      input:
        value_type: int
        default: ""
        min: 1
      engine_args:
        max_num_seqs: "${value}"
    - name: gpu-memory-utilization
      group: 核心参数
      type: input
      display_name: "显存利用率"
      description: "引擎可用显存比例，默认沿用来源配置。"
      input:
        value_type: number
        default: "0.92"
        min: 0.01
        max: 1
      engine_args:
        gpu_memory_utilization: "${value}"
---
# source: qwen3.6-27b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-6-27b
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "L20"
spec:
  engine:
    engine: vllm
    version: v0.24.0
  base:
    engine_args:
      reasoning_parser: qwen3
  variants:
    bf16:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: huggingface
        name: Qwen/Qwen3.6-27B
        task: text-generation
        info:
          parameter_count: "27B"
          quantization: bf16
          context_length: "262K"
          architecture: Qwen3_5ForConditionalGeneration
          num_hidden_layers: 64
          num_key_value_heads: 4
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 48
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          parameter_dtype: bfloat16
      vram_minimum_gb: 54
      resources:
        cpu: "8"
        memory: "32"
    fp8:
      description: "FP8 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: huggingface
        name: Qwen/Qwen3.6-27B-FP8
        task: text-generation
        info:
          parameter_count: "27B"
          quantization: fp8
          context_length: "262K"
          architecture: Qwen3_5ForConditionalGeneration
          num_hidden_layers: 64
          num_key_value_heads: 4
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 48
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          parameter_dtype: bfloat16
      vram_minimum_gb: 27
      resources:
        cpu: "8"
        memory: "32"
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）—— 可选预设或自填（原生上限 262144）。"
      input:
        value_type: int
        default: "262144"
        min: 1
        max: 262144
        suggestions:
          - value: "8192"
            label: "8K"
          - value: "32768"
            label: "32K"
          - value: "131072"
            label: "128K"
          - value: "262144"
            label: "256K"
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数（解码并行度 / 批宽）。"
      input:
        value_type: int
        default: "256"
        min: 1
        max: 1024
      engine_args:
        max_num_seqs: "${value}"
    - name: tool-calling
      group: 推理优化
      display_name: "工具调用"
      description: "函数 / 工具调用（自动工具选择，qwen3_coder 解析器）。"
      default: true
      engine_args:
        enable_auto_tool_choice: true
        tool_call_parser: qwen3_coder
    - name: text-only
      group: 推理优化
      display_name: "纯文本模式"
      description: "纯文本模式 —— 跳过视觉编码器，为 KV 缓存释放显存。"
      default: false
      engine_args:
        language_model_only: true
        enable_prefix_caching: true
    - name: disable-thinking
      group: 推理优化
      display_name: "关闭思考"
      description: "关闭 reasoning / 思考输出。"
      default: false
      engine_args:
        default_chat_template_kwargs:
          enable_thinking: false
    - name: mtp-speculative
      group: 性能调优
      display_name: "MTP 推测解码"
      description: "MTP（多 token 预测）推测解码，降低解码时延。"
      default: false
      engine_args:
        speculative_config:
          method: mtp
          num_speculative_tokens: 2
---
# source: qwen3.6-35b-a3b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-6-35b-a3b
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "L20"
spec:
  engine:
    engine: vllm
    version: v0.24.0
  base:
    engine_args:
      reasoning_parser: qwen3
  variants:
    bf16:
      description: "BF16 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: huggingface
        name: Qwen/Qwen3.6-35B-A3B
        task: text-generation
        info:
          parameter_count: "35B-A3B"
          quantization: bf16
          context_length: "262K"
          architecture: Qwen3_5MoeForConditionalGeneration
          num_hidden_layers: 40
          num_key_value_heads: 2
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 32
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          parameter_dtype: bfloat16
      vram_minimum_gb: 70
      resources:
        cpu: "8"
        memory: "32"
    fp8:
      description: "FP8 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。"
      model:
        registry: huggingface
        name: Qwen/Qwen3.6-35B-A3B-FP8
        task: text-generation
        info:
          parameter_count: "35B-A3B"
          quantization: fp8
          context_length: "262K"
          architecture: Qwen3_5MoeForConditionalGeneration
          num_hidden_layers: 40
          num_key_value_heads: 2
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 32
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          parameter_dtype: bfloat16
      vram_minimum_gb: 35
      resources:
        cpu: "8"
        memory: "32"
    nvfp4:
      description: "NVFP4 权重。显存下限仅含权重，KV cache 和运行开销另计。已实机验证。仅支持 Blackwell 架构，需引擎具备 ModelOpt NVFP4 支持。"
      model:
        registry: huggingface
        name: nvidia/Qwen3.6-35B-A3B-NVFP4
        task: text-generation
        info:
          parameter_count: "35B-A3B"
          quantization: nvfp4
          context_length: "262K"
          architecture: Qwen3_5MoeForConditionalGeneration
          num_hidden_layers: 40
          num_key_value_heads: 2
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 32
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          parameter_dtype: bfloat16
      vram_minimum_gb: 18
      resources:
        cpu: "8"
        memory: "32"
      engine_args:
        trust_remote_code: true
        kv_cache_dtype: fp8
        attention_backend: flashinfer
        moe_backend: marlin
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "最大序列长度（token）—— 可选预设或自填（原生上限 262144）。"
      input:
        value_type: int
        default: "262144"
        min: 1
        max: 262144
        suggestions:
          - value: "8192"
            label: "8K"
          - value: "32768"
            label: "32K"
          - value: "131072"
            label: "128K"
          - value: "262144"
            label: "256K"
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "最大并发序列数（解码并行度 / 批宽）。"
      input:
        value_type: int
        default: "256"
        min: 1
        max: 1024
      engine_args:
        max_num_seqs: "${value}"
    - name: tool-calling
      group: 推理优化
      display_name: "工具调用"
      description: "函数 / 工具调用（自动工具选择，qwen3_coder 解析器）。"
      default: true
      engine_args:
        enable_auto_tool_choice: true
        tool_call_parser: qwen3_coder
    - name: text-only
      group: 推理优化
      display_name: "纯文本模式"
      description: "纯文本模式 —— 跳过视觉编码器，为 KV 缓存释放显存。"
      default: false
      engine_args:
        language_model_only: true
    - name: disable-thinking
      group: 推理优化
      display_name: "关闭思考"
      description: "关闭 reasoning / 思考输出。"
      default: false
      engine_args:
        default_chat_template_kwargs:
          enable_thinking: false
    - name: mtp-speculative
      group: 性能调优
      display_name: "MTP 推测解码"
      description: "MTP 推测解码（method=mtp，2 个推测 token）。"
      default: false
      engine_args:
        speculative_config:
          method: mtp
          num_speculative_tokens: 2
    - name: expert-parallel
      group: 性能调优
      display_name: "专家并行"
      description: "开启 MoE 专家并行（EP），跨引擎 GPU 分布专家。"
      default: false
      engine_args:
        enable_expert_parallel: true
---
# source: qwen3.8-27b.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: qwen3-8-27b
  workspace: default
  display_name: "qwen3.8-27b"
  labels:
    icon_url: https://cdn-thumbnails.huggingface.co/social-thumbnails/Qwen.png
  annotations:
    recipe.vllm.ai/hardware-verified: "A10"
spec:
  engine:
    engine: vllm
    version: v0.24.0-p1
  replicas:
    num: 1
  deployment_options:
    scheduler:
      type: consistent_hash
  variables:
    RAY_SCHEDULER_TYPE: consistent_hash
  base:
    engine_args: {}
  variants:
    default:
      description: "BF16 权重，默认 256K 上下文、8 并发，启用思考、工具调用和 MTP（3 个推测 token）。部署前需选择模型 registry。显存下限仅含权重，运行开销另计。已实机验证。"
      model:
        registry: ""
        name: qwen3.8-27b
        version: ""
        task: text-generation
        info:
          parameter_count: "27781427952"
          context_length: "262144"
          architecture: Qwen3_5ForConditionalGeneration
          num_hidden_layers: 64
          num_attention_heads: 24
          num_key_value_heads: 4
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 48
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            layer_types: auto
            linear_conv_kernel_dim: auto
            linear_key_head_dim: auto
            linear_num_key_heads: auto
            linear_num_value_heads: auto
            linear_value_head_dim: auto
            max_position_embeddings: auto
            mtp_num_layers: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_count: "auto"
            parameter_dtype: auto
            recurrent_state_dtype: auto
      resources:
        cpu: "8"
        memory: "16"
      vram_minimum_gb: 56
      engine_args:
        enable_chunked_prefill: true
        reasoning_parser: qwen3
        gpu_memory_utilization: 0.92
        tensor_parallel_size: 1
        trust_remote_code: true
        default_chat_template_kwargs:
          enable_thinking: true
        max_model_len: 262144
        max_num_seqs: 8
        enable_auto_tool_choice: true
        tool_call_parser: qwen3_coder
        speculative_config:
          method: mtp
          num_speculative_tokens: 3
    bf16-128k:
      description: "BF16 权重，默认 128K 上下文、显存利用率 0.94；其他参数沿用该方案的引擎默认值。使用 b5harbor 中的 qwen3.8-27b:v1。显存下限仅含权重，运行开销另计。已实机验证。"
      model:
        registry: b5harbor
        name: qwen3.8-27b
        version: v1
        task: text-generation
        info:
          parameter_count: "27781427952"
          context_length: "262144"
          architecture: Qwen3_5ForConditionalGeneration
          num_hidden_layers: 64
          num_attention_heads: 24
          num_key_value_heads: 4
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 48
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            layer_types: auto
            linear_conv_kernel_dim: auto
            linear_key_head_dim: auto
            linear_num_key_heads: auto
            linear_num_value_heads: auto
            linear_value_head_dim: auto
            max_position_embeddings: auto
            mtp_num_layers: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_count: "auto"
            parameter_dtype: auto
            recurrent_state_dtype: auto
      resources:
        cpu: "8"
        memory: "24"
      vram_minimum_gb: 56
      engine_args:
        gpu_memory_utilization: 0.94
        max_model_len: 131072
    bf16-no-mtp:
      description: "BF16 权重，默认 256K 上下文、8 并发，启用思考和工具调用，关闭 MTP。部署前需选择模型 registry。显存下限仅含权重，运行开销另计。"
      model:
        registry: ""
        name: qwen3.8-27b
        version: ""
        task: text-generation
        info:
          parameter_count: "27781427952"
          context_length: "262144"
          architecture: Qwen3_5ForConditionalGeneration
          num_hidden_layers: 64
          num_attention_heads: 24
          num_key_value_heads: 4
          head_dim: 256
          layer_types:
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
            - linear_attention
            - linear_attention
            - linear_attention
            - full_attention
          linear_conv_kernel_dim: 4
          linear_num_key_heads: 16
          linear_key_head_dim: 128
          linear_num_value_heads: 48
          linear_value_head_dim: 128
          recurrent_state_dtype: float32
          mtp_num_layers: 1
          max_position_embeddings: 262144
          is_moe: false
          parameter_dtype: bfloat16
          field_sources:
            architecture: auto
            context_length: "auto"
            head_dim: auto
            is_moe: auto
            layer_types: auto
            linear_conv_kernel_dim: auto
            linear_key_head_dim: auto
            linear_num_key_heads: auto
            linear_num_value_heads: auto
            linear_value_head_dim: auto
            max_position_embeddings: auto
            mtp_num_layers: auto
            num_attention_heads: auto
            num_hidden_layers: auto
            num_key_value_heads: auto
            parameter_count: "auto"
            parameter_dtype: auto
            recurrent_state_dtype: auto
      resources:
        cpu: "8"
        memory: "16"
      vram_minimum_gb: 56
      engine_args:
        enable_chunked_prefill: true
        reasoning_parser: qwen3
        gpu_memory_utilization: 0.92
        tensor_parallel_size: 1
        trust_remote_code: true
        default_chat_template_kwargs:
          enable_thinking: true
        max_model_len: 262144
        max_num_seqs: 8
        enable_auto_tool_choice: true
        tool_call_parser: qwen3_coder
  features:
    - name: max-model-len
      group: 核心参数
      type: input
      display_name: "上下文窗口"
      description: "留空使用所选运行参数方案的默认值。"
      input:
        value_type: int
        default: ""
        min: 1
        max: 262144
      engine_args:
        max_model_len: "${value}"
    - name: max-num-seqs
      group: 核心参数
      type: input
      display_name: "并发数"
      description: "留空使用所选运行参数方案的默认值。"
      input:
        value_type: int
        default: ""
        min: 1
      engine_args:
        max_num_seqs: "${value}"
    - name: gpu-memory-utilization
      group: 核心参数
      type: input
      display_name: "显存利用率"
      description: "留空使用所选运行参数方案的默认值。"
      input:
        value_type: number
        default: ""
        min: 0.01
        max: 1
      engine_args:
        gpu_memory_utilization: "${value}"
    - name: tool-calling
      group: 推理优化
      type: select
      display_name: "工具调用"
      description: "默认沿用所选运行参数方案，也可显式开启或关闭。"
      default_option: profile
      options:
        profile:
          description: "沿用所选参数方案"
        enabled:
          description: "开启自动工具选择"
          engine_args:
            enable_auto_tool_choice: true
            tool_call_parser: qwen3_coder
        disabled:
          description: "关闭自动工具选择"
          engine_args:
            enable_auto_tool_choice: false
            tool_call_parser: ""
    - name: thinking
      group: 推理优化
      type: select
      display_name: "思考模式"
      description: "默认沿用所选运行参数方案，也可显式开启或关闭思考。"
      default_option: profile
      options:
        profile:
          description: "沿用所选参数方案"
        enabled:
          description: "开启思考"
          engine_args:
            default_chat_template_kwargs:
              enable_thinking: true
        disabled:
          description: "关闭思考"
          engine_args:
            default_chat_template_kwargs:
              enable_thinking: false
---
# source: whisper-asr-airgap.yaml
apiVersion: v1
kind: ModelCatalog
metadata:
  name: whisper-asr-airgap
  workspace: default
  annotations:
    recipe.vllm.ai/hardware-verified: "T4"
spec:
  engine:
    engine: flex
    version: v0.1.2
  base:
    engine_args:
      command: "speaches-serve --port $NEUTREE_FLEX_PORT"
      health_path: /health
      passthrough: true
      ready_timeout_s: 600
  variants:
    airgap:
      description: "Airgap Whisper large-v3（speaches 0.8.3 / faster-whisper，CTranslate2 fp16），OpenAI 兼容接口：POST /v1/audio/transcriptions（转写，支持 response_format=json/verbose_json/srt/vtt 与 stream=true）、POST /v1/audio/translations（译为英文）。请求必须带 model 字段，填 whisper-1 或 Systran/faster-whisper-large-v3。模型与 VAD 全部打包进镜像，可离线运行（HF_HUB_OFFLINE=1）。未指定语言时中文默认输出繁体，需要简体可在请求里加简体中文的 prompt。验证配置下默认 fp16 即可正确输出，无需 fp32；实测约 14 倍实时，显存占用约 4 GB。"
      model:
        registry: ""
        name: "-"
        version: ""
        task: text-generation
        info:
          parameter_count: "1.55B"
          quantization: fp16
          context_length: "448"
          architecture: dense
      vram_minimum_gb: 4
      resources:
        cpu: "2"
        memory: "8"
  features:
    - name: image
      group: 部署
      type: input
      display_name: "工作负载镜像"
      description: "airgap 镜像在你自己 registry 中的完整地址（registry/project/name:tag）。"
      input:
        value_type: string
        default: "<your-registry>/neutree-flex-whisper:airgap-v0.1.2"
      engine_args:
        image: "${value}"
