Skip to content

Add Qwen2.5 Omni Talker export - #742

Open
rui-ren wants to merge 9 commits into
ruiren/onboard-qwen25-omnifrom
ruiren/onboard-qwen25-omni-talker
Open

rui-ren wants to merge 9 commits into
ruiren/onboard-qwen25-omnifrom
ruiren/onboard-qwen25-omni-talker

Conversation

@rui-ren

@rui-ren rui-ren commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add independent Thinker and Talker configs.
  • Add codec embedding plus Talker decoder/KV export.
  • Retain Thinker-only behavior.

Validation

  • compileall and git diff --check passed.
  • Focused pytest was blocked by TLS dependency bootstrap.

Preserve independent Thinker/Talker configs and export the codec embedding plus Talker decoder graphs.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown

Performance Comparison

Comparing 8dd555c86214c69a

Model Metric Baseline Current Delta
bert (feature-extraction) model_size_bytes 359 KB 359 KB +0.0%
bert (feature-extraction) num_nodes 68 68 +0.0%
falcon model_size_bytes 364 KB 364 KB +0.0%
falcon num_nodes 66 66 +0.0%
gemma2 model_size_bytes 428 KB 428 KB +0.0%
gemma2 num_nodes 105 105 +0.0%
gpt2 model_size_bytes 324 KB 324 KB +0.0%
gpt2 num_nodes 54 54 +0.0%
llama model_size_bytes 425 KB 425 KB +0.0%
llama num_nodes 60 60 +0.0%
llama (static-cache) model_size_bytes 425 KB 425 KB +0.0%
llama (static-cache) num_nodes 56 56 +0.0%
mamba (ssm-text-generation) model_size_bytes 296 KB 296 KB +0.0%
mamba (ssm-text-generation) num_nodes 94 94 +0.0%
phi3 model_size_bytes 421 KB 421 KB +0.0%
phi3 num_nodes 58 58 +0.0%
phi3 (static-cache) model_size_bytes 421 KB 421 KB +0.0%
phi3 (static-cache) num_nodes 54 54 +0.0%
qwen2 model_size_bytes 425 KB 425 KB +0.0%
qwen2 num_nodes 60 60 +0.0%
qwen2 (static-cache) model_size_bytes 425 KB 425 KB +0.0%
qwen2 (static-cache) num_nodes 56 56 +0.0%
qwen3_5_moe (hybrid-text-generation) model_size_bytes 506 KB 506 KB +0.0%
qwen3_5_moe (hybrid-text-generation) num_nodes 265 265 +0.0%
qwen3_5_text (hybrid-text-generation) model_size_bytes 458 KB 458 KB +0.0%
qwen3_5_text (hybrid-text-generation) num_nodes 127 127 +0.0%
qwen3_5_vl (hybrid-qwen-vl) model_size_bytes 977 KB 977 KB +0.0%
qwen3_5_vl (hybrid-qwen-vl) num_nodes 450 450 +0.0%
t5 (seq2seq) model_size_bytes 836 KB 836 KB +0.0%
t5 (seq2seq) num_nodes 176 176 +0.0%
whisper (speech-to-text) model_size_bytes 1008 KB 1008 KB +0.0%
whisper (speech-to-text) num_nodes 128 128 +0.0%

No performance regressions.

@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown

🏗️ Architecture Diff

Comparing 8dd555c86214c69a

Model Sub-model Changes Status
bert (feature-extraction) model 0
falcon model 0
gemma2 model 0
gemma4 (gemma4) decoder 0
gemma4 (gemma4) embedding 0
gemma4 (gemma4) vision_encoder 0
gemma4_text model 0
gpt2 model 0
llama model 0
llama (static-cache) model 0
mamba (ssm-text-generation) model 0
phi3 model 0
phi3 (static-cache) model 0
qwen model 0
qwen (static-cache) model 0
qwen2 model 0
qwen2 (static-cache) model 0
qwen2_moe model 0
qwen2_moe (static-cache) model 0
qwen3 model 0
qwen3 (static-cache) model 0
qwen3_5_moe (hybrid-text-generation) model 0
qwen3_5_text (hybrid-text-generation) model 0
qwen3_5_vl (hybrid-qwen-vl) decoder 0
qwen3_5_vl (hybrid-qwen-vl) embedding 0
qwen3_5_vl (hybrid-qwen-vl) vision_encoder 0
qwen3_moe model 0
qwen3_moe (static-cache) model 0
qwen3_next (hybrid-text-generation) model 0
t5 (seq2seq) decoder 0
t5 (seq2seq) encoder 0
whisper (speech-to-text) decoder 0
whisper (speech-to-text) encoder 0

No architecture changes detected.


Legend: ⚪ No change · 🔵 Minor (attrs/inits) · 🟡 Moderate (nodes added/removed) · 🔴 Major (interface changed)

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Talker weight loading, MRoPE extraction, hidden-state availability, and GQA cache metadata contain blocking correctness issues.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds Qwen2.5-Omni Talker ONNX export while preserving Thinker-only builds.

Changes:

  • Adds Talker configuration extraction and dtype propagation.
  • Adds codec embedding, Talker decoder, and KV-cache graphs.
  • Extends graph and weight-routing tests.
File summaries
File Description
src/mobius/_builder.py Resolves Thinker config and propagates dtype to Talker.
src/mobius/_configs/_base.py Adds Talker dimensions and nested configuration.
src/mobius/models/__init__.py Exports Talker model classes.
src/mobius/models/qwen25_omni.py Implements Talker model and weight routing.
src/mobius/models/qwen25_omni_test.py Tests config extraction and weight routing.
src/mobius/tasks/_qwen25_omni.py Builds Talker embedding and decoder graphs.
tests/build_graph_test.py Verifies six-model and Thinker-only packages.
Review details
  • Files reviewed: 7/7 changed files
  • Comments generated: 4
  • Review effort level: Balanced

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +493 to +495
# The host combines Thinker reply states, text embeddings, and codec
# embeddings in the shared embedding space before this projection.
hidden_states = self.thinker_to_talker_proj(op, inputs_embeds)
Comment on lines +55 to +56
models["talker_embedding"] = self._build_talker_embedding(
module.talker.model.embed_tokens, config.talker
Comment on lines +991 to +996
if model_type == "qwen2_5_omni_text" and parent_config is not None:
talker_config = getattr(parent_config, "talker_config", None)
if talker_config is not None:
if isinstance(talker_config, dict):
talker_config = type("TalkerConfig", (), talker_config)()
options["talker"] = ArchitectureConfig.from_transformers(talker_config)
Comment thread src/mobius/tasks/_qwen25_omni.py Outdated
Copilot AI added 7 commits September 17, 2026 17:59
Register the specialized tiny graph config and public checkpoint used by L1 and L2 coverage checks.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Preserve the reviewed Thinker implementation and migrated test layout while integrating Talker graph export, nested configuration, and coverage metadata.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Keep the reviewed full-checkpoint Thinker selection while extending its regression coverage to the Talker models.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Disable the optional Talker graphs in the Thinker-only synthetic parity test so its strict weight mapping checks only the four components represented by the Hugging Face reference model.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Expect the optional Talker embedding and decoder in the representative six-model speech package across supported graph dtypes.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Exclude the six-stage multimodal Talker pipeline from the generic L4/L5 golden runner while retaining its dedicated L1 graph and L3 Thinker parity coverage.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Expose normalized Thinker hidden states for Talker orchestration, align the directly traced codec embedding weight, preserve non-interleaved MRoPE sections, and stamp Talker cache metadata for fused attention exports.

Signed-off-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
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.

4 participants