§
    ™Štj‚V  ã                   ó¤  — d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlm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 ddlmZ ddlmZ ddlm Z m!Z! ddl"m#Z# e
rddl$Z$ ej%        e&¦  «        Z' edddd¬¦  «         G d„ dee¦  «        ¦   «         Z( edddd¬¦  «         G d„ de(¦  «        ¦   «         Z) edddd¬¦  «         G d„ de(¦  «        ¦   «         Z* edddd¬¦  «         G d„ de(¦  «        ¦   «         Z+ edddd¬¦  «         G d„ de(¦  «        ¦   «         Z, edddd¬¦  «         G d „ d!e¦  «        ¦   «         Z-dS )"zJDeprecated as of LangChain v0.3.4 and will be removed in LangChain v1.0.0.é    N)ÚABCÚabstractmethod)ÚIterable)Úislice)ÚTYPE_CHECKINGÚAny)Ú
deprecated)ÚBaseLanguageModel)ÚBaseMessageÚget_buffer_string)ÚBasePromptTemplate)Ú	BaseModelÚ
ConfigDictÚField)Úoverride)ÚLLMChain)ÚBaseChatMemory)ÚENTITY_EXTRACTION_PROMPTÚENTITY_SUMMARIZATION_PROMPT)Úget_prompt_input_keyz0.3.1z2.0.0zlangchain.agents.create_agentzùFor agents that need to remember prior interactions, use `create_agent` with checkpointing or the `Store` API. See https://docs.langchain.com/oss/python/langchain/short-term-memory and https://docs.langchain.com/oss/python/langchain/long-term-memory)ÚsinceÚremovalÚalternativeÚaddendumc            	       óÆ   — e Zd ZdZeddededz  dedz  fd„¦   «         Zedededz  ddfd„¦   «         Zededdfd	„¦   «         Zedede	fd
„¦   «         Z
edd„¦   «         ZdS )ÚBaseEntityStorez%Abstract base class for Entity store.NÚkeyÚdefaultÚreturnc                 ó   — dS )zGet entity value from store.N© ©Úselfr   r   s      ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/memory/entity.pyÚgetzBaseEntityStore.get,   ó   € € € ó    Úvaluec                 ó   — dS )zSet entity value in store.Nr!   ©r#   r   r(   s      r$   ÚsetzBaseEntityStore.set0   r&   r'   c                 ó   — dS )zDelete entity value from store.Nr!   ©r#   r   s     r$   ÚdeletezBaseEntityStore.delete4   r&   r'   c                 ó   — dS )z Check if entity exists in store.Nr!   r-   s     r$   ÚexistszBaseEntityStore.exists8   r&   r'   c                 ó   — dS )zDelete all entities from store.Nr!   ©r#   s    r$   ÚclearzBaseEntityStore.clear<   r&   r'   ©N©r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr%   r+   r.   Úboolr0   r3   r!   r'   r$   r   r      s  € € € € € ð 0Ð/àð+ð +�sð + S¨4¡Zð +¸3À¹:ð +ð +ð +ñ „^ð+ð ð)�sð ) 3¨¡:ð )°$ð )ð )ð )ñ „^ð)ð ð.˜#ð . $ð .ð .ð .ñ „^ð.ð ð/˜#ð / $ð /ð /ð /ñ „^ð/ð ð.ð .ð .ñ „^ð.ð .ð .r'   r   c            	       óì   — e Zd ZU dZi Zeeedz  f         ed<   eddededz  dedz  fd„¦   «         Z	edededz  ddfd	„¦   «         Z
ededdfd
„¦   «         Zededefd„¦   «         Zedd„¦   «         ZdS )ÚInMemoryEntityStorezIn-memory Entity store.NÚstorer   r   r   c                 ó8   — | j                              ||¦  «        S r4   )r>   r%   r"   s      r$   r%   zInMemoryEntityStore.getQ   s   € àŒz�~Š~˜c 7Ñ+Ô+Ð+r'   r(   c                 ó   — || j         |<   d S r4   ©r>   r*   s      r$   r+   zInMemoryEntityStore.setU   s   € àˆŒ
�3‰ˆˆr'   c                 ó   — | j         |= d S r4   rA   r-   s     r$   r.   zInMemoryEntityStore.deleteY   s   € àŒJ�sˆOˆOˆOr'   c                 ó   — || j         v S r4   rA   r-   s     r$   r0   zInMemoryEntityStore.exists]   s   € à�d”jÐ Ð r'   c                 ó4   — | j                              ¦   «         S r4   )r>   r3   r2   s    r$   r3   zInMemoryEntityStore.cleara   s   € àŒz×ÒÑ!Ô!Ð!r'   r4   r5   )r6   r7   r8   r9   r>   Údictr:   Ú__annotations__r   r%   r+   r.   r;   r0   r3   r!   r'   r$   r=   r=   A   s0  € € € € € € ð "Ð!à#%€Eˆ4��S˜4‘Z�Ô Ð%Ð%Ñ%àð,ð ,�sð , S¨4¡Zð ,¸3À¹:ð ,ð ,ð ,ñ „Xð,ð ð �sð   3¨¡:ð  °$ð  ð  ð  ñ „Xð ð ð˜#ð  $ð ð ð ñ „Xðð ð!˜#ð ! $ð !ð !ð !ñ „Xð!ð ð"ð "ð "ñ „Xð"ð "ð "r'   r=   c                   ó.  ‡ — e Zd ZdZ	 	 	 	 	 	 ddeded	ed
ededz  dedz  dedefˆ fd„Zedefd„¦   «         Z	e
ddededz  dedz  fd„¦   «         Ze
dededz  ddfd„¦   «         Ze
deddfd„¦   «         Ze
dedefd„¦   «         Ze
dd„¦   «         Zˆ xZS )ÚUpstashRedisEntityStorezŸ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.
    r   Ú Úmemory_storeé€Q é€ô Ú
session_idÚurlÚtokenÚ
key_prefixÚttlNÚ
recall_ttlÚargsÚkwargsc                 ór  •— 	 ddl m}	 n$# t          $ r}
d}t          |¦  «        |
‚d}
~
ww xY w t          ¦   «         j        |i |¤Ž 	  |	||¬¦  «        | _        n># t          $ r1}d}t                               |¦  «         t          |¦  «        |‚d}~ww xY w|| _
        || _        || _        |p|| _        dS )a  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.
        r   )ÚRediszbCould not import upstash_redis python package. Please install it with `pip install upstash_redis`.N)rN   rO   z-Upstash Redis instance could not be initiated)Úupstash_redisrV   ÚImportErrorÚsuperÚ__init__Úredis_clientÚ	ExceptionÚloggerÚ	exceptionÚRuntimeErrorrM   rP   rQ   rR   )r#   rM   rN   rO   rP   rQ   rR   rS   rT   rV   ÚeÚmsgÚexcÚ	error_msgÚ	__class__s                 €r$   rZ   z UpstashRedisEntityStore.__init__x   s  ø€ ð.	*Ø+Ð+Ð+Ð+Ð+Ð+Ð+øÝð 	*ð 	*ð 	*ðFð õ ˜cÑ"Ô"¨Ð)øøøøð	*øøøð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	3Ø % ¨#°UÐ ;Ñ ;Ô ;ˆDÔÐøÝð 	3ð 	3ð 	3ØGˆIÝ×Ò˜YÑ'Ô'Ð'Ý˜yÑ)Ô)¨sÐ2øøøøð	3øøøð
 %ˆŒØ$ˆŒØˆŒØ$Ð+¨ˆŒˆˆs(   ƒ
 Š
+”&¦+ÁA Á
BÁ%,BÂBr   c                 ó$   — | j         › d| j        › �S ©z,Returns the full key prefix with session ID.ú:©rP   rM   r2   s    r$   Úfull_key_prefixz'UpstashRedisEntityStore.full_key_prefix¦   ó   € ð ”/Ð5Ð5 D¤OÐ5Ð5Ð5r'   r   c                 ó¨   — | j                              | j        › d|› �| j        ¬¦  «        p|pd}t                               d| j        ||¦  «         |S )Nrg   ©ÚexrI   z#Upstash Redis MEM get '%s:%s': '%s'©r[   Úgetexri   rR   r]   Údebug©r#   r   r   Úress       r$   r%   zUpstashRedisEntityStore.get«   sp   € ð Ô×#Ò# tÔ';Ð$CÐ$C¸cÐ$CÐ$CÈÌÐ#ÑXÔXð Øðàð 	õ
 	�ŠØ1°4Ô3GÈÈcñ	
ô 	
ð 	
ð ˆ
r'   r(   c                 óÜ   — |s|                       |¦  «        S | j                             | j        › d|› �|| j        ¬¦  «         t
                               d| j        ||| j        ¦  «         d S )Nrg   rl   z!Redis MEM set '%s:%s': '%s' EX %s©r.   r[   r+   ri   rQ   r]   rp   r*   s      r$   r+   zUpstashRedisEntityStore.set·   ó~   € àð 	$Ø—;’;˜sÑ#Ô#Ð#ØÔ×Ò Ô!5Ð=Ð=¸Ð=Ð=¸uÈÌÐÑRÔRÐRÝ�ŠØ/ØÔ ØØØŒHñ	
ô 	
ð 	
ð ˆtr'   c                 óN   — | j                              | j        › d|› �¦  «         d S ©Nrg   ©r[   r.   ri   r-   s     r$   r.   zUpstashRedisEntityStore.deleteÅ   ó0   € àÔ× Ò  DÔ$8Ð!@Ð!@¸3Ð!@Ð!@ÑAÔAÐAÐAÐAr'   c                 óR   — | j                              | j        › d|› �¦  «        dk    S ©Nrg   é   ©r[   r0   ri   r-   s     r$   r0   zUpstashRedisEntityStore.existsÉ   ó/   € àÔ ×'Ò'¨4Ô+?Ð(GÐ(GÀ#Ð(GÐ(GÑHÔHÈAÒMÐMr'   c                 óx   ‡ — dt           dt           fˆ fd„} |d¦  «        }|dk    r ||¦  «         |dk    °d S d S )NÚcursorr   c                 ór   •— ‰j                              | ‰j        › d�¦  «        \  } } ‰j         j        |Ž  | S )Nú:*)r[   Úscanri   r.   )r€   Úkeys_to_deleter#   s     €r$   Úscan_and_deletez6UpstashRedisEntityStore.clear.<locals>.scan_and_deleteÏ   sL   ø€ Ø%)Ô%6×%;Ò%;ØØÔ'Ð+Ð+Ð+ñ&ô &Ñ"ˆF�Nð %ˆDÔÔ$ nÐ5Ð5ØˆMr'   r   )Úint)r#   r…   r€   s   `  r$   r3   zUpstashRedisEntityStore.clearÍ   sl   ø€ ð	¥Cð 	­Cð 	ð 	ð 	ð 	ð 	ð 	ð !� Ñ#Ô#ˆØ˜ŠkˆkØˆO˜FÑ#Ô#Ð#ð ˜Škˆkˆkˆkˆkˆkr'   )r   rI   rI   rJ   rK   rL   r4   r5   )r6   r7   r8   r9   r:   r†   r   rZ   Úpropertyri   r   r%   r+   r.   r;   r0   r3   Ú__classcell__©rd   s   @r$   rH   rH   f   sá  ø€ € € € € ðð ð $ØØØ(Ø&Ø!1ð,,ð ,,àð,,ð ð,,ð ð	,,ð
 ð,,ð �4‰Zð,,ð ˜$‘Jð,,ð ð,,ð ð,,ð ,,ð ,,ð ,,ð ,,ð ,,ð\ ð6 ð 6ð 6ð 6ñ „Xð6ð ð	ð 	�sð 	 S¨4¡Zð 	¸3À¹:ð 	ð 	ð 	ñ „Xð	ð ð�sð  3¨¡:ð °$ð ð ð ñ „Xðð ðB˜#ð B $ð Bð Bð Bñ „XðBð ðN˜#ð N $ð Nð Nð Nñ „XðNð ð$ð $ð $ñ „Xð$ð $ð $ð $ð $r'   rH   c                   óx  ‡ — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	e
dz  ed	<   d
Ze
dz  ed<   	 	 	 	 	 ddededed	e
dz  de
dz  dedefˆ fd„Zedefd„¦   «         Zeddededz  dedz  fd„¦   «         Zedededz  ddfd„¦   «         Zededdfd„¦   «         Zededefd„¦   «         Zedd„¦   «         Zˆ xZS )ÚRedisEntityStorez—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.
    r[   r   rM   rJ   rP   rK   NrQ   rL   rR   úredis://localhost:6379/0rN   rS   rT   c                 ó¨  •— 	 ddl }n$# t          $ r}	d}
t          |
¦  «        |	‚d}	~	ww xY w t          ¦   «         j        |i |¤Ž 	 ddlm} n$# t          $ r}	d}
t          |
¦  «        |	‚d}	~	ww xY w	  ||d¬¦  «        | _        n/# |j        j        $ r t           
                    d¦  «         Y nw xY w|| _        || _        || _        |p|| _        dS )	aÝ  Initializes the RedisEntityStore.

        Args:
            session_id: Unique identifier for the session.
            url: URL of 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.
        r   NzRCould not import redis python package. Please install it with `pip install redis`.)Ú
get_clientzzCould not import langchain_community.utilities.redis.get_client. Please install it with `pip install langchain-community`.T)Ú	redis_urlÚdecode_responseszRedis client could not connect)ÚredisrX   rY   rZ   Ú#langchain_community.utilities.redisrŽ   r[   Ú
exceptionsÚConnectionErrorr]   r^   rM   rP   rQ   rR   )r#   rM   rN   rP   rQ   rR   rS   rT   r‘   r`   ra   rŽ   rd   s               €r$   rZ   zRedisEntityStore.__init__ô   sD  ø€ ð*	*ØˆLˆLˆLˆLøÝð 	*ð 	*ð 	*ð>ð õ ˜cÑ"Ô"¨Ð)øøøøð	*øøøð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	*ØFÐFÐFÐFÐFÐFÐFøÝð 	*ð 	*ð 	*ðLð õ ˜cÑ"Ô"¨Ð)øøøøð	*øøøð	?Ø * 
°SÈ4Ð PÑ PÔ PˆDÔÐøØÔÔ/ð 	?ð 	?ð 	?Ý×ÒÐ=Ñ>Ô>Ð>Ð>Ð>ð	?øøøð %ˆŒØ$ˆŒØˆŒØ$Ð+¨ˆŒˆˆs:   ƒ ˆ
)’$¤)ÁA Á
A.ÁA)Á)A.Á2B Â)B1Â0B1r   c                 ó$   — | j         › d| j        › �S rf   rh   r2   s    r$   ri   z RedisEntityStore.full_key_prefix'  rj   r'   r   c                 ó¨   — | j                              | j        › d|› �| j        ¬¦  «        p|pd}t                               d| j        ||¦  «         |S )Nrg   rl   rI   zREDIS MEM get '%s:%s': '%s'rn   rq   s       r$   r%   zRedisEntityStore.get,  sh   € ð Ô×#Ò# tÔ';Ð$CÐ$C¸cÐ$CÐ$CÈÌÐ#ÑXÔXð Øðàð 	õ
 	�ŠÐ2°DÔ4HÈ#ÈsÑSÔSÐSØˆ
r'   r(   c                 óÜ   — |s|                       |¦  «        S | j                             | j        › d|› �|| j        ¬¦  «         t
                               d| j        ||| j        ¦  «         d S )Nrg   rl   z!REDIS MEM set '%s:%s': '%s' EX %srt   r*   s      r$   r+   zRedisEntityStore.set6  ru   r'   c                 óN   — | j                              | j        › d|› �¦  «         d S rw   rx   r-   s     r$   r.   zRedisEntityStore.deleteD  ry   r'   c                 óR   — | j                              | j        › d|› �¦  «        dk    S r{   r}   r-   s     r$   r0   zRedisEntityStore.existsH  r~   r'   c                 óà   — dt           t                   dt          dt           t                   fd„} || j                             | j        › d�¦  «        d¦  «        D ]} | j        j        |Ž  Œd S )NÚiterableÚ
batch_sizer   c              3   ó°   K  — t          | ¦  «        }t          t          ||¦  «        ¦  «        x}r%|V — t          t          ||¦  «        ¦  «        x}°#d S d S r4   )ÚiterÚlistr   )r›   rœ   ÚiteratorÚbatchs       r$   Úbatchedz'RedisEntityStore.clear.<locals>.batchedO  sn   è è € Ý˜H‘~”~ˆHÝ¥ x°Ñ <Ô <Ñ=Ô=Ð=�%ð Ø���õ  ¥ x°Ñ <Ô <Ñ=Ô=Ð=�%ð ð ð ð ð r'   r‚   iô  )r   r   r†   r[   Ú	scan_iterri   r.   )r#   r¢   Úkeybatchs      r$   r3   zRedisEntityStore.clearL  s•   € ð	�h¥sœmð 	½ð 	ÅÍ#Äð 	ð 	ð 	ð 	ð
  ˜ØÔ×'Ò'¨4Ô+?Ð(CÐ(CÐ(CÑDÔDØñ
ô 
ð 	0ð 	0ˆHð %ˆDÔÔ$ hÐ/Ð/Ð/ð		0ð 	0r'   )r   rŒ   rJ   rK   rL   r4   r5   )r6   r7   r8   r9   r   rF   rM   r:   rP   rQ   r†   rR   rZ   r‡   ri   r   r%   r+   r.   r;   r0   r3   rˆ   r‰   s   @r$   r‹   r‹   Ü   s,  ø€ € € € € € ðð ð ÐÐÑØ€J�ÐÐÑØ$€J�Ð$Ð$Ñ$Ø"€Cˆˆt‰Ð"Ð"Ñ"Ø-€J��d‘
Ð-Ð-Ñ-ð $Ø-Ø(Ø&Ø!1ð1,ð 1,àð1,ð ð1,ð ð	1,ð
 �4‰Zð1,ð ˜$‘Jð1,ð ð1,ð ð1,ð 1,ð 1,ð 1,ð 1,ð 1,ðf ð6 ð 6ð 6ð 6ñ „Xð6ð ðð �sð  S¨4¡Zð ¸3À¹:ð ð ð ñ „Xðð ð�sð  3¨¡:ð °$ð ð ð ñ „Xðð ðB˜#ð B $ð Bð Bð Bñ „XðBð ðN˜#ð N $ð Nð Nð Nñ „XðNð ð0ð 0ð 0ñ „Xð0ð 0ð 0ð 0ð 0r'   r‹   c                   ó2  ‡ — e Zd ZU dZdZeed<   dZeed<   dZe	ed<    e
d¬	¦  «        Z	 	 	 ddededede	de	f
ˆ fd„Zedefd„¦   «         Zddededdfd„Zd d„Zd!dededz  dedz  fd„Zdededz  ddfd„Zdeddfd„Zdedefd„Zed d„¦   «         Zˆ xZS )"ÚSQLiteEntityStorez8SQLite-backed Entity store with safe query construction.r   rM   rJ   Ú
table_nameNÚconnT)Úarbitrary_types_allowedúentities.dbÚdb_filerS   rT   c                 ón  •—  t          ¦   «         j        |i |¤Ž 	 ddl}n$# t          $ r}d}t          |¦  «        |‚d}~ww xY w|                     ¦   «         r|                     ¦   «         sd}t          |¦  «        ‚ |j        |¦  «        | _        || _        || _	        |  
                    ¦   «          dS )aQ  Initializes the SQLiteEntityStore.

        Args:
            session_id: Unique identifier for the session.
            db_file: Path to the SQLite database file.
            table_name: Name of the table to store entities.
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.
        r   NzVCould not import sqlite3 python package. Please install it with `pip install sqlite3`.z;Table name and session ID must be valid Python identifiers.)rY   rZ   Úsqlite3rX   ÚisidentifierÚ
ValueErrorÚconnectr¨   rM   r§   Ú_create_table_if_not_exists)
r#   rM   r«   r§   rS   rT   r­   r`   ra   rd   s
            €r$   rZ   zSQLiteEntityStore.__init__q  sà   ø€ ð" 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	*ØˆNˆNˆNˆNøÝð 	*ð 	*ð 	*ð@ð õ ˜cÑ"Ô"¨Ð)øøøøð	*øøøð ×&Ò&Ñ(Ô(ð 	"°
×0GÒ0GÑ0IÔ0Ið 	"àOˆCÝ˜S‘/”/Ð!à#�G”O GÑ,Ô,ˆŒ	Ø$ˆŒØ$ˆŒØ×(Ò(Ñ*Ô*Ð*Ð*Ð*s   œ! ¡
A«=½Ar   c                 ó$   — | j         › d| j        › �S )z,Returns the full table name with session ID.Ú_)r§   rM   r2   s    r$   Úfull_table_namez!SQLiteEntityStore.full_table_name—  rj   r'   r!   ÚqueryÚparamszsqlite3.Cursorc                 óz   — | j         5  | j                              ||¦  «        cddd¦  «         S # 1 swxY w Y   dS )z1Executes a query with proper connection handling.N)r¨   Úexecute)r#   rµ   r¶   s      r$   Ú_execute_queryz SQLiteEntityStore._execute_queryœ  sƒ   € àŒYð 	4ð 	4Ø”9×$Ò$ U¨FÑ3Ô3ð	4ð 	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s   ˆ0°4·4c                 óF   — d| j         › d�}|                      |¦  «         dS )zACreates the entity table if it doesn't exist, using safe quoting.z)
            CREATE TABLE IF NOT EXISTS "z[" (
                key TEXT PRIMARY KEY,
                value TEXT
            )
        N©r´   r¹   )r#   Úcreate_table_querys     r$   r±   z-SQLiteEntityStore._create_table_if_not_exists¡  s<   € ðØ)-Ô)=ðð ð Ðð 	×ÒÐ.Ñ/Ô/Ð/Ð/Ð/r'   r   c                 ó†   — d| j         › d�}|                      ||f¦  «        }|                     ¦   «         }|�|d         n|S )z1Retrieves a value, safely quoting the table name.zSELECT value FROM "ú" WHERE key = ?Nr   ©r´   r¹   Úfetchone)r#   r   r   rµ   r€   Úresults         r$   r%   zSQLiteEntityStore.get¬  sQ   € ð L dÔ&:ÐKÐKÐKˆØ×$Ò$ U¨S¨FÑ3Ô3ˆØ—’Ñ"Ô"ˆØ"Ð.ˆv�aŒyˆy°GÐ;r'   r(   c                 óz   — |s|                       |¦  «        S d| j        › d�}|                      |||f¦  «         dS )z;Inserts or replaces a value, safely quoting the table name.zINSERT OR REPLACE INTO "z" (key, value) VALUES (?, ?)N)r.   r´   r¹   )r#   r   r(   rµ   s       r$   r+   zSQLiteEntityStore.setµ  s`   € àð 	$Ø—;’;˜sÑ#Ô#Ð#ðCØÔ$ðCð Cð Cð 	ð 	×Ò˜E C¨ <Ñ0Ô0Ð0Øˆtr'   c                 óJ   — d| j         › d�}|                      ||f¦  «         dS )z8Deletes a key-value pair, safely quoting the table name.zDELETE FROM "r¾   Nr»   )r#   r   rµ   s      r$   r.   zSQLiteEntityStore.deleteÁ  s6   € ð F Ô 4ÐEÐEÐEˆØ×Ò˜E C 6Ñ*Ô*Ð*Ð*Ð*r'   c                 ór   — d| j         › d�}|                      ||f¦  «        }|                     ¦   «         duS )zAChecks for the existence of a key, safely quoting the table name.zSELECT 1 FROM "z" WHERE key = ? LIMIT 1Nr¿   )r#   r   rµ   r€   s       r$   r0   zSQLiteEntityStore.existsÇ  sD   € ð P $Ô"6ÐOÐOÐOˆØ×$Ò$ U¨S¨FÑ3Ô3ˆØ�ŠÑ Ô ¨Ð,Ð,r'   c                 ó�   — d| j         › d�}| j        5  | j                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz
            DELETE FROM z	
        )r´   r¨   r¸   )r#   rµ   s     r$   r3   zSQLiteEntityStore.clearÎ  s¢   € ðØÔ-ðð ð ˆð ŒYð 	%ð 	%ØŒI×Ò˜eÑ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%s   “;»?Á?)r   rª   rJ   )r!   r5   r4   )r6   r7   r8   r9   rM   r:   rF   r§   r¨   r   r   Úmodel_configrZ   r‡   r´   Útupler¹   r±   r%   r+   r.   r;   r0   r   r3   rˆ   r‰   s   @r$   r¦   r¦   [  s  ø€ € € € € € ð CÐBà€J�ÐÐÑØ$€J�Ð$Ð$Ñ$Ø€Dˆ#ÐÐÑà�:Ø $ðñ ô €Lð $Ø$Ø(ð	$+ð $+àð$+ð ð$+ð ð	$+ð
 ð$+ð ð$+ð $+ð $+ð $+ð $+ð $+ðL ð6 ð 6ð 6ð 6ñ „Xð6ð4ð 4 Cð 4°ð 4Ð@Pð 4ð 4ð 4ð 4ð
	0ð 	0ð 	0ð 	0ð<ð <�sð < S¨4¡Zð <¸3À¹:ð <ð <ð <ð <ð
�sð 
 3¨¡:ð 
°$ð 
ð 
ð 
ð 
ð+˜#ð + $ð +ð +ð +ð +ð-˜#ð - $ð -ð -ð -ð -ð ð%ð %ð %ñ „Xð%ð %ð %ð %ð %r'   r¦   c                   ót  ‡ — e Zd ZU dZdZeed<   dZeed<   eed<   e	Z
eed<   eZeed<   g Zee         ed	<   d
Zeed<   dZeed<    ee¬¦  «        Zeed<   edee         fd„¦   «         Zedee         fd„¦   «         Zdeeef         deeef         fd„Zdeeef         deeef         ddfˆ fd„Zdd„Zˆ xZ S )ÚConversationEntityMemorya<  Entity extractor & summarizer memory.

    Extracts named entities from the recent chat history and generates summaries.
    With a swappable entity store, persisting entities across conversations.
    Defaults to an in-memory entity store, and can be swapped out for a Redis,
    SQLite, or other entity store.
    ÚHumanÚhuman_prefixÚAIÚ	ai_prefixÚllmÚentity_extraction_promptÚentity_summarization_promptÚentity_cacheé   ÚkÚhistoryÚchat_history_key)Údefault_factoryÚentity_storer   c                 ó   — | j         j        S )zAccess chat memory messages.)Úchat_memoryÚmessagesr2   s    r$   ÚbufferzConversationEntityMemory.bufferþ  s   € ð ÔÔ(Ð(r'   c                 ó   — d| j         gS )z,Will always return list of memory variables.Úentities)rÕ   r2   s    r$   Úmemory_variablesz)ConversationEntityMemory.memory_variables  s   € ð ˜DÔ1Ð2Ð2r'   Úinputsc                 óD  — t          | j        | j        ¬¦  «        }| j        €t	          || j        ¦  «        }n| j        }t          | j        | j         dz  d…         | j	        | j
        ¬¦  «        }|                     |||         ¬¦  «        }|                     ¦   «         dk    rg }nd„ |                     d¦  «        D ¦   «         }i }|D ] }| j                             |d	¦  «        ||<   Œ!|| _        | j        r| j        | j         dz  d…         }	n|}	| j        |	d
|iS )a|  Load memory variables.

        Returns chat history and all generated entities with summaries if available,
        and updates or clears the recent entity cache.

        New entity name can be found when calling this method, before the entity
        summaries are generated, so the entity cache values may be empty if no entity
        descriptions are generated yet.
        ©rÎ   ÚpromptNé   ©rË   rÍ   )rÔ   ÚinputÚNONEc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r!   )Ústrip)Ú.0Úws     r$   ú
<listcomp>zBConversationEntityMemory.load_memory_variables.<locals>.<listcomp>0  s    € Ð=Ð=Ð= a˜Ÿš™	œ	Ð=Ð=Ð=r'   ú,rI   rÝ   )r   rÎ   rÏ   Ú	input_keyr   rÞ   r   rÛ   rÓ   rË   rÍ   Úpredictrè   Úsplitr×   r%   rÑ   Úreturn_messagesrÕ   )
r#   rß   ÚchainÚprompt_input_keyÚbuffer_stringÚoutputrÝ   Úentity_summariesÚentityrÛ   s
             r$   Úload_memory_variablesz.ConversationEntityMemory.load_memory_variables  sg  € õ ˜TœX¨dÔ.KÐLÑLÔLˆàŒ>Ð!Ý3°F¸DÔ<QÑRÔRÐÐà#œ~Ðõ
 *ØŒK˜œ˜ !™˜˜Ô&ØÔ*Ø”nð
ñ 
ô 
ˆð —’Ø!ØÐ)Ô*ð ñ 
ô 
ˆð �<Š<‰>Œ>˜VÒ#Ð#ØˆHˆHð >Ð=¨6¯<ª<¸Ñ+<Ô+<Ð=Ñ=Ô=ˆHð Ðàð 	Ið 	IˆFØ'+Ô'8×'<Ò'<¸VÀRÑ'HÔ'HÐ˜VÑ$Ð$ð %ˆÔð Ôð 	#àœ+ t¤v g°¡k m mÔ4ˆFˆFð #ˆFð Ô! 6ØÐ(ð
ð 	
r'   ÚoutputsNc                 ó  •— t          ¦   «                              ||¦  «         | j        €t          || j        ¦  «        }n| j        }t          | j        | j         dz  d…         | j        | j	        ¬¦  «        }||         }t          | j        | j        ¬¦  «        }| j        D ]c}| j                             |d¦  «        }|                     ||||¬¦  «        }	| j                             ||	                     ¦   «         ¦  «         ŒddS )zÙSave context from this conversation history to the entity store.

        Generates a summary for each entity in the entity cache by prompting
        the model, and saves these summaries to the entity store.
        Nrã   rä   rá   rI   )Úsummaryrö   rÔ   rå   )rY   Úsave_contextrí   r   rÞ   r   rÛ   rÓ   rË   rÍ   r   rÎ   rÐ   rÑ   r×   r%   rî   r+   rè   )r#   rß   rø   rò   ró   Ú
input_datarñ   rö   Úexisting_summaryrô   rd   s             €r$   rû   z%ConversationEntityMemory.save_contextI  s#  ø€ õ 	‰Œ×Ò˜V WÑ-Ô-Ð-àŒ>Ð!Ý3°F¸DÔ<QÑRÔRÐÐà#œ~Ðõ
 *ØŒK˜œ˜ !™˜˜Ô&ØÔ*Ø”nð
ñ 
ô 
ˆð Ð,Ô-ˆ
õ ˜TœX¨dÔ.NÐOÑOÔOˆð Ô'ð 
	:ð 
	:ˆFà#Ô0×4Ò4°V¸RÑ@Ô@ÐØ—]’]Ø(ØØ%Ø ð	 #ñ ô ˆFð Ô×!Ò! &¨&¯,ª,©.¬.Ñ9Ô9Ð9Ð9ð
	:ð 
	:r'   c                 óœ   — | j                              ¦   «          | j                             ¦   «          | j                             ¦   «          dS )zClear memory contents.N)rÙ   r3   rÑ   r×   r2   s    r$   r3   zConversationEntityMemory.clearq  sG   € àÔ×ÒÑ Ô Ð ØÔ×ÒÑ!Ô!Ð!ØÔ×ÒÑ!Ô!Ð!Ð!Ð!r'   r5   )!r6   r7   r8   r9   rË   r:   rF   rÍ   r
   r   rÏ   r   r   rÐ   rÑ   rŸ   rÓ   r†   rÕ   r   r=   r×   r   r‡   r   rÛ   rÞ   rE   r   r÷   rû   r3   rˆ   r‰   s   @r$   rÉ   rÉ   Ø  s³  ø€ € € € € € ðð ð  €L�#ÐÐÑØ€IˆsÐÐÑØ	ÐÐÑØ3KÐÐ0ÐKÐKÑKØ6QÐÐ!3ÐQÐQÑQð !€L�$�s”)Ð Ð Ñ ð €A€s€J€J�Jà%Ð�cÐ%Ð%Ñ%ð %* EÐ:MÐ$NÑ$NÔ$N€L�/ÐNÐNÑNàð)˜˜[Ô)ð )ð )ð )ñ „Xð)ð ð3 $ s¤)ð 3ð 3ð 3ñ „Xð3ð?
¨D°°c°¬Nð ?
¸tÀCÈÀH¼~ð ?
ð ?
ð ?
ð ?
ðB&: 4¨¨S¨¤>ð &:¸DÀÀcÀ¼Nð &:Ètð &:ð &:ð &:ð &:ð &:ð &:ðP"ð "ð "ð "ð "ð "ð "ð "r'   rÉ   ).r9   ÚloggingÚabcr   r   Úcollections.abcr   Ú	itertoolsr   Útypingr   r   Úlangchain_core._apir	   Úlangchain_core.language_modelsr
   Úlangchain_core.messagesr   r   Úlangchain_core.promptsr   Úpydanticr   r   r   Útyping_extensionsr   Úlangchain_classic.chains.llmr   Ú$langchain_classic.memory.chat_memoryr   Úlangchain_classic.memory.promptr   r   Úlangchain_classic.memory.utilsr   r­   Ú	getLoggerr6   r]   r   r=   rH   r‹   r¦   rÉ   r!   r'   r$   ú<module>r     s±  ðØ PÐ Pà €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à *Ð *Ð *Ð *Ð *Ð *Ø <Ð <Ð <Ð <Ð <Ð <Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø &Ð &Ð &Ð &Ð &Ð &à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?àð Ø€N€N€Nà	ˆÔ	˜8Ñ	$Ô	$€ð €Ø
ØØ/ð	Kð
ñ 
ô 
ð.ð .ð .ð .ð .�i ñ .ô .ñ
ô 
ð.ð0 €Ø
ØØ/ð	Kð
ñ 
ô 
ð"ð "ð "ð "ð "˜/ñ "ô "ñ
ô 
ð"ð4 €Ø
ØØ/ð	Kð
ñ 
ô 
ðh$ð h$ð h$ð h$ð h$˜oñ h$ô h$ñ
ô 
ðh$ðV €Ø
ØØ/ð	Kð
ñ 
ô 
ðq0ð q0ð q0ð q0ð q0�ñ q0ô q0ñ
ô 
ðq0ðh €Ø
ØØ/ð	Kð
ñ 
ô 
ðo%ð o%ð o%ð o%ð o%˜ñ o%ô o%ñ
ô 
ðo%ðd €Ø
ØØ/ð	Kð
ñ 
ô 
ðR"ð R"ð R"ð R"ð R"˜~ñ R"ô R"ñ
ô 
ðR"ð R"ð R"r'   