本次同步 09-12 至 09-28 的代码变更,主要内容: 新增功能 - 修改密码:后端新增 ChangePasswordRequest DTO 与UserController/UserService 对应接口,前端新增 ChangePasswordDialog 并在 Header 接入入口 - 文件预览组件重构:file-preview 目录拆分出 VideoPreview(支持 blobUrl 直传)、 ImagePreview、AudioPreview,index.tsx 统一调度各类型预览器 - 新增 my_ops 算子模块:markitdown_parser、mineru_pdf_parser、text_quality_evaluator - 新增 tools/minio-file-server MinIO 文件服务 功能增强 - 数据清洗:cleaning_task_service/scheduler/routes 重构, data_juicer_executor 与 wrapper 增强,OperatorTable/LogsTable/TaskDetail 同步调整 - 数据标注:annotation sync.py、project.py 接口与schema 更新 - 数据采集、算子市场、首页与菜单路由相关页面调整 - DataJuicer 算子接入(useOperatorOperations、dj_ops_schema) 结构调整 - deepflow/ 更名为 deep-flow/(419 个文件重命名) - 新增 helm 部署编排、GitHub Actions 之外的自建镜像构建脚本 未纳入本次提交 - scripts-backup/、runtime/python-executor-backup/、components_backup/(备份目录) - *.backup*、__pycache__ 产物 - zh_core_web_sm-3.8.0-py3-none-any.whl(46MB 构建产物) - DataX/(内嵌独立仓库,远程亦未收录其源码)
74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
# Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import pytest
|
|
|
|
from src.rag.retriever import Chunk, Document, Resource, Retriever
|
|
|
|
|
|
def test_chunk_init():
|
|
chunk = Chunk(content="test content", similarity=0.9)
|
|
assert chunk.content == "test content"
|
|
assert chunk.similarity == 0.9
|
|
|
|
|
|
def test_document_init_and_to_dict():
|
|
chunk1 = Chunk(content="chunk1", similarity=0.8)
|
|
chunk2 = Chunk(content="chunk2", similarity=0.7)
|
|
doc = Document(
|
|
id="doc1", url="http://example.com", title="Title", chunks=[chunk1, chunk2]
|
|
)
|
|
assert doc.id == "doc1"
|
|
assert doc.url == "http://example.com"
|
|
assert doc.title == "Title"
|
|
assert doc.chunks == [chunk1, chunk2]
|
|
d = doc.to_dict()
|
|
assert d["id"] == "doc1"
|
|
assert d["content"] == "chunk1\n\nchunk2"
|
|
assert d["url"] == "http://example.com"
|
|
assert d["title"] == "Title"
|
|
|
|
|
|
def test_document_to_dict_optional_fields():
|
|
chunk = Chunk(content="only chunk", similarity=1.0)
|
|
doc = Document(id="doc2", chunks=[chunk])
|
|
d = doc.to_dict()
|
|
assert d["id"] == "doc2"
|
|
assert d["content"] == "only chunk"
|
|
assert "url" not in d
|
|
assert "title" not in d
|
|
|
|
|
|
def test_resource_model():
|
|
resource = Resource(uri="uri1", title="Resource Title")
|
|
assert resource.uri == "uri1"
|
|
assert resource.title == "Resource Title"
|
|
assert resource.description == ""
|
|
|
|
|
|
def test_resource_model_with_description():
|
|
resource = Resource(uri="uri2", title="Resource2", description="desc")
|
|
assert resource.description == "desc"
|
|
|
|
|
|
def test_retriever_abstract_methods():
|
|
class DummyRetriever(Retriever):
|
|
def list_resources(self, query=None):
|
|
return [Resource(uri="uri", title="title")]
|
|
|
|
def query_relevant_documents(self, query, resources=[]):
|
|
return [Document(id="id", chunks=[])]
|
|
|
|
retriever = DummyRetriever()
|
|
resources = retriever.list_resources()
|
|
assert isinstance(resources, list)
|
|
assert isinstance(resources[0], Resource)
|
|
docs = retriever.query_relevant_documents("query", resources)
|
|
assert isinstance(docs, list)
|
|
assert isinstance(docs[0], Document)
|
|
|
|
|
|
def test_retriever_cannot_instantiate():
|
|
with pytest.raises(TypeError):
|
|
Retriever()
|