Fix : Ci fail for infinity on level p3 (#15757)

### What problem does this PR solve?

fix failing p3 tests

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
Idriss Sbaaoui
2026-06-08 16:35:33 +08:00
committed by GitHub
parent 67ce0c896d
commit 653d4bdbf5
7 changed files with 71 additions and 21 deletions

View File

@@ -20,6 +20,48 @@ from ragflow_sdk import Chat, Chunk, DataSet, Document, RAGFlow, Session
from utils.file_utils import create_txt_file
REST_API_MAX_PAGE_SIZE = 100
def list_all_documents(dataset: DataSet, *, limit: int | None = None, page_size: int = REST_API_MAX_PAGE_SIZE) -> list[Document]:
page_size = min(page_size, REST_API_MAX_PAGE_SIZE)
documents: list[Document] = []
page = 1
while True:
batch = dataset.list_documents(page=page, page_size=page_size)
documents.extend(batch)
if limit is not None and len(documents) >= limit:
return documents[:limit]
if len(batch) < page_size:
return documents
page += 1
def list_all_sessions(chat_assistant: Chat, *, limit: int | None = None, page_size: int = REST_API_MAX_PAGE_SIZE) -> list[Session]:
page_size = min(page_size, REST_API_MAX_PAGE_SIZE)
sessions: list[Session] = []
page = 1
while True:
batch = chat_assistant.list_sessions(page=page, page_size=page_size)
sessions.extend(batch)
if limit is not None and len(sessions) >= limit:
return sessions[:limit]
if len(batch) < page_size:
return sessions
page += 1
def valid_chat_llm_id(client: RAGFlow) -> str:
# SDK tests use the tenant's configured chat model; this helper discovers test fixture state, not SDK behavior.
res = client.get('/users/me/models')
data = res.json()
if data.get('code') == 0:
llm_id = (data.get('data') or {}).get('llm_id')
if llm_id:
return llm_id
raise Exception('No valid chat llm_id is configured for the current tenant')
# DATASET MANAGEMENT
def batch_create_datasets(client: RAGFlow, num: int) -> list[DataSet]:
return [client.create_dataset(name=f"dataset_{i}") for i in range(num)]

View File

@@ -15,6 +15,7 @@
#
import pytest
from common import valid_chat_llm_id
from configs import CHAT_ASSISTANT_NAME_LIMIT
from utils import encode_avatar
from utils.file_utils import create_image_file
@@ -127,12 +128,14 @@ class TestChatAssistantCreate:
@pytest.mark.parametrize(
"llm_id, expected_message",
[
("glm-4", ""),
(valid_chat_llm_id, ""),
("unknown", "`llm_id` unknown doesn't exist"),
],
)
def test_llm_id(self, client, add_chunks, llm_id, expected_message):
dataset, _, _ = add_chunks
if callable(llm_id):
llm_id = llm_id(client)
if expected_message:
with pytest.raises(Exception) as exception_info:

View File

@@ -15,6 +15,7 @@
#
import pytest
from common import valid_chat_llm_id
from configs import CHAT_ASSISTANT_NAME_LIMIT
from utils import encode_avatar
from utils.file_utils import create_image_file
@@ -109,7 +110,7 @@ class TestChatAssistantUpdate:
@pytest.mark.parametrize(
"llm_setting, expected_message",
[
({"model_name": "glm-4"}, ""),
({"model_name": valid_chat_llm_id}, ""),
({"model_name": "unknown"}, "`llm_id` unknown doesn't exist"),
({"temperature": 0}, ""),
({"temperature": 1}, ""),
@@ -142,7 +143,10 @@ class TestChatAssistantUpdate:
def test_llm_setting(self, client, add_chat_assistants_func, llm_setting, expected_message):
dataset, _, chat_assistants = add_chat_assistants_func
chat_assistant = chat_assistants[0]
llm_setting = dict(llm_setting)
llm_id = llm_setting.pop("model_name", None)
if callable(llm_id):
llm_id = llm_id(client)
payload = {"name": "llm_test", "dataset_ids": [dataset.id], "llm_setting": llm_setting}
if llm_id is not None:
payload["llm_id"] = llm_id

View File

@@ -166,4 +166,6 @@ class TestUpdatedChunk:
with pytest.raises(Exception) as exception_info:
chunks[0].update({})
assert str(exception_info.value) in [f"You don't own the document {chunks[0].document_id}", f"Can't find this chunk {chunks[0].id}"], str(exception_info.value)
message = str(exception_info.value)
ownership_message = f"You don't own the document {chunks[0].document_id}"
assert message.rstrip(".") == ownership_message or message == f"Can't find this chunk {chunks[0].id}", message

View File

@@ -16,7 +16,7 @@
from concurrent.futures import ThreadPoolExecutor, as_completed
import pytest
from common import bulk_upload_documents
from common import bulk_upload_documents, list_all_documents
class TestDocumentsDeletion:
@@ -114,7 +114,7 @@ def test_delete_1k(add_dataset, tmp_path):
count = 1_000
dataset = add_dataset
documents = bulk_upload_documents(dataset, count, tmp_path)
assert len(dataset.list_documents(page_size=count * 2)) == count
assert len(list_all_documents(dataset, limit=count + 1)) == count
dataset.delete_documents(ids=[doc.id for doc in documents])
assert len(dataset.list_documents()) == 0

View File

@@ -15,7 +15,7 @@
#
from concurrent.futures import ThreadPoolExecutor, as_completed
import pytest
from common import bulk_upload_documents
from common import bulk_upload_documents, list_all_documents
from ragflow_sdk import DataSet
from ragflow_sdk.modules.document import Document
from utils import wait_for
@@ -40,14 +40,17 @@ def condition(_dataset: DataSet, _document_ids: list[str] = None):
def validate_document_details(dataset, document_ids):
documents = dataset.list_documents(page_size=100)
for document in documents:
if document.id in document_ids:
target_ids = set(document_ids)
found_ids = set()
for document in list_all_documents(dataset):
if document.id in target_ids:
found_ids.add(document.id)
assert document.run == "DONE"
assert len(document.process_begin_at) > 0
assert document.process_duration > 0
assert document.progress > 0
assert "Task done" in document.progress_msg
assert found_ids == target_ids
class TestDocumentsParse:
@@ -228,7 +231,9 @@ def test_async_cancel_parse_documents_raises_on_nonzero_code(add_dataset_func, m
def test_parse_100_files(add_dataset_func, tmp_path):
@wait_for(200, 1, "Document parsing timeout")
def condition_inner(_dataset: DataSet, _count: int):
docs = _dataset.list_documents(page_size=_count * 2)
docs = list_all_documents(_dataset, limit=_count)
if len(docs) < _count:
return False
for document in docs:
if document.run != "DONE":
return False
@@ -248,7 +253,9 @@ def test_parse_100_files(add_dataset_func, tmp_path):
def test_concurrent_parse(add_dataset_func, tmp_path):
@wait_for(200, 1, "Document parsing timeout")
def condition_inner(_dataset: DataSet, _count: int):
docs = _dataset.list_documents(page_size=_count * 2)
docs = list_all_documents(_dataset, limit=_count)
if len(docs) < _count:
return False
for document in docs:
if document.run != "DONE":
return False

View File

@@ -16,6 +16,7 @@
from concurrent.futures import ThreadPoolExecutor, as_completed
import pytest
from common import list_all_sessions
from configs import SESSION_WITH_CHAT_NAME_LIMIT
from ragflow_sdk import RAGFlow
from ragflow_sdk.modules.session import Session
@@ -31,15 +32,6 @@ class _DummyStreamResponse:
yield line
@pytest.fixture(scope="session")
def auth():
return "unit-auth"
@pytest.fixture(scope="session", autouse=True)
def set_tenant_info():
return None
@pytest.mark.usefixtures("clear_session_with_chat_assistants")
class TestSessionWithChatAssistantCreate:
@@ -84,7 +76,7 @@ class TestSessionWithChatAssistantCreate:
responses = list(as_completed(futures))
assert len(responses) == count, responses
updated_sessions = chat_assistant.list_sessions(page_size=count * 2)
updated_sessions = list_all_sessions(chat_assistant, limit=count + 1)
assert len(updated_sessions) == count
@pytest.mark.p3