[Feature] Support Qwen Omni online batch inference (#438)

Signed-off-by: ZeldaHuang <hzm414167@alibaba-inc.com>
This commit is contained in:
Ziming Huang authored and GitHub committed 2025-12-25 19:38:48 +08:00
1 parent 3ec35e5409
commit 1a7dcdf65c
2 files changed
+126 -84

No files matched your search

+39 -23
View File
@@ -4,6 +4,7 @@
E2E Online tests for Qwen3-Omni model with video input and audio output.
"""
import concurrent.futures
import os
import socket
import subprocess
@@ -167,40 +168,55 @@ def dummy_messages_from_video_data(
@pytest.mark.parametrize("omni_server", test_params, indirect=True)
def test_video_to_audio(
def test_video_to_audio_concurrent(
client: openai.OpenAI,
omni_server,
base64_encoded_video: str,
) -> None:
"""Test processing video, generating audio output via OpenAI API."""
"""Test processing video with multiple concurrent completions, generating audio output via OpenAI API."""
# Create data URL for the base64 encoded video
video_data_url = f"data:video/mp4;base64,{base64_encoded_video}"
messages = dummy_messages_from_video_data(video_data_url)
# Test single completion
chat_completion = client.chat.completions.create(
model=omni_server.model,
messages=messages,
)
# Test multiple concurrent completions
num_concurrent_requests = 5
assert len(chat_completion.choices) == 2 # 1 for text output, 1 for audio output
with concurrent.futures.ThreadPoolExecutor(max_workers=num_concurrent_requests) as executor:
# Submit multiple completion requests concurrently
futures = [
executor.submit(
client.chat.completions.create,
model=omni_server.model,
messages=messages,
)
for _ in range(num_concurrent_requests)
]
# Verify text output
text_choice = chat_completion.choices[0]
assert text_choice.finish_reason == "length"
# Wait for all requests to complete and collect results
chat_completions = [future.result() for future in concurrent.futures.as_completed(futures)]
# Verify we got a response
text_message = text_choice.message
assert text_message.content is not None and len(text_message.content) >= 10
assert text_message.role == "assistant"
# Verify all completions succeeded
assert len(chat_completions) == num_concurrent_requests
# Verify audio output
audio_choice = chat_completion.choices[1]
assert audio_choice.finish_reason == "stop"
audio_message = audio_choice.message
for chat_completion in chat_completions:
assert len(chat_completion.choices) == 2 # 1 for text output, 1 for audio output
# Check if audio was generated
if hasattr(audio_message, "audio") and audio_message.audio:
assert audio_message.audio.data is not None
assert len(audio_message.audio.data) > 0
# Verify text output
text_choice = chat_completion.choices[0]
assert text_choice.finish_reason == "length"
# Verify we got a response
text_message = text_choice.message
assert text_message.content is not None and len(text_message.content) >= 10
assert text_message.role == "assistant"
# Verify audio output
audio_choice = chat_completion.choices[1]
assert audio_choice.finish_reason == "stop"
audio_message = audio_choice.message
# Check if audio was generated
if hasattr(audio_message, "audio") and audio_message.audio:
assert audio_message.audio.data is not None
assert len(audio_message.audio.data) > 0