Home / Class/ UpstashRedisEntityStore Class — langchain Architecture

UpstashRedisEntityStore Class — langchain Architecture

Architecture documentation for the UpstashRedisEntityStore class in entity.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7["UpstashRedisEntityStore"]
  d6a371b0_afe3_1ceb_cd58_c254c31b562e["BaseEntityStore"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|extends| d6a371b0_afe3_1ceb_cd58_c254c31b562e
  1ed59830_902e_f3ce_f9f6_76963a6fd122["entity.py"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|defined in| 1ed59830_902e_f3ce_f9f6_76963a6fd122
  d11783a0_d6d8_0a95_fa5a_83d372212579["__init__()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| d11783a0_d6d8_0a95_fa5a_83d372212579
  53efda6e_ce4c_bff1_5482_a930bf1f68ac["full_key_prefix()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| 53efda6e_ce4c_bff1_5482_a930bf1f68ac
  47be7f01_ba5d_4891_2980_e37bcc14d40c["get()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| 47be7f01_ba5d_4891_2980_e37bcc14d40c
  8eee5fac_e6eb_2013_f654_4a2c0c4ce3bd["set()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| 8eee5fac_e6eb_2013_f654_4a2c0c4ce3bd
  c0642ef4_bd51_0d06_6d67_265cf067aeaa["delete()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| c0642ef4_bd51_0d06_6d67_265cf067aeaa
  6c8d475b_0f36_5deb_090a_14caeed7002a["exists()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| 6c8d475b_0f36_5deb_090a_14caeed7002a
  33aac564_78c0_a01d_38c8_0a4c9755f4c3["clear()"]
  65c1d19b_b721_7b61_7b71_c0d54a3a49e7 -->|method| 33aac564_78c0_a01d_38c8_0a4c9755f4c3

Relationship Graph

Source Code

libs/langchain/langchain_classic/memory/entity.py lines 104–208

class UpstashRedisEntityStore(BaseEntityStore):
    """Upstash Redis backed Entity store.

    Entities get a TTL of 1 day by default, and
    that TTL is extended by 3 days every time the entity is read back.
    """

    def __init__(
        self,
        session_id: str = "default",
        url: str = "",
        token: str = "",
        key_prefix: str = "memory_store",
        ttl: int | None = 60 * 60 * 24,
        recall_ttl: int | None = 60 * 60 * 24 * 3,
        *args: Any,
        **kwargs: Any,
    ):
        """Initializes the RedisEntityStore.

        Args:
            session_id: Unique identifier for the session.
            url: URL of the Redis server.
            token: Authentication token for the Redis server.
            key_prefix: Prefix for keys in the Redis store.
            ttl: Time-to-live for keys in seconds (default 1 day).
            recall_ttl: Time-to-live extension for keys when recalled (default 3 days).
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.
        """
        try:
            from upstash_redis import Redis
        except ImportError as e:
            msg = (
                "Could not import upstash_redis python package. "
                "Please install it with `pip install upstash_redis`."
            )
            raise ImportError(msg) from e

        super().__init__(*args, **kwargs)

        try:
            self.redis_client = Redis(url=url, token=token)
        except Exception as exc:
            error_msg = "Upstash Redis instance could not be initiated"
            logger.exception(error_msg)
            raise RuntimeError(error_msg) from exc

        self.session_id = session_id
        self.key_prefix = key_prefix
        self.ttl = ttl
        self.recall_ttl = recall_ttl or ttl

    @property
    def full_key_prefix(self) -> str:
        """Returns the full key prefix with session ID."""
        return f"{self.key_prefix}:{self.session_id}"

    @override
    def get(self, key: str, default: str | None = None) -> str | None:
        res = (
            self.redis_client.getex(f"{self.full_key_prefix}:{key}", ex=self.recall_ttl)
            or default
            or ""
        )
        logger.debug(
            "Upstash Redis MEM get '%s:%s': '%s'", self.full_key_prefix, key, res
        )
        return res

    @override
    def set(self, key: str, value: str | None) -> None:
        if not value:
            return self.delete(key)
        self.redis_client.set(f"{self.full_key_prefix}:{key}", value, ex=self.ttl)
        logger.debug(
            "Redis MEM set '%s:%s': '%s' EX %s",
            self.full_key_prefix,
            key,
            value,
            self.ttl,

Extends

Frequently Asked Questions

What is the UpstashRedisEntityStore class?
UpstashRedisEntityStore is a class in the langchain codebase, defined in libs/langchain/langchain_classic/memory/entity.py.
Where is UpstashRedisEntityStore defined?
UpstashRedisEntityStore is defined in libs/langchain/langchain_classic/memory/entity.py at line 104.
What does UpstashRedisEntityStore extend?
UpstashRedisEntityStore extends BaseEntityStore.

Analyze Your Own Codebase

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

Try Supermodel Free