Skip to content

feat(vlm): default to Cosmos3 Nano Reasoner - #315

Open
wenxind-nvidia wants to merge 2 commits into
mainfrom
feat/cosmos3-nano-reasoner-default
Open

feat(vlm): default to Cosmos3 Nano Reasoner#315
wenxind-nvidia wants to merge 2 commits into
mainfrom
feat/cosmos3-nano-reasoner-default

Conversation

@wenxind-nvidia

Copy link
Copy Markdown
Collaborator

Summary

  • add a dedicated cosmos3_nano_reasoner client preset while retaining cosmos_vlm unchanged as the Cosmos-Reason1 compatibility option
  • default every shipped local VLM profile to nvidia/Cosmos3-Nano, NVIDIA's standard vLLM Reasoner path, with --async-scheduling, vLLM >= 0.23, and the 26.07 NGC vLLM image
  • default hosted NIM profiles to the Reasoner-specific served model nvidia/cosmos3-nano-reasoner
  • update the VLM MCP reference config, user docs, dependency map, changelog, and GPU smoke configuration

Reasoner, not Generator

nvidia/Cosmos3-Nano is NVIDIA's unified local checkpoint name. NVIDIA documents that standard vllm serve nvidia/Cosmos3-Nano --async-scheduling loads only the text-output Reasoner. The separate Generator requires vLLM-Omni plus both --omni and --model-class-name Cosmos3OmniDiffusersPipeline; xr-ai does not enable either flag.

A CPU regression test executes the shipped VLM wrapper config and asserts that the Reasoner command includes --async-scheduling while excluding --omni, --model-class-name, and Cosmos3OmniDiffusersPipeline. It also checks all local profiles and both hosted-NIM profiles use the intended Reasoner identifiers.

References:

Compatibility

Cosmos-Reason1 remains available: configure model: nvidia/Cosmos-Reason1-7B on vlm-server and select preset:cosmos_vlm in models.yaml. Its existing enable_thinking=false wire behavior is unchanged.

Validation

  • uv lock --directory ai-services/vlm-server
  • focused VLM/model/MCP/wire tests: 37 passed
  • full non-GPU suite after rebase: 635 passed, 2 skipped, 9 deselected
  • git diff --check

The GPU smoke test now targets Cosmos3 Nano Reasoner and the 26.07 image, but was not run locally because it requires the model/GPU runtime.

@wenxind-nvidia
wenxind-nvidia force-pushed the feat/cosmos3-nano-reasoner-default branch from b1e3811 to daccf77 Compare July 30, 2026 00:20
@nvddr

nvddr commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

Review outcome: changes required before merge.

Finding:

  • [P1] Rebase and port this change onto current main. GitHub currently reports the PR as CONFLICTING / DIRTY. The branch predates the service-layout and model-profile changes now on main: it still changes ai-services/vlm-server/ and the former YAML model profiles, while those surfaces have moved to services/vlm-server/ and the newer deployment-profile structure. The Cosmos3 changes therefore cannot be merged or validated against the repository as it exists today. Please rebase, resolve the path/profile migrations intentionally, and rerun the CPU suite and GPU VLM smoke test on the resulting head.

CI on the current PR head is green (all reported checks passed), but it ran against the old base and does not clear the current merge conflict.

@wenxind-nvidia
wenxind-nvidia force-pushed the feat/cosmos3-nano-reasoner-default branch from daccf77 to 934f886 Compare August 11, 2026 18:10
github-actions Bot added a commit that referenced this pull request Aug 11, 2026
Signed-off-by: wenxind <wenxind@nvidia.com>
@wenxind-nvidia
wenxind-nvidia force-pushed the feat/cosmos3-nano-reasoner-default branch from 934f886 to 48d0754 Compare August 11, 2026 19:08
github-actions Bot added a commit that referenced this pull request Aug 11, 2026
Signed-off-by: Wenxin Ding <wenxind@nvidia.com>
flush=True,
)
proc = subprocess.Popen(argv, start_new_session=True)
existing = False
)
proc = subprocess.Popen(argv, start_new_session=True)
existing = False
running = False
if not remove_container(container_name):
log.error("Unable to remove stale container %s", container_name)
sys.exit(1)
existing = False
log.error("Unable to remove stale container %s", container_name)
sys.exit(1)
existing = False
running = False
github-actions Bot added a commit that referenced this pull request Aug 11, 2026

@yanziz-nvidia yanziz-nvidia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed by yanziz-reviewer-bot

Summary

Adds a cosmos3_nano_reasoner client preset and makes it the default across local and hosted VLM profiles, bumps vlm-server's vLLM floor to >=0.23.0, moves shipped YAML configs to vllm_image: 26.07-py3 + async_scheduling: true, and adds a fingerprint-based lifecycle manager that replaces stale persistent runtimes on config change. CI green (CodeQL, DCO, lint, lock-check, SPDX, pytest 3.11/3.12, docs); DEPENDENCIES.md, changelog, and docs updated.

Legend: 🚫 Blocker · 💡 Suggestion · 🔍 Nit

Finding
🚫 None
💡 tests/test_vllm_docker.py:344test_pid_on_port_returns_none_when_tools_missing patches xr_ai_vllm._docker.subprocess.check_output, but pid_on_port is imported from xr_ai_vllm._process (line 26). The mock never intercepts, so the assert passes on a real check_output against a quiet port rather than on the tool-missing fallback.
🔍 None

Actionables (for bots — copy-paste-ready for AI)

Fix if it makes sense in context — these are agent-generated suggestions, not human-vetted obligations. Skip anything that's wrong, already addressed, or not worth the churn.

  • tests/test_vllm_docker.py:344 — Retarget the patch to "xr_ai_vllm._process.subprocess.check_output" so the FileNotFoundError side effect reaches pid_on_port in its current module.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants