refactor(annotation): 简化知识库集查找逻辑

- 移除项目参数依赖,简化 _find_knowledge_set_by_name 方法
- 删除不再使用的 _parse_metadata 和 _metadata_matches_project 方法
- 更新知识库集创建流程中的查找调用方式
- 统一所有知识库集查找操作的参数结构
This commit is contained in:
2026-01-22 20:18:42 +08:00
parent cb71712f51
commit 9376382791

View File

@@ -85,7 +85,7 @@ class KnowledgeSyncService:
base_name = dataset_name.strip() or "annotation-project"
metadata = self._build_set_metadata(project)
existing = await self._find_knowledge_set_by_name(base_name, project)
existing = await self._find_knowledge_set_by_name(base_name)
if existing:
await self._update_project_config(
project,
@@ -98,17 +98,17 @@ class KnowledgeSyncService:
created = await self._create_knowledge_set(base_name, metadata)
if not created:
created = await self._find_knowledge_set_by_name(base_name, project)
created = await self._find_knowledge_set_by_name(base_name)
if not created:
fallback_name = self._build_fallback_set_name(base_name, project.id)
existing = await self._find_knowledge_set_by_name(fallback_name, project)
existing = await self._find_knowledge_set_by_name(fallback_name)
if existing:
created = existing
else:
created = await self._create_knowledge_set(fallback_name, metadata)
if not created:
created = await self._find_knowledge_set_by_name(fallback_name, project)
created = await self._find_knowledge_set_by_name(fallback_name)
if not created:
return None
@@ -153,30 +153,7 @@ class KnowledgeSyncService:
return []
return [item for item in content if isinstance(item, dict)]
def _parse_metadata(self, metadata: Any) -> Optional[Dict[str, Any]]:
if not isinstance(metadata, str) or not metadata.strip():
return None
try:
parsed = json.loads(metadata)
except Exception:
return None
return parsed if isinstance(parsed, dict) else None
def _metadata_matches_project(self, metadata: Any, project: LabelingProject) -> bool:
parsed = self._parse_metadata(metadata)
if not parsed:
return False
return (
parsed.get("source") == "annotation"
and parsed.get("project_id") == project.id
and parsed.get("dataset_id") == project.dataset_id
)
async def _find_knowledge_set_by_name(
self,
name: str,
project: LabelingProject,
) -> Optional[Dict[str, Any]]:
async def _find_knowledge_set_by_name(self, name: str) -> Optional[Dict[str, Any]]:
if not name:
return None
items = await self._list_knowledge_sets(name)
@@ -185,9 +162,6 @@ class KnowledgeSyncService:
exact_matches = [item for item in items if item.get("name") == name]
if not exact_matches:
return None
for item in exact_matches:
if self._metadata_matches_project(item.get("metadata"), project):
return item
return exact_matches[0]
async def _create_knowledge_set(self, name: str, metadata: str) -> Optional[Dict[str, Any]]: