Home / Class/ TimeWeightedVectorStoreRetriever Class — langchain Architecture

TimeWeightedVectorStoreRetriever Class — langchain Architecture

Architecture documentation for the TimeWeightedVectorStoreRetriever class in time_weighted_retriever.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  57cc5b02_6622_339b_0806_ef06db1bc8c7["TimeWeightedVectorStoreRetriever"]
  3a20478a_3692_141f_433b_a32429b00020["BaseRetriever"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|extends| 3a20478a_3692_141f_433b_a32429b00020
  897b0803_c373_37ca_9d1a_c7e7ca71116a["time_weighted_retriever.py"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|defined in| 897b0803_c373_37ca_9d1a_c7e7ca71116a
  06a8e211_07ff_e5fa_7350_c1174a255930["_document_get_date()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| 06a8e211_07ff_e5fa_7350_c1174a255930
  de9ececd_a24c_a706_c8b7_9e9cc434d9ae["_get_combined_score()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| de9ececd_a24c_a706_c8b7_9e9cc434d9ae
  b1d1c579_6dd6_4855_0800_4ea3956c65a8["get_salient_docs()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| b1d1c579_6dd6_4855_0800_4ea3956c65a8
  48d5e3cc_2c4d_6412_02b8_9dbe4675bfc4["aget_salient_docs()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| 48d5e3cc_2c4d_6412_02b8_9dbe4675bfc4
  35a5a812_9087_0a29_b7c9_ebcab9fe35fa["_get_rescored_docs()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| 35a5a812_9087_0a29_b7c9_ebcab9fe35fa
  b35afa73_55af_e573_98eb_b51115b185a7["_get_relevant_documents()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| b35afa73_55af_e573_98eb_b51115b185a7
  ae43f3d7_ce4c_57f0_7d32_9aaacf63415b["_aget_relevant_documents()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| ae43f3d7_ce4c_57f0_7d32_9aaacf63415b
  e114f71b_ff52_f31f_69a1_90f44dd5480b["add_documents()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| e114f71b_ff52_f31f_69a1_90f44dd5480b
  60f8ad70_73fc_0bd8_e1d1_cd3d2d1ad6b1["aadd_documents()"]
  57cc5b02_6622_339b_0806_ef06db1bc8c7 -->|method| 60f8ad70_73fc_0bd8_e1d1_cd3d2d1ad6b1

Relationship Graph

Source Code

libs/langchain/langchain_classic/retrievers/time_weighted_retriever.py lines 21–198

class TimeWeightedVectorStoreRetriever(BaseRetriever):
    """Time Weighted Vector Store Retriever.

    Retriever that combines embedding similarity with recency in retrieving values.
    """

    vectorstore: VectorStore
    """The `VectorStore` to store documents and determine salience."""

    search_kwargs: dict = Field(default_factory=lambda: {"k": 100})
    """Keyword arguments to pass to the `VectorStore` similarity search."""

    # TODO: abstract as a queue
    memory_stream: list[Document] = Field(default_factory=list)
    """The memory_stream of documents to search through."""

    decay_rate: float = Field(default=0.01)
    """The exponential decay factor used as `(1.0-decay_rate)**(hrs_passed)`."""

    k: int = 4
    """The maximum number of documents to retrieve in a given call."""

    other_score_keys: list[str] = []
    """Other keys in the metadata to factor into the score, e.g. 'importance'."""

    default_salience: float | None = None
    """The salience to assign memories not retrieved from the vector store.

    None assigns no salience to documents not fetched from the vector store.
    """

    model_config = ConfigDict(
        arbitrary_types_allowed=True,
    )

    def _document_get_date(self, field: str, document: Document) -> datetime.datetime:
        """Return the value of the date field of a document."""
        if field in document.metadata:
            if isinstance(document.metadata[field], float):
                return datetime.datetime.fromtimestamp(document.metadata[field])
            return document.metadata[field]
        return datetime.datetime.now()

    def _get_combined_score(
        self,
        document: Document,
        vector_relevance: float | None,
        current_time: datetime.datetime,
    ) -> float:
        """Return the combined score for a document."""
        hours_passed = _get_hours_passed(
            current_time,
            self._document_get_date("last_accessed_at", document),
        )
        score = (1.0 - self.decay_rate) ** hours_passed
        for key in self.other_score_keys:
            if key in document.metadata:
                score += document.metadata[key]
        if vector_relevance is not None:
            score += vector_relevance
        return score

    def get_salient_docs(self, query: str) -> dict[int, tuple[Document, float]]:
        """Return documents that are salient to the query."""
        docs_and_scores: list[tuple[Document, float]]
        docs_and_scores = self.vectorstore.similarity_search_with_relevance_scores(
            query,
            **self.search_kwargs,
        )
        results = {}
        for fetched_doc, relevance in docs_and_scores:
            if "buffer_idx" in fetched_doc.metadata:
                buffer_idx = fetched_doc.metadata["buffer_idx"]
                doc = self.memory_stream[buffer_idx]
                results[buffer_idx] = (doc, relevance)
        return results

    async def aget_salient_docs(self, query: str) -> dict[int, tuple[Document, float]]:
        """Return documents that are salient to the query."""
        docs_and_scores: list[tuple[Document, float]]
        docs_and_scores = (

Extends

Frequently Asked Questions

What is the TimeWeightedVectorStoreRetriever class?
TimeWeightedVectorStoreRetriever is a class in the langchain codebase, defined in libs/langchain/langchain_classic/retrievers/time_weighted_retriever.py.
Where is TimeWeightedVectorStoreRetriever defined?
TimeWeightedVectorStoreRetriever is defined in libs/langchain/langchain_classic/retrievers/time_weighted_retriever.py at line 21.
What does TimeWeightedVectorStoreRetriever extend?
TimeWeightedVectorStoreRetriever extends BaseRetriever.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free