Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from dataclasses import dataclass | |
| from typing import Iterator | |
| from .base import DatabaseConnector, record_to_text | |
| from .pdf_extractor import extract_pdf_text, maybe_decode_pdf_bytes | |
| try: | |
| from langchain_core.documents import Document # type: ignore | |
| except Exception: # pragma: no cover | |
| from langchain.schema import Document # type: ignore | |
| class CrawlerAgent: | |
| connector: DatabaseConnector | |
| source_name: str | |
| def iter_documents(self) -> Iterator[Document]: | |
| for record in self.connector.iter_records(): | |
| pdf_bytes = maybe_decode_pdf_bytes(record.fields) | |
| if pdf_bytes is not None: | |
| content = extract_pdf_text(pdf_bytes) | |
| else: | |
| content = record_to_text(record) | |
| if not content: | |
| continue | |
| metadata = { | |
| "source": record.source, | |
| "entity": record.entity, | |
| "record_id": record.record_id, | |
| } | |
| yield Document(page_content=content, metadata=metadata) | |