Spaces:
Runtime error
Runtime error
| """ | |
| Класс для представления документа как сущности. | |
| """ | |
| from dataclasses import dataclass, field | |
| from .linker_entity import Entity, register_entity | |
| class DocumentAsEntity(Entity): | |
| """ | |
| Класс для представления документа как сущности в системе извлечения и сборки. | |
| Содержит ссылки на классы стратегии чанкинга и обработчика таблиц, | |
| использовавшихся при деструктуризации. | |
| """ | |
| doc_type: str = "unknown" | |
| chunking_strategy_ref: str | None = None | |
| type: str = field(default="DocumentAsEntity") | |
| def _deserialize_to_me(cls, data: Entity) -> 'DocumentAsEntity': | |
| """ | |
| Десериализует DocumentAsEntity из объекта LinkerEntity. | |
| Args: | |
| data: Объект LinkerEntity для преобразования в DocumentAsEntity | |
| Returns: | |
| Десериализованный объект DocumentAsEntity | |
| """ | |
| if not isinstance(data, Entity): | |
| raise TypeError(f"Ожидался LinkerEntity, получен {type(data)}") | |
| metadata = data.metadata or {} | |
| # Получаем поля из атрибутов или метаданных | |
| doc_type = getattr(data, 'doc_type', metadata.get('_doc_type', 'unknown')) | |
| strategy_ref = getattr( | |
| data, 'chunking_strategy_ref', metadata.get('_chunking_strategy_ref', None) | |
| ) | |
| # Создаем чистые метаданные без служебных полей | |
| clean_metadata = {k: v for k, v in metadata.items() if not k.startswith('_')} | |
| return cls( | |
| id=data.id, | |
| name=data.name, | |
| text=data.text, | |
| in_search_text=data.in_search_text, | |
| metadata=clean_metadata, | |
| source_id=data.source_id, | |
| target_id=data.target_id, | |
| number_in_relation=data.number_in_relation, | |
| groupper=data.groupper, | |
| type=cls.__name__, | |
| doc_type=doc_type, | |
| chunking_strategy_ref=strategy_ref, | |
| ) | |