Fix: Increase timeouts for document parsing and model checks (#8996)

### What problem does this PR solve?

- Extended embedding model timeout from 3 to 10 seconds in api_utils.py
- Added more time for large file batches and concurrent parsing
operations to prevent test flakiness
- Import from #8940
- https://github.com/infiniflow/ragflow/actions/runs/16422052652

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
Liu An
2025-07-23 15:08:36 +08:00
committed by GitHub
parent d16505691c
commit b4b6d296ea
3 changed files with 8 additions and 10 deletions

View File

@ -26,15 +26,12 @@ from copy import deepcopy
from functools import wraps from functools import wraps
from hmac import HMAC from hmac import HMAC
from io import BytesIO from io import BytesIO
from typing import Any, Optional, Union, Callable, Coroutine, Type from typing import Any, Callable, Coroutine, Optional, Type, Union
from urllib.parse import quote, urlencode from urllib.parse import quote, urlencode
from uuid import uuid1 from uuid import uuid1
import trio
from rag.utils.mcp_tool_call_conn import MCPToolCallSession, close_multiple_mcp_toolcall_sessions
import requests import requests
import trio
from flask import ( from flask import (
Response, Response,
jsonify, jsonify,
@ -53,6 +50,7 @@ from api.constants import REQUEST_MAX_WAIT_SEC, REQUEST_WAIT_SEC
from api.db.db_models import APIToken from api.db.db_models import APIToken
from api.db.services.llm_service import LLMService, TenantLLMService from api.db.services.llm_service import LLMService, TenantLLMService
from api.utils import CustomJSONEncoder, get_uuid, json_dumps from api.utils import CustomJSONEncoder, get_uuid, json_dumps
from rag.utils.mcp_tool_call_conn import MCPToolCallSession, close_multiple_mcp_toolcall_sessions
requests.models.complexjson.dumps = functools.partial(json.dumps, cls=CustomJSONEncoder) requests.models.complexjson.dumps = functools.partial(json.dumps, cls=CustomJSONEncoder)
@ -693,7 +691,7 @@ async def is_strong_enough(chat_model, embedding_model):
async def _is_strong_enough(): async def _is_strong_enough():
nonlocal chat_model, embedding_model nonlocal chat_model, embedding_model
if embedding_model: if embedding_model:
with trio.fail_after(3): with trio.fail_after(10):
_ = await trio.to_thread.run_sync(lambda: embedding_model.encode(["Are you strong enough!?"])) _ = await trio.to_thread.run_sync(lambda: embedding_model.encode(["Are you strong enough!?"]))
if chat_model: if chat_model:
with trio.fail_after(30): with trio.fail_after(30):

View File

@ -167,7 +167,7 @@ class TestDocumentsParse:
@pytest.mark.p3 @pytest.mark.p3
def test_parse_100_files(HttpApiAuth, add_dataset_func, tmp_path): def test_parse_100_files(HttpApiAuth, add_dataset_func, tmp_path):
@wait_for(100, 1, "Document parsing timeout") @wait_for(200, 1, "Document parsing timeout")
def condition(_auth, _dataset_id, _document_num): def condition(_auth, _dataset_id, _document_num):
res = list_documents(_auth, _dataset_id, {"page_size": _document_num}) res = list_documents(_auth, _dataset_id, {"page_size": _document_num})
for doc in res["data"]["docs"]: for doc in res["data"]["docs"]:
@ -188,7 +188,7 @@ def test_parse_100_files(HttpApiAuth, add_dataset_func, tmp_path):
@pytest.mark.p3 @pytest.mark.p3
def test_concurrent_parse(HttpApiAuth, add_dataset_func, tmp_path): def test_concurrent_parse(HttpApiAuth, add_dataset_func, tmp_path):
@wait_for(120, 1, "Document parsing timeout") @wait_for(200, 1, "Document parsing timeout")
def condition(_auth, _dataset_id, _document_num): def condition(_auth, _dataset_id, _document_num):
res = list_documents(_auth, _dataset_id, {"page_size": _document_num}) res = list_documents(_auth, _dataset_id, {"page_size": _document_num})
for doc in res["data"]["docs"]: for doc in res["data"]["docs"]:

View File

@ -116,7 +116,7 @@ class TestDocumentsParse:
@pytest.mark.p3 @pytest.mark.p3
def test_parse_100_files(add_dataset_func, tmp_path): def test_parse_100_files(add_dataset_func, tmp_path):
@wait_for(100, 1, "Document parsing timeout") @wait_for(200, 1, "Document parsing timeout")
def condition(_dataset: DataSet, _count: int): def condition(_dataset: DataSet, _count: int):
documents = _dataset.list_documents(page_size=_count * 2) documents = _dataset.list_documents(page_size=_count * 2)
for document in documents: for document in documents:
@ -136,7 +136,7 @@ def test_parse_100_files(add_dataset_func, tmp_path):
@pytest.mark.p3 @pytest.mark.p3
def test_concurrent_parse(add_dataset_func, tmp_path): def test_concurrent_parse(add_dataset_func, tmp_path):
@wait_for(120, 1, "Document parsing timeout") @wait_for(200, 1, "Document parsing timeout")
def condition(_dataset: DataSet, _count: int): def condition(_dataset: DataSet, _count: int):
documents = _dataset.list_documents(page_size=_count * 2) documents = _dataset.list_documents(page_size=_count * 2)
for document in documents: for document in documents: