skills/vllm-omni-contrib/SKILL.md
Contribute to vLLM-Omni by adding new model support, fixing bugs, or improving features. Use when integrating a new model into vllm-omni, setting up a development environment, writing tests, or submitting pull requests to the vllm-omni project.
npx skillsauth add hsliuustc0106/vllm-omni-skills vllm-omni-contribInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
vLLM-Omni welcomes contributions including new model integrations, bug fixes, performance improvements, and documentation. This skill covers the development workflow, model integration process, and testing practices.
git clone https://github.com/<your-username>/vllm-omni.git
cd vllm-omni
uv venv --python $PYTHON_VERSION --seed
source .venv/bin/activate
uv pip install vllm==$VLLM_VERSION --torch-backend=auto
uv pip install -e ".[dev]"
pre-commit install
vllm_omni/
├── entrypoints/ # API entry points (Omni, AsyncOmni, API server)
├── engine/ # OmniRouter, pipeline orchestration
├── stages/ # Stage implementations (AR, Diffusion)
├── models/ # Model-specific implementations
├── connectors/ # OmniConnector for disaggregation
├── worker/ # Worker processes for distributed execution
└── utils/ # Shared utilities
Determine which category your model falls into:
Create a new file in vllm_omni/models/:
# vllm_omni/models/my_new_model.py
from vllm_omni.stages.base import BaseStage
class MyNewModelPipeline:
"""Pipeline for MyNewModel."""
def __init__(self, model_config, ...):
...
def generate(self, prompts, ...):
...
Add your model to the model registry so vLLM-Omni can discover it:
# In the appropriate registry file
SUPPORTED_MODELS = {
...
"MyNewModelPipeline": ("my_new_model", "MyNewModelPipeline"),
}
For out-of-tree plugins, use the public API instead:
from vllm_omni.diffusion.registry import register_diffusion_model
register_diffusion_model(
model_arch="MyNewModel",
module_name="my_plugin.models.my_new_model",
class_name="MyNewModelPipeline",
pre_process_func_name="pre_process", # optional
post_process_func_name="post_process", # optional
)
This registers custom diffusion pipelines without modifying core source. For out-of-tree plugins, module_name should be the full import path of the module containing the pipeline class.
Create a default stage config YAML:
# vllm_omni/configs/my_new_model.yaml
stages:
- name: "main"
stage_type: "diffusion" # or "ar"
stage_args:
runtime:
max_batch_size: 1
# tests/models/test_my_new_model.py
import pytest
from vllm_omni.entrypoints.omni import Omni
@pytest.mark.parametrize("prompt", [
"a simple test image",
"a red circle on white background",
])
def test_basic_generation(prompt):
omni = Omni(model="my-org/my-new-model")
outputs = omni.generate(prompt)
assert len(outputs) > 0
assert outputs[0].request_output[0].images is not None
Add your model to docs/models/supported_models.md with:
pytest tests/ -v
pytest tests/models/test_my_new_model.py -v
pytest tests/ --cov=vllm_omni --cov-report=html
pre-commit run --all-files
git checkout -b feat/add-my-modelpytest tests/pre-commit run --all-filesmainImport errors after install: Reinstall with uv pip install -e .
Tests fail with GPU errors: Some tests require a GPU. Run with pytest -m "not gpu" to skip GPU tests.
Pre-commit hook fails: Run pre-commit run --all-files to see specific issues.
OmniDiffusionConfig field name collision with vLLM attention_config: Fixed in #3489. Use diffusion_attention_config (not attention_config) in deploy YAML and code for diffusion pipelines. The old key is silently dropped.
RMSNorm inductor KeyError under HSDP + torch.compile: Fixed in #3460. fused_rms_norm inductor tracing now avoids calling .data on DTensor objects.
development
Use before submitting a PR to vllm-project/vllm-omni — self-check the branch against project conventions, catch dead code, verify accuracy/performance claims, and confirm merge readiness. Use when the user says "pre-check", "self review", "pre-submit check", or "check my PR before I open it."
development
--- name: vllm-omni-test-report description: Two report kinds; **default output is always HTML** unless the user explicitly asks for Markdown (.md). **Release** — `scripts/compose_full_report.py` (**测试结论**, Buildkite metrics, **Test Result** = Common stack + optional `--log-dir-h*` nightly-style summaries + H100/CI block, **Issue tracking** = GitHub `ci-failure` + *local test* in:title, Open bugs); use `--format markdown` only when the user wants .md or `patch_report_*.py`. **Nightly** — `script
testing
Review PRs on vllm-project/vllm-omni by routing to the right domain skills, checking critical evidence, and focusing comments on blocking issues. Use when reviewing pull requests or local branches, triaging review depth, running detailed or default review, or checking tests, benchmarks, and breaking changes in vllm-omni.
data-ai
Generate videos with vLLM-Omni using Wan2.2 and other video generation models. Use when generating videos from text, creating videos from images, configuring video generation parameters, or working with text-to-video or image-to-video models.