You've already forked DataMate
refactor(annotation): 简化知识库集查找逻辑
- 移除项目参数依赖,简化 _find_knowledge_set_by_name 方法 - 删除不再使用的 _parse_metadata 和 _metadata_matches_project 方法 - 更新知识库集创建流程中的查找调用方式 - 统一所有知识库集查找操作的参数结构
This commit is contained in:
@@ -85,7 +85,7 @@ class KnowledgeSyncService:
|
|||||||
base_name = dataset_name.strip() or "annotation-project"
|
base_name = dataset_name.strip() or "annotation-project"
|
||||||
metadata = self._build_set_metadata(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:
|
if existing:
|
||||||
await self._update_project_config(
|
await self._update_project_config(
|
||||||
project,
|
project,
|
||||||
@@ -98,17 +98,17 @@ class KnowledgeSyncService:
|
|||||||
|
|
||||||
created = await self._create_knowledge_set(base_name, metadata)
|
created = await self._create_knowledge_set(base_name, metadata)
|
||||||
if not created:
|
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:
|
if not created:
|
||||||
fallback_name = self._build_fallback_set_name(base_name, project.id)
|
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:
|
if existing:
|
||||||
created = existing
|
created = existing
|
||||||
else:
|
else:
|
||||||
created = await self._create_knowledge_set(fallback_name, metadata)
|
created = await self._create_knowledge_set(fallback_name, metadata)
|
||||||
if not created:
|
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:
|
if not created:
|
||||||
return None
|
return None
|
||||||
@@ -153,30 +153,7 @@ class KnowledgeSyncService:
|
|||||||
return []
|
return []
|
||||||
return [item for item in content if isinstance(item, dict)]
|
return [item for item in content if isinstance(item, dict)]
|
||||||
|
|
||||||
def _parse_metadata(self, metadata: Any) -> Optional[Dict[str, Any]]:
|
async def _find_knowledge_set_by_name(self, name: str) -> 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]]:
|
|
||||||
if not name:
|
if not name:
|
||||||
return None
|
return None
|
||||||
items = await self._list_knowledge_sets(name)
|
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]
|
exact_matches = [item for item in items if item.get("name") == name]
|
||||||
if not exact_matches:
|
if not exact_matches:
|
||||||
return None
|
return None
|
||||||
for item in exact_matches:
|
|
||||||
if self._metadata_matches_project(item.get("metadata"), project):
|
|
||||||
return item
|
|
||||||
return exact_matches[0]
|
return exact_matches[0]
|
||||||
|
|
||||||
async def _create_knowledge_set(self, name: str, metadata: str) -> Optional[Dict[str, Any]]:
|
async def _create_knowledge_set(self, name: str, metadata: str) -> Optional[Dict[str, Any]]:
|
||||||
|
|||||||
Reference in New Issue
Block a user