Home / Class/ EncoderBackedStore Class — langchain Architecture

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.

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