S SmartDocs
Chuỗi bài: Ricky python 51 dòng · Cập nhật 2026-03-23

source_metadata.py

Ricky/RAG_project/processors/source_metadata.py

"""
Source metadata helpers: normalize and standardize file-origin metadata
so all downstream modules can rely on consistent field names.
"""
import os
from pathlib import Path


PROJECT_ROOT = str(Path(__file__).resolve().parent.parent)


def normalize_source_path(filepath):
    absolute = os.path.abspath(filepath)
    try:
        relative = os.path.relpath(absolute, PROJECT_ROOT)
    except ValueError:
        relative = absolute
    return relative.replace("\\", "/")


def build_source_metadata(filepath, source_type, **extra):
    source_name = os.path.basename(filepath)
    metadata = {
        "source": source_name,
        "source_name": source_name,
        "source_path": normalize_source_path(filepath),
        "source_type": source_type,
    }
    for key, value in extra.items():
        if value is not None and value != "":
            metadata[key] = value
    return metadata


def ensure_source_metadata(metadata, source_type=None):
    meta = dict(metadata or {})
    source_path = meta.get("source_path") or meta.get("source")
    if isinstance(source_path, str) and source_path:
        source_path = source_path.replace("\\", "/")
        meta["source_path"] = source_path
        meta["source"] = os.path.basename(source_path)
        meta.setdefault("source_name", meta["source"])
    else:
        meta.setdefault("source", "unknown")
        meta.setdefault("source_name", meta["source"])
        meta.setdefault("source_path", meta["source"])
    if source_type:
        meta["source_type"] = source_type
    else:
        meta.setdefault("source_type", "unknown")
    return meta

Bài viết liên quan