EncoderBackedStore Class — langchain Architecture
Architecture documentation for the EncoderBackedStore class in encoder_backed.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 735a81c9_6f78_0114_db70_cd34c4599651["EncoderBackedStore"] 6396544b_6282_c633_57d8_1b40e0ca4ec6["encoder_backed.py"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|defined in| 6396544b_6282_c633_57d8_1b40e0ca4ec6 34240751_df82_d397_46b7_a1207f364911["__init__()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| 34240751_df82_d397_46b7_a1207f364911 c778e95a_dd7d_9c37_47f8_ed9fd8e02e03["mget()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| c778e95a_dd7d_9c37_47f8_ed9fd8e02e03 460d5fa8_1f92_2412_0af8_5ca19a650ba4["amget()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| 460d5fa8_1f92_2412_0af8_5ca19a650ba4 414c228c_ad09_e0aa_c3ac_61ad1f674ece["mset()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| 414c228c_ad09_e0aa_c3ac_61ad1f674ece bd24b34c_3d2b_3a51_25b5_d7a011e75003["amset()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| bd24b34c_3d2b_3a51_25b5_d7a011e75003 7e5b8b34_7944_7a62_00fd_ee56ac6c6ac9["mdelete()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| 7e5b8b34_7944_7a62_00fd_ee56ac6c6ac9 e14db26a_0d8b_f4e4_52b0_b90ff060847d["amdelete()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| e14db26a_0d8b_f4e4_52b0_b90ff060847d ca5522dc_f6ce_ec62_d9f3_03ab997a8865["yield_keys()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| ca5522dc_f6ce_ec62_d9f3_03ab997a8865 a80b2bf5_a7b4_cc88_da3d_d7eec200dbaf["ayield_keys()"] 735a81c9_6f78_0114_db70_cd34c4599651 -->|method| a80b2bf5_a7b4_cc88_da3d_d7eec200dbaf
Relationship Graph
Source Code
libs/langchain/langchain_classic/storage/encoder_backed.py lines 13–181
class EncoderBackedStore(BaseStore[K, V]):
"""Wraps a store with key and value encoders/decoders.
Examples that uses JSON for encoding/decoding:
```python
import json
def key_encoder(key: int) -> str:
return json.dumps(key)
def value_serializer(value: float) -> str:
return json.dumps(value)
def value_deserializer(serialized_value: str) -> float:
return json.loads(serialized_value)
# Create an instance of the abstract store
abstract_store = MyCustomStore()
# Create an instance of the encoder-backed store
store = EncoderBackedStore(
store=abstract_store,
key_encoder=key_encoder,
value_serializer=value_serializer,
value_deserializer=value_deserializer,
)
# Use the encoder-backed store methods
store.mset([(1, 3.14), (2, 2.718)])
values = store.mget([1, 2]) # Retrieves [3.14, 2.718]
store.mdelete([1, 2]) # Deletes the keys 1 and 2
```
"""
def __init__(
self,
store: BaseStore[str, Any],
key_encoder: Callable[[K], str],
value_serializer: Callable[[V], bytes],
value_deserializer: Callable[[Any], V],
) -> None:
"""Initialize an `EncodedStore`.
Args:
store: The underlying byte store to wrap.
key_encoder: Function to encode keys from type `K` to strings.
value_serializer: Function to serialize values from type `V` to bytes.
value_deserializer: Function to deserialize bytes back to type V.
"""
self.store = store
self.key_encoder = key_encoder
self.value_serializer = value_serializer
self.value_deserializer = value_deserializer
def mget(self, keys: Sequence[K]) -> list[V | None]:
"""Get the values associated with the given keys.
Args:
keys: A sequence of keys.
Returns:
A sequence of optional values associated with the keys.
If a key is not found, the corresponding value will be `None`.
"""
encoded_keys: list[str] = [self.key_encoder(key) for key in keys]
values = self.store.mget(encoded_keys)
return [
self.value_deserializer(value) if value is not None else value
for value in values
]
async def amget(self, keys: Sequence[K]) -> list[V | None]:
"""Async get the values associated with the given keys.
Args:
keys: A sequence of keys.
Source
Frequently Asked Questions
What is the EncoderBackedStore class?
EncoderBackedStore is a class in the langchain codebase, defined in libs/langchain/langchain_classic/storage/encoder_backed.py.
Where is EncoderBackedStore defined?
EncoderBackedStore is defined in libs/langchain/langchain_classic/storage/encoder_backed.py at line 13.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free