From dcfc2656cb21a2eb608ff0f41c4c15ea24c9dc5d Mon Sep 17 00:00:00 2001
From: wanzihao <1060304770@qq.com>
Date: Mon, 20 Jul 2026 14:35:10 +0800
Subject: [PATCH 1/2] compute image start_idx after audio expansion
---
lightllm/models/qwen3_omni_moe_thinker/model.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lightllm/models/qwen3_omni_moe_thinker/model.py b/lightllm/models/qwen3_omni_moe_thinker/model.py
index 45fb16f701..a221492126 100644
--- a/lightllm/models/qwen3_omni_moe_thinker/model.py
+++ b/lightllm/models/qwen3_omni_moe_thinker/model.py
@@ -101,7 +101,6 @@ def encode(self, prompt, multimodal_params: MultimodalParams = None, **kwargs):
input_ids.extend(origin_ids[: start_idx + 1])
token_id = multimodal_params.images[image_id].token_id
token_num = multimodal_params.images[image_id].token_num
- multimodal_params.images[image_id].start_idx = len(input_ids)
input_ids.extend(range(token_id, token_id + token_num))
input_ids.append(self.image_end_id)
origin_ids = origin_ids[start_idx + 2 :]
@@ -144,6 +143,12 @@ def encode(self, prompt, multimodal_params: MultimodalParams = None, **kwargs):
raise ValueError(audio_cnt == audio_id, f"invalid audio tag num: {audio_cnt} vs {audio_id}!")
input_ids.extend(origin_ids)
+ if multimodal_params:
+ image_search_start = 0
+ for image in multimodal_params.images:
+ image.start_idx = input_ids.index(image.token_id, image_search_start)
+ image_search_start = image.start_idx + image.token_num
+
return input_ids
From 8ee9a96abd4bf7cf801198f1b187869960b247e9 Mon Sep 17 00:00:00 2001
From: wanzihao <1060304770@qq.com>
Date: Tue, 21 Jul 2026 15:13:00 +0800
Subject: [PATCH 2/2] Simplify
---
.../models/qwen3_omni_moe_thinker/model.py | 56 +++++++++----------
1 file changed, 26 insertions(+), 30 deletions(-)
diff --git a/lightllm/models/qwen3_omni_moe_thinker/model.py b/lightllm/models/qwen3_omni_moe_thinker/model.py
index a221492126..e4ea3ccc34 100644
--- a/lightllm/models/qwen3_omni_moe_thinker/model.py
+++ b/lightllm/models/qwen3_omni_moe_thinker/model.py
@@ -89,34 +89,8 @@ def encode(self, prompt, multimodal_params: MultimodalParams = None, **kwargs):
#
->
origin_ids = [token for token in origin_ids if token not in (self.image_token_id, self.audio_token_id)]
- #
-->
id,id+1...id+num
- input_ids = []
- image_id = 0
- while True:
- try:
- start_idx = origin_ids.index(self.image_start_id)
- if start_idx + 1 >= len(origin_ids):
- break
- if origin_ids[start_idx + 1] == self.image_end_id:
- input_ids.extend(origin_ids[: start_idx + 1])
- token_id = multimodal_params.images[image_id].token_id
- token_num = multimodal_params.images[image_id].token_num
- input_ids.extend(range(token_id, token_id + token_num))
- input_ids.append(self.image_end_id)
- origin_ids = origin_ids[start_idx + 2 :]
- image_id += 1
- else:
- raise ValueError("image token error")
- except ValueError:
- break
- if multimodal_params:
- image_cnt = len(multimodal_params.images)
- if image_cnt != image_id:
- raise ValueError(image_cnt == image_id, f"invalid image tag num: {image_cnt} vs {image_id}!")
- input_ids.extend(origin_ids)
# audio
- origin_ids = input_ids
input_ids = []
audio_id = 0
start_idx = 0
@@ -143,11 +117,33 @@ def encode(self, prompt, multimodal_params: MultimodalParams = None, **kwargs):
raise ValueError(audio_cnt == audio_id, f"invalid audio tag num: {audio_cnt} vs {audio_id}!")
input_ids.extend(origin_ids)
+ #
-->
id,id+1...id+num
+ origin_ids = input_ids
+ input_ids = []
+ image_id = 0
+ while True:
+ try:
+ start_idx = origin_ids.index(self.image_start_id)
+ if start_idx + 1 >= len(origin_ids):
+ break
+ if origin_ids[start_idx + 1] == self.image_end_id:
+ input_ids.extend(origin_ids[: start_idx + 1])
+ token_id = multimodal_params.images[image_id].token_id
+ token_num = multimodal_params.images[image_id].token_num
+ multimodal_params.images[image_id].start_idx = len(input_ids)
+ input_ids.extend(range(token_id, token_id + token_num))
+ input_ids.append(self.image_end_id)
+ origin_ids = origin_ids[start_idx + 2 :]
+ image_id += 1
+ else:
+ raise ValueError("image token error")
+ except ValueError:
+ break
if multimodal_params:
- image_search_start = 0
- for image in multimodal_params.images:
- image.start_idx = input_ids.index(image.token_id, image_search_start)
- image_search_start = image.start_idx + image.token_num
+ image_cnt = len(multimodal_params.images)
+ if image_cnt != image_id:
+ raise ValueError(image_cnt == image_id, f"invalid image tag num: {image_cnt} vs {image_id}!")
+ input_ids.extend(origin_ids)
return input_ids