[smg][ci] migrate reasoning_content tests to new infrastructure (#16741)
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
"""Reasoning Content E2E Tests.
|
||||
|
||||
Tests for chat completions with reasoning content (DeepSeek R1 reasoning parser).
|
||||
|
||||
Source: Migrated from e2e_grpc/features/test_reasoning_content.py
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
import pytest
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Reasoning Content API Tests (DeepSeek 7B)
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@pytest.mark.model("deepseek-7b")
|
||||
@pytest.mark.gateway(
|
||||
extra_args=["--reasoning-parser", "deepseek_r1", "--history-backend", "memory"]
|
||||
)
|
||||
@pytest.mark.parametrize("setup_backend", ["grpc"], indirect=True)
|
||||
class TestReasoningContentAPI:
|
||||
"""Tests for reasoning content API with DeepSeek R1 reasoning parser."""
|
||||
|
||||
def test_streaming_separate_reasoning_false(self, setup_backend):
|
||||
"""Test streaming with separate_reasoning=False, reasoning_content should be empty."""
|
||||
_, model, client, gateway = setup_backend
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is 1+3?",
|
||||
}
|
||||
],
|
||||
max_tokens=100,
|
||||
stream=True,
|
||||
extra_body={"separate_reasoning": False},
|
||||
)
|
||||
|
||||
reasoning_content = ""
|
||||
content = ""
|
||||
for chunk in response:
|
||||
if chunk.choices[0].delta.content:
|
||||
content += chunk.choices[0].delta.content
|
||||
elif chunk.choices[0].delta.reasoning_content:
|
||||
reasoning_content += chunk.choices[0].delta.reasoning_content
|
||||
|
||||
assert len(reasoning_content) == 0
|
||||
assert len(content) > 0
|
||||
|
||||
def test_streaming_separate_reasoning_true(self, setup_backend):
|
||||
"""Test streaming with separate_reasoning=True, reasoning_content should not be empty."""
|
||||
_, model, client, gateway = setup_backend
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is 1+3?",
|
||||
}
|
||||
],
|
||||
max_tokens=100,
|
||||
stream=True,
|
||||
extra_body={"separate_reasoning": True},
|
||||
)
|
||||
|
||||
reasoning_content = ""
|
||||
content = ""
|
||||
for chunk in response:
|
||||
if chunk.choices[0].delta.content:
|
||||
content += chunk.choices[0].delta.content
|
||||
elif chunk.choices[0].delta.reasoning_content:
|
||||
reasoning_content += chunk.choices[0].delta.reasoning_content
|
||||
|
||||
assert len(reasoning_content) > 0
|
||||
assert len(content) > 0
|
||||
|
||||
def test_streaming_separate_reasoning_true_stream_reasoning_false(
|
||||
self, setup_backend
|
||||
):
|
||||
"""Test streaming with separate_reasoning=True and stream_reasoning=False."""
|
||||
_, model, client, gateway = setup_backend
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is 1+3?",
|
||||
}
|
||||
],
|
||||
max_tokens=100,
|
||||
stream=True,
|
||||
extra_body={"separate_reasoning": True, "stream_reasoning": False},
|
||||
)
|
||||
|
||||
reasoning_content = ""
|
||||
content = ""
|
||||
first_chunk = False
|
||||
for chunk in response:
|
||||
if chunk.choices[0].delta.reasoning_content:
|
||||
reasoning_content = chunk.choices[0].delta.reasoning_content
|
||||
first_chunk = True
|
||||
if chunk.choices[0].delta.content:
|
||||
content += chunk.choices[0].delta.content
|
||||
if not first_chunk:
|
||||
reasoning_content = chunk.choices[0].delta.reasoning_content
|
||||
first_chunk = True
|
||||
if not first_chunk:
|
||||
assert (
|
||||
not chunk.choices[0].delta.reasoning_content
|
||||
or len(chunk.choices[0].delta.reasoning_content) == 0
|
||||
)
|
||||
|
||||
assert len(reasoning_content) > 0
|
||||
assert len(content) > 0
|
||||
|
||||
def test_nonstreaming_separate_reasoning_false(self, setup_backend):
|
||||
"""Test non-streaming with separate_reasoning=False, reasoning_content should be empty."""
|
||||
_, model, client, gateway = setup_backend
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is 1+3?",
|
||||
}
|
||||
],
|
||||
max_tokens=100,
|
||||
extra_body={"separate_reasoning": False},
|
||||
)
|
||||
|
||||
assert (
|
||||
not response.choices[0].message.reasoning_content
|
||||
or len(response.choices[0].message.reasoning_content) == 0
|
||||
)
|
||||
assert len(response.choices[0].message.content) > 0
|
||||
|
||||
def test_nonstreaming_separate_reasoning_true(self, setup_backend):
|
||||
"""Test non-streaming with separate_reasoning=True, reasoning_content should not be empty."""
|
||||
_, model, client, gateway = setup_backend
|
||||
|
||||
response = client.chat.completions.create(
|
||||
model=model,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": "What is 1+3?",
|
||||
}
|
||||
],
|
||||
max_tokens=100,
|
||||
extra_body={"separate_reasoning": True},
|
||||
)
|
||||
|
||||
assert len(response.choices[0].message.reasoning_content) > 0
|
||||
assert len(response.choices[0].message.content) > 0
|
||||
Reference in New Issue
Block a user