utm-llm-assistant / rag /document_loader.py
GordonHK
Initial deployment: UTM LLM Assistant (22 docs + FAISS index, LFS)
c509d2b
Raw
History Blame Contribute Delete
1.7 kB
"""
Document loader for UTM/U-space reference materials.
Supports PDF, DOCX, and plain text files from data/raw/.
"""
import os
from pathlib import Path
from typing import List
from langchain_core.documents import Document
from langchain_community.document_loaders import (
PyPDFLoader,
Docx2txtLoader,
TextLoader,
DirectoryLoader,
)
SUPPORTED_EXTENSIONS = {
".pdf": PyPDFLoader,
".docx": Docx2txtLoader,
".txt": TextLoader,
".md": TextLoader,
}
def load_documents(data_dir: str = "data/raw") -> List[Document]:
"""
Load all supported documents from data_dir.
Args:
data_dir: Path to folder containing UTM reference documents.
Returns:
List of LangChain Document objects.
"""
data_path = Path(data_dir)
if not data_path.exists():
raise FileNotFoundError(f"Data directory not found: {data_dir}")
documents = []
loaded_files = []
for file_path in sorted(data_path.rglob("*")):
ext = file_path.suffix.lower()
loader_cls = SUPPORTED_EXTENSIONS.get(ext)
if loader_cls is None:
continue
try:
loader = loader_cls(str(file_path))
docs = loader.load()
# Tag each doc with its source file
for doc in docs:
doc.metadata["source_file"] = file_path.name
documents.extend(docs)
loaded_files.append(file_path.name)
except Exception as e:
print(f"Warning: Could not load {file_path.name}: {e}")
print(f"Loaded {len(documents)} document chunks from {len(loaded_files)} files:")
for f in loaded_files:
print(f" - {f}")
return documents