diff --git a/tests/examples/helpers.py b/tests/examples/helpers.py index 137d15f16..cc4832065 100644 --- a/tests/examples/helpers.py +++ b/tests/examples/helpers.py @@ -351,3 +351,33 @@ def strip_trailing_audio_saved_line(text: str) -> str: while lines and lines[-1].strip().startswith("Audio saved to"): lines.pop() return "\n".join(lines).strip() + + +def strip_audio_saved_to_lines(text: str) -> str: + """Remove every line starting with ``Audio saved to`` (streaming prints one per chunk). + + Without this, :func:`extract_content_after_keyword` with ``content:`` and ``DOTALL`` + keeps those lines inside the captured text segment. + """ + lines = [ln for ln in text.splitlines() if not ln.strip().startswith("Audio saved to")] + return "\n".join(lines).strip() + + +def extract_last_audio_saved_path(text: str) -> str: + """Return the filesystem path from the last ``Audio saved to`` line. + + Non-streaming output has a single line; streaming prints one path per chunk. + Do not use :func:`extract_content_after_keyword` with ``Audio saved to`` for + streaming: greedy ``.+`` under ``DOTALL`` concatenates every path and body into one + invalid string (Linux ``File name too long`` when opening it as a path). + """ + last_path: str | None = None + for line in text.splitlines(): + stripped = line.strip() + if stripped.startswith("Audio saved to"): + rest = stripped[len("Audio saved to") :].strip() + if rest: + last_path = rest + if last_path is None: + raise AssertionError("'Audio saved to' line with a path not found in command output") + return last_path diff --git a/tests/examples/online_serving/test_qwen2_5_omni.py b/tests/examples/online_serving/test_qwen2_5_omni.py index b3e49b8d9..fdce3b46c 100644 --- a/tests/examples/online_serving/test_qwen2_5_omni.py +++ b/tests/examples/online_serving/test_qwen2_5_omni.py @@ -10,7 +10,9 @@ import pytest from tests.examples.helpers import ( extract_content_after_keyword, + extract_last_audio_saved_path, run_cmd, + strip_audio_saved_to_lines, strip_trailing_audio_saved_line, ) from tests.helpers.mark import hardware_test @@ -55,8 +57,8 @@ def test_send_multimodal_request_001(omni_server) -> None: text_content = strip_trailing_audio_saved_line(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") print(f"audio content is: {audio_content}") @@ -91,8 +93,8 @@ def test_send_multimodal_request_002(omni_server) -> None: text_content = strip_trailing_audio_saved_line(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") assert all(keyword in text_content for keyword in ["baby", "book"]), ( "The output does not contain any of the keywords in video description." @@ -176,8 +178,8 @@ def test_modality_control_002(omni_server) -> None: result = run_cmd(command) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"audio content is: {audio_content}") assert all(keyword in audio_content for keyword in ["baby", "book"]), ( "The output does not contain any of the keywords in video description." @@ -207,8 +209,8 @@ def test_modality_control_003(omni_server) -> None: text_content = strip_trailing_audio_saved_line(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") assert all(keyword in text_content for keyword in ["baby", "book"]), ( "The output does not contain any of the keywords in video description." @@ -239,11 +241,11 @@ def test_stream_001(omni_server) -> None: result = run_cmd(command) text_content_tmp = extract_content_after_keyword("content:", result) - text_content = strip_trailing_audio_saved_line(text_content_tmp) + text_content = strip_audio_saved_to_lines(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") assert all(keyword in text_content for keyword in ["baby", "book"]), ( "The output does not contain any of the keywords in video description." diff --git a/tests/examples/online_serving/test_qwen3_omni.py b/tests/examples/online_serving/test_qwen3_omni.py index e52a2bf5a..d41e6e9ea 100644 --- a/tests/examples/online_serving/test_qwen3_omni.py +++ b/tests/examples/online_serving/test_qwen3_omni.py @@ -10,7 +10,9 @@ import pytest from tests.examples.helpers import ( extract_content_after_keyword, + extract_last_audio_saved_path, run_cmd, + strip_audio_saved_to_lines, strip_trailing_audio_saved_line, ) from tests.helpers.mark import hardware_test @@ -51,9 +53,9 @@ def test_send_multimodal_request_001(omni_server) -> None: result = run_cmd(command) text_content_tmp = extract_content_after_keyword("Chat completion output from text:", result) text_content = strip_trailing_audio_saved_line(text_content_tmp) - wav_path = extract_content_after_keyword("Audio saved to", result) + wav_path = extract_last_audio_saved_path(result) # Verify text output same as audio output - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") print(f"audio content is: {audio_content}") @@ -83,8 +85,8 @@ def test_send_multimodal_request_002(omni_server) -> None: text_content = strip_trailing_audio_saved_line(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") print(f"audio content is: {audio_content}") assert all(keyword in text_content for keyword in ["baby", "book"]), ( @@ -148,8 +150,8 @@ def test_modality_control_002(omni_server) -> None: result = run_cmd(command) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"audio content is: {audio_content}") assert "cherry blossom" in audio_content, "The output does not contain any of the keywords." @@ -174,8 +176,8 @@ def test_modality_control_003(omni_server) -> None: text_content = strip_trailing_audio_saved_line(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") assert "cherry blossom" in audio_content, "The output does not contain any of the keywords." print(f"audio content is: {audio_content}") @@ -200,11 +202,11 @@ def test_stream_001(omni_server) -> None: result = run_cmd(command) text_content_tmp = extract_content_after_keyword("content:", result) - text_content = strip_trailing_audio_saved_line(text_content_tmp) + text_content = strip_audio_saved_to_lines(text_content_tmp) # Verify text output same as audio output - wav_path = extract_content_after_keyword("Audio saved to", result) - audio_content = convert_audio_file_to_text(output_path=f"./{wav_path.strip()}") + wav_path = extract_last_audio_saved_path(result) + audio_content = convert_audio_file_to_text(output_path=f"./{wav_path}") print(f"text content is: {text_content}") assert "cherry blossom" in audio_content, "The output does not contain any of the keywords." print(f"audio content is: {audio_content}")