pdf_qa_bot / crawler /agent.py
yash-080706's picture
Upload 17 files
9aebc0e verified
Raw
History Blame Contribute Delete
1.13 kB
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
@dataclass
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)