mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
@@ -242,7 +242,7 @@ def _load_dify_retrieval_module(monkeypatch):
|
||||
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
|
||||
|
||||
module_name = "test_dify_retrieval_routes_unit_module"
|
||||
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
|
||||
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
|
||||
spec = importlib.util.spec_from_file_location(module_name, module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
module.manager = _DummyManager()
|
||||
|
||||
@@ -84,7 +84,7 @@ def test_multi_dataset_search_with_metadata_filter(rest_client, ensure_parsed_do
|
||||
@pytest.mark.p2
|
||||
def test_retrieval_compatibility_endpoint(rest_client, ensure_parsed_document):
|
||||
dataset_id, _ = ensure_parsed_document()
|
||||
# /api/v1/retrieval is SDK compatibility endpoint from api/apps/sdk/doc.py.
|
||||
# /api/v1/retrieval is SDK compatibility endpoint registered from chunk_api.py.
|
||||
res = rest_client.post(
|
||||
"/retrieval",
|
||||
json={"dataset_ids": [dataset_id], "question": "test TXT file", "top_k": 5},
|
||||
|
||||
@@ -253,7 +253,7 @@ def _load_dify_retrieval_module(monkeypatch):
|
||||
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
|
||||
|
||||
module_name = "test_dify_retrieval_routes_unit_module"
|
||||
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
|
||||
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
|
||||
spec = importlib.util.spec_from_file_location(module_name, module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
module.manager = _DummyManager()
|
||||
|
||||
@@ -137,12 +137,31 @@ def _load_doc_module(monkeypatch):
|
||||
common_pkg.__path__ = [str(repo_root / "common")]
|
||||
monkeypatch.setitem(sys.modules, "common", common_pkg)
|
||||
|
||||
apps_mod = ModuleType("api.apps")
|
||||
apps_mod.login_required = lambda func: func
|
||||
monkeypatch.setitem(sys.modules, "api.apps", apps_mod)
|
||||
|
||||
common_settings_mod = ModuleType("common.settings")
|
||||
common_settings_mod.retriever = SimpleNamespace()
|
||||
common_settings_mod.kg_retriever = SimpleNamespace()
|
||||
common_settings_mod.STORAGE_IMPL = SimpleNamespace(get=lambda *_args, **_kwargs: b"", rm=lambda *_args, **_kwargs: None)
|
||||
monkeypatch.setitem(sys.modules, "common.settings", common_settings_mod)
|
||||
|
||||
common_misc_utils_mod = ModuleType("common.misc_utils")
|
||||
async def _thread_pool_exec(func, *args, **kwargs):
|
||||
return func(*args, **kwargs)
|
||||
common_misc_utils_mod.thread_pool_exec = _thread_pool_exec
|
||||
monkeypatch.setitem(sys.modules, "common.misc_utils", common_misc_utils_mod)
|
||||
|
||||
common_string_utils_mod = ModuleType("common.string_utils")
|
||||
common_string_utils_mod.is_content_empty = lambda content: content is None or not str(content).strip()
|
||||
common_string_utils_mod.remove_redundant_spaces = lambda text: " ".join(str(text).split())
|
||||
monkeypatch.setitem(sys.modules, "common.string_utils", common_string_utils_mod)
|
||||
|
||||
tag_feature_utils_mod = ModuleType("common.tag_feature_utils")
|
||||
tag_feature_utils_mod.validate_tag_features = lambda value: value
|
||||
monkeypatch.setitem(sys.modules, "common.tag_feature_utils", tag_feature_utils_mod)
|
||||
|
||||
class _FakeExpr:
|
||||
def __or__(self, other):
|
||||
return self
|
||||
@@ -219,6 +238,7 @@ def _load_doc_module(monkeypatch):
|
||||
monkeypatch.setitem(sys.modules, "api.db.services.task_service", task_service_mod)
|
||||
|
||||
api_utils_mod = ModuleType("api.utils.api_utils")
|
||||
api_utils_mod.add_tenant_id_to_kwargs = lambda func: func
|
||||
api_utils_mod.check_duplicate_ids = lambda ids, _kind="item": (ids, [])
|
||||
api_utils_mod.construct_json_result = lambda code=0, message="success", data=None: {"code": code, "message": message, "data": data}
|
||||
api_utils_mod.get_error_data_result = lambda message="Sorry! Data missing!", code=102: {"code": code, "message": message}
|
||||
@@ -239,6 +259,32 @@ def _load_doc_module(monkeypatch):
|
||||
api_utils_mod.token_required = _token_required
|
||||
monkeypatch.setitem(sys.modules, "api.utils.api_utils", api_utils_mod)
|
||||
|
||||
image_utils_mod = ModuleType("api.utils.image_utils")
|
||||
image_utils_mod.store_chunk_image = lambda *_args, **_kwargs: None
|
||||
monkeypatch.setitem(sys.modules, "api.utils.image_utils", image_utils_mod)
|
||||
|
||||
reference_metadata_utils_mod = ModuleType("api.utils.reference_metadata_utils")
|
||||
reference_metadata_utils_mod.resolve_reference_metadata_preferences = (
|
||||
lambda req, *_args, **_kwargs: (
|
||||
bool((req.get("reference_metadata") or {}).get("include")),
|
||||
set((req.get("reference_metadata") or {}).get("fields") or []),
|
||||
)
|
||||
)
|
||||
def _enrich_chunks_with_document_metadata(chunks, metadata_fields=None):
|
||||
for chunk in chunks:
|
||||
doc_id = chunk.get("doc_id") or chunk.get("document_id")
|
||||
if not doc_id:
|
||||
continue
|
||||
metadata = doc_metadata_service_mod.DocMetadataService.get_metadata_for_documents([doc_id], chunk.get("kb_id"))
|
||||
document_metadata = dict(metadata.get(doc_id, {}))
|
||||
if metadata_fields:
|
||||
document_metadata = {key: value for key, value in document_metadata.items() if key in metadata_fields}
|
||||
if document_metadata:
|
||||
chunk["document_metadata"] = document_metadata
|
||||
|
||||
reference_metadata_utils_mod.enrich_chunks_with_document_metadata = _enrich_chunks_with_document_metadata
|
||||
monkeypatch.setitem(sys.modules, "api.utils.reference_metadata_utils", reference_metadata_utils_mod)
|
||||
|
||||
common_metadata_utils_mod = ModuleType("common.metadata_utils")
|
||||
common_metadata_utils_mod.convert_conditions = lambda conditions: conditions
|
||||
common_metadata_utils_mod.meta_filter = lambda *_args, **_kwargs: []
|
||||
@@ -446,7 +492,7 @@ def _load_doc_module(monkeypatch):
|
||||
tenant_model_service_mod.get_tenant_default_model_by_type = _get_tenant_default_model_by_type
|
||||
monkeypatch.setitem(sys.modules, "api.db.joint_services.tenant_model_service", tenant_model_service_mod)
|
||||
|
||||
module_path = repo_root / "api" / "apps" / "sdk" / "doc.py"
|
||||
module_path = repo_root / "api" / "apps" / "restful_apis" / "chunk_api.py"
|
||||
spec = importlib.util.spec_from_file_location("test_doc_sdk_routes_unit", module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
module.manager = _DummyManager()
|
||||
|
||||
@@ -690,7 +690,7 @@ def _load_session_module(monkeypatch):
|
||||
)
|
||||
monkeypatch.setitem(sys.modules, "api.db.services.user_canvas_version", user_canvas_version_mod)
|
||||
|
||||
module_path = repo_root / "api" / "apps" / "sdk" / "session.py"
|
||||
module_path = repo_root / "api" / "apps" / "restful_apis" / "bot_api.py"
|
||||
spec = importlib.util.spec_from_file_location("test_session_sdk_routes_unit_module", module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
module.manager = _DummyManager()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
"""Regression tests for retrieval in api/apps/sdk/dify_retrieval.py.
|
||||
"""Regression tests for retrieval in api/apps/restful_apis/dify_retrieval_api.py.
|
||||
|
||||
Issue #15027: cross-tenant knowledge-base access via POST /api/v1/dify/retrieval.
|
||||
The handler authenticated the caller via @apikey_required (resolving
|
||||
@@ -84,7 +84,7 @@ class _FakeKGRetriever:
|
||||
|
||||
|
||||
def _load_dify_retrieval(monkeypatch, *, kb, accessible, request_body, chunks=None):
|
||||
"""Load dify_retrieval.py with minimum stubs to exercise the retrieval handler."""
|
||||
"""Load dify_retrieval_api.py with minimum stubs to exercise the retrieval handler."""
|
||||
_stub(
|
||||
monkeypatch,
|
||||
"api.utils.api_utils",
|
||||
@@ -148,7 +148,7 @@ def _load_dify_retrieval(monkeypatch, *, kb, accessible, request_body, chunks=No
|
||||
monkeypatch.setitem(sys.modules, "quart", quart_stub)
|
||||
|
||||
repo_root = Path(__file__).resolve().parents[5]
|
||||
module_path = repo_root / "api" / "apps" / "sdk" / "dify_retrieval.py"
|
||||
module_path = repo_root / "api" / "apps" / "restful_apis" / "dify_retrieval_api.py"
|
||||
spec = importlib.util.spec_from_file_location("test_dify_retrieval_module", module_path)
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
module.manager = _PassthroughManager()
|
||||
|
||||
Reference in New Issue
Block a user