feat(annotation): 添加分段索引支持和优化标注编辑器

- 在前端 lsf.html 中添加 segmentIndex 字段解析逻辑
- 在 LabelStudioTextEditor 中添加分段索引相关类型定义和处理函数
- 使用 useCallback 优化组件中的异步函数性能
- 添加对驼峰命名和下划线命名的数据字段兼容处理
- 实现分段模式下的标注状态更新功能
- 添加任务 ID 验证防止过期保存请求
- 在后端 editor.py 中添加分段索引字段支持
- 统一前后端数据传输格式确保字段一致性
This commit is contained in:
2026-01-22 17:14:37 +08:00
parent c638182c72
commit 1eee1e248e
3 changed files with 154 additions and 40 deletions

View File

@@ -43,6 +43,11 @@ TEXT_DATA_KEY = "text"
DATASET_ID_KEY = "dataset_id"
FILE_ID_KEY = "file_id"
FILE_NAME_KEY = "file_name"
DATASET_ID_CAMEL_KEY = "datasetId"
FILE_ID_CAMEL_KEY = "fileId"
FILE_NAME_CAMEL_KEY = "fileName"
SEGMENT_INDEX_KEY = "segment_index"
SEGMENT_INDEX_CAMEL_KEY = "segmentIndex"
TEXTUAL_OBJECT_CATEGORIES = {"text", "document"}
OBJECT_NAME_HEADER_PREFIX = "dm_object_header_"
@@ -252,9 +257,13 @@ class AnnotationEditorService:
if self._needs_placeholder(data.get(TEXT_DATA_KEY)):
data[TEXT_DATA_KEY] = display_text
data.setdefault(FILE_ID_KEY, file_id)
data.setdefault(DATASET_ID_KEY, dataset_id)
data.setdefault(FILE_NAME_KEY, getattr(file_record, "file_name", ""))
file_name = str(getattr(file_record, "file_name", ""))
data[FILE_ID_KEY] = file_id
data[FILE_ID_CAMEL_KEY] = file_id
data[DATASET_ID_KEY] = dataset_id
data[DATASET_ID_CAMEL_KEY] = dataset_id
data[FILE_NAME_KEY] = file_name
data[FILE_NAME_CAMEL_KEY] = file_name
self._apply_text_placeholders(data, label_config)
return data
@@ -418,6 +427,10 @@ class AnnotationEditorService:
dataset_id=project.dataset_id,
file_id=file_id,
)
if needs_segmentation:
task_data[SEGMENT_INDEX_KEY] = current_segment_index
task_data[SEGMENT_INDEX_CAMEL_KEY] = current_segment_index
task: Dict[str, Any] = {
"id": ls_task_id,
"data": task_data,