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
Source
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