
    3fiL                         d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ  ej                  e      Z G d de      Zy)    N)ListOptional)BaseChatMessageHistory)BaseMessagemessage_to_dictmessages_from_dict)
get_clientc            
           e Zd ZdZ	 	 	 ddedededee   fdZedefd	       Z	ede
e   fd
       Zej                  de
e   ddfd       ZdeddfdZddZy)RedisChatMessageHistorya  Chat message history stored in a Redis database.

    Setup:
        Install ``redis`` python package.

        .. code-block:: bash

            pip install redis

    Instantiate:
        .. code-block:: python

        from langchain_community.chat_message_histories import RedisChatMessageHistory

        history = RedisChatMessageHistory(
            session_id = "your-session-id",
            url="redis://your-host:your-port:your-database",  # redis://localhost:6379/0
        )

    Add and retrieve messages:
        .. code-block:: python

            # Add single message
            history.add_message(message)

            # Add batch messages
            history.add_messages([message1, message2, message3, ...])

            # Add human message
            history.add_user_message(human_message)

            # Add ai message
            history.add_ai_message(ai_message)

            # Retrieve messages
            messages = history.messages
    N
session_idurl
key_prefixttlc                    	 ddl }	 t        |      | _        || _        || _	        || _
        y# t        $ r t        d      w xY w# |j                  j
                  $ r}t        j                  |       Y d}~ad}~ww xY w)a  Initialize with a RedisChatMessageHistory instance.

        Args:
            session_id: str
                The ID for single chat session. Used to form keys with `key_prefix`.
            url: Optional[str]
                String parameter configuration for connecting to the redis.
            key_prefix: Optional[str]
                The prefix of the key, combined with `session id` to form the key.
            ttl: Optional[int]
                Set the expiration time of `key`, the unit is seconds.
        r   NzRCould not import redis python package. Please install it with `pip install redis`.)	redis_url)redisImportErrorr	   redis_client
exceptionsConnectionErrorloggererrorr   r   r   )selfr   r   r   r   r   r   s          n/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/chat_message_histories/redis.py__init__z RedisChatMessageHistory.__init__8   s    &		  *S 9D %$  	> 	 // 	 LL	 s    . A AA>A99A>returnc                 4    | j                   | j                  z   S )zConstruct the record key to use)r   r   r   s    r   keyzRedisChatMessageHistory.key\   s     00    c                     | j                   j                  | j                  dd      }|ddd   D cg c]&  }t        j                  |j                  d            ( }}t        |      }|S c c}w )z Retrieve the messages from Redisr   Nzutf-8)r   lranger   jsonloadsdecoder   )r   _itemsmitemsmessagess        r   r*   z RedisChatMessageHistory.messagesa   sd     ""))$((Ar:8>ttE1AHHW-.EE%e, Fs   +A,r*   c                     t        d      )NzODirect assignment to 'messages' is not allowed. Use the 'add_messages' instead.)NotImplementedError)r   r*   s     r   r*   z RedisChatMessageHistory.messagesi   s    !/
 	
r    messagec                    | j                   j                  | j                  t        j                  t        |                   | j                  r1| j                   j                  | j                  | j                         yy)z)Append the message to the record in RedisN)r   lpushr   r$   dumpsr   r   expire)r   r-   s     r   add_messagez#RedisChatMessageHistory.add_messagep   sT    $**_W5M*NO88$$TXXtxx8 r    c                 N    | j                   j                  | j                         y)zClear session memory from RedisN)r   deleter   r   s    r   clearzRedisChatMessageHistory.clearv   s      *r    )zredis://localhost:6379/0zmessage_store:N)r   N)__name__
__module____qualname____doc__strr   intr   propertyr   r   r   r*   setterr2   r5    r    r   r   r      s    $R .*!"" " 	"
 c]"H 1S 1 1 ${+   __
k!2 
t 
 
9; 94 9+r    r   )r$   loggingtypingr   r   langchain_core.chat_historyr   langchain_core.messagesr   r   r   #langchain_community.utilities.redisr	   	getLoggerr6   r   r   r>   r    r   <module>rE      sA      ! >  ;			8	$g+4 g+r    