From 6ebf3137905f1329dfd3f4c5ccf3f87c16f88ddc Mon Sep 17 00:00:00 2001 From: Maximilien de Bayser Date: Wed, 16 Jul 2025 01:12:14 -0300 Subject: [PATCH] Avoid direct comparison of floating point numbers (#21002) Signed-off-by: Max de Bayser --- tests/entrypoints/openai/test_classification.py | 6 +++++- tests/entrypoints/openai/test_embedding.py | 17 +++++++++++++++-- tests/entrypoints/openai/test_pooling.py | 16 ++++++++++++++-- tests/entrypoints/openai/test_rerank.py | 6 +++++- tests/entrypoints/openai/test_score.py | 6 +++++- 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/tests/entrypoints/openai/test_classification.py b/tests/entrypoints/openai/test_classification.py index 330c7ff5c92f6..b2472658ca81c 100644 --- a/tests/entrypoints/openai/test_classification.py +++ b/tests/entrypoints/openai/test_classification.py @@ -176,4 +176,8 @@ async def test_invocations(server: RemoteOpenAIServer): invocation_output = invocation_response.json() assert classification_output.keys() == invocation_output.keys() - assert classification_output["data"] == invocation_output["data"] + for classification_data, invocation_data in zip( + classification_output["data"], invocation_output["data"]): + assert classification_data.keys() == invocation_data.keys() + assert classification_data["probs"] == pytest.approx( + invocation_data["probs"], rel=0.01) diff --git a/tests/entrypoints/openai/test_embedding.py b/tests/entrypoints/openai/test_embedding.py index 143999edeafa3..f03c96b12179c 100644 --- a/tests/entrypoints/openai/test_embedding.py +++ b/tests/entrypoints/openai/test_embedding.py @@ -14,6 +14,7 @@ from vllm.transformers_utils.tokenizer import get_tokenizer from ...models.language.pooling.embed_utils import ( run_embedding_correctness_test) +from ...models.utils import check_embeddings_close from ...utils import RemoteOpenAIServer MODEL_NAME = "intfloat/multilingual-e5-small" @@ -321,7 +322,13 @@ async def test_invocations(server: RemoteOpenAIServer, invocation_output = invocation_response.json() assert completion_output.keys() == invocation_output.keys() - assert completion_output["data"] == invocation_output["data"] + for completion_data, invocation_data in zip(completion_output["data"], + invocation_output["data"]): + assert completion_data.keys() == invocation_data.keys() + check_embeddings_close(embeddings_0_lst=[completion_data["embedding"]], + embeddings_1_lst=[invocation_data["embedding"]], + name_0="completion", + name_1="invocation") @pytest.mark.asyncio @@ -355,4 +362,10 @@ async def test_invocations_conversation(server: RemoteOpenAIServer): invocation_output = invocation_response.json() assert chat_output.keys() == invocation_output.keys() - assert chat_output["data"] == invocation_output["data"] + for chat_data, invocation_data in zip(chat_output["data"], + invocation_output["data"]): + assert chat_data.keys() == invocation_data.keys() + check_embeddings_close(embeddings_0_lst=[chat_data["embedding"]], + embeddings_1_lst=[invocation_data["embedding"]], + name_0="chat", + name_1="invocation") diff --git a/tests/entrypoints/openai/test_pooling.py b/tests/entrypoints/openai/test_pooling.py index 8752b128d54c9..02165ee6d58eb 100644 --- a/tests/entrypoints/openai/test_pooling.py +++ b/tests/entrypoints/openai/test_pooling.py @@ -281,7 +281,13 @@ async def test_invocations(server: RemoteOpenAIServer): invocation_output = invocation_response.json() assert completion_output.keys() == invocation_output.keys() - assert completion_output["data"] == invocation_output["data"] + for completion_data, invocation_data in zip(completion_output["data"], + invocation_output["data"]): + assert completion_data.keys() == invocation_data.keys() + check_embeddings_close(embeddings_0_lst=completion_data["data"], + embeddings_1_lst=invocation_data["data"], + name_0="completion", + name_1="invocation") @pytest.mark.asyncio @@ -314,4 +320,10 @@ async def test_invocations_conversation(server: RemoteOpenAIServer): invocation_output = invocation_response.json() assert chat_output.keys() == invocation_output.keys() - assert chat_output["data"] == invocation_output["data"] + for chat_data, invocation_data in zip(chat_output["data"], + invocation_output["data"]): + assert chat_data.keys() == invocation_data.keys() + check_embeddings_close(embeddings_0_lst=chat_data["data"], + embeddings_1_lst=invocation_data["data"], + name_0="chat", + name_1="invocation") diff --git a/tests/entrypoints/openai/test_rerank.py b/tests/entrypoints/openai/test_rerank.py index 16a947bc3fea8..4da97fe13691b 100644 --- a/tests/entrypoints/openai/test_rerank.py +++ b/tests/entrypoints/openai/test_rerank.py @@ -120,4 +120,8 @@ def test_invocations(server: RemoteOpenAIServer): invocation_output = invocation_response.json() assert rerank_output.keys() == invocation_output.keys() - assert rerank_output["results"] == invocation_output["results"] + for rerank_result, invocations_result in zip(rerank_output["results"], + invocation_output["results"]): + assert rerank_result.keys() == invocations_result.keys() + assert rerank_result["relevance_score"] == pytest.approx( + invocations_result["relevance_score"], rel=0.01) diff --git a/tests/entrypoints/openai/test_score.py b/tests/entrypoints/openai/test_score.py index 4d3bbd9decc0c..187542b7bafc9 100644 --- a/tests/entrypoints/openai/test_score.py +++ b/tests/entrypoints/openai/test_score.py @@ -215,4 +215,8 @@ class TestModel: invocation_output = invocation_response.json() assert score_output.keys() == invocation_output.keys() - assert score_output["data"] == invocation_output["data"] + for score_data, invocation_data in zip(score_output["data"], + invocation_output["data"]): + assert score_data.keys() == invocation_data.keys() + assert score_data["score"] == pytest.approx( + invocation_data["score"], rel=0.01)