Source code for fastrag.ingestion.models
"""Value types produced by the ingestion pipeline's source-fetching stage.
A :class:`Source` is raw fetched content, produced by a fetcher and consumed
by a parser. What a ``Source`` becomes once parsed — :class:`~fastrag.models.Document`
— is shared by every later stage (parsing, chunking, embedding, indexing) as
well as by retrieval, querying, serving and benchmarking, so it lives at the
top level, in :mod:`fastrag.models`, rather than here.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from datetime import datetime
from typing import Any
[docs]
@dataclass(frozen=True, slots=True)
class Source:
"""Raw content fetched from somewhere, plus enough metadata to place it.
A ``Source`` is produced by a fetcher and carries the original bytes
together with enough information to identify, validate, cache, and later
transform it into one or more :class:`~fastrag.models.Document` instances.
Sources are independently cacheable, and their freshness may be validated
against the originating system using ETags, modification timestamps,
content hashes, or equivalent mechanisms.
Attributes:
id: Unique identifier for this source.
uri: Where the content came from.
content: The raw fetched bytes.
content_type: The source's MIME media type.
content_hash: Deterministic hash of ``content``, used as its address.
etag: HTTP validator for conditional refetching, when the origin
supports it.
last_modified: Origin-reported modification time, when available.
metadata: Extended, source-specific metadata.
last_validated: When this source was last confirmed fresh against its
origin (or, for one that has never been revalidated, first
fetched). Persisted: round-tripped through the cache so that
``SourceStep.cache_validation_interval`` means the same thing
across process restarts, not just within one. ``None`` on a
``Source`` that has never been through a cache write, e.g. one
just produced by ``evaluate()`` and not yet cached.
cached: Whether this instance was served from the cache rather than
freshly fetched. Runtime-only: never persisted.
"""
id: str
uri: str
content: bytes
content_type: str
content_hash: str
etag: str | None = None
last_modified: datetime | None = None
metadata: dict[str, Any] = field(default_factory=dict)
last_validated: datetime | None = None
cached: bool = False