fed8b2eed7
Build and push multi-arch DocsGPT Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Has been cancelled
Backend release / release (push) Has been cancelled
Bandit Security Scan / bandit_scan (push) Has been cancelled
Build and push multi-arch DocsGPT Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Has been cancelled
Build and push multi-arch DocsGPT Docker image / manifest (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / build (linux/amd64, ubuntu-latest, amd64) (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Has been cancelled
Build and push DocsGPT FE Docker image for development / manifest (push) Has been cancelled
Python linting / ruff (push) Has been cancelled
Run python tests with pytest / Run tests and count coverage (3.12) (push) Has been cancelled
React Widget Build / build (push) Has been cancelled
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
"""Shared chunk-label derivation for retrievers."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from typing import Any, Dict
|
|
|
|
|
|
def labels_from_metadata(
|
|
metadata: Dict[str, Any], text: str, fallback_source: str
|
|
) -> Dict[str, str]:
|
|
"""Derive ``title``/``source``/``filename`` from a chunk's metadata.
|
|
|
|
Falls back to the chunk text for the title and to ``fallback_source`` (the
|
|
vectorstore/source id) when metadata carries no source. Used by both
|
|
ClassicRAG and GraphRAG so citation labels stay identical across retrievers.
|
|
"""
|
|
metadata = metadata or {}
|
|
|
|
title = metadata.get("title", metadata.get("post_title", text))
|
|
if not isinstance(title, str):
|
|
title = str(title)
|
|
title = title.split("/")[-1]
|
|
|
|
filename = (
|
|
metadata.get("filename")
|
|
or metadata.get("file_name")
|
|
or metadata.get("source")
|
|
)
|
|
if isinstance(filename, str):
|
|
filename = os.path.basename(filename) or filename
|
|
else:
|
|
filename = title
|
|
if not filename:
|
|
filename = title
|
|
|
|
source = metadata.get("source") or fallback_source
|
|
return {"title": title, "source": source, "filename": filename}
|