§
    è˜ºh·<  ã                   óˆ  — 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	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 d d
lmZ d dlmZ d dlmZmZ d dlm Z   e j!        e"¦  «        Z# G d„ dee¦  «        Z$ G d„ de$¦  «        Z% G d„ de$¦  «        Z& G d„ de$¦  «        Z' G d„ de$¦  «        Z( G d„ de¦  «        Z)dS )é    N)ÚABCÚabstractmethod)Úislice)ÚAnyÚDictÚIterableÚListÚOptional)Ú
get_client)ÚBaseLanguageModel)ÚBaseMessageÚget_buffer_string)ÚBasePromptTemplate)Ú	BaseModelÚField)ÚLLMChain)ÚBaseChatMemory)ÚENTITY_EXTRACTION_PROMPTÚENTITY_SUMMARIZATION_PROMPT)Úget_prompt_input_keyc            	       óØ   — e Zd ZdZeddedee         dee         fd„¦   «         Zededee         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/services/rag-service/venv/lib/python3.11/site-packages/langchain/memory/entity.pyÚgetzBaseEntityStore.get   ó	   € ð 	ˆó    Úvaluec                 ó   — dS )zSet entity value in store.Nr   ©r   r   r$   s      r    ÚsetzBaseEntityStore.set   r"   r#   c                 ó   — dS )zDelete entity value from store.Nr   ©r   r   s     r    ÚdeletezBaseEntityStore.delete$   r"   r#   c                 ó   — dS )z Check if entity exists in store.Nr   r)   s     r    ÚexistszBaseEntityStore.exists)   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'   r*   Úboolr,   r/   r   r#   r    r   r      s  € € € € € Ø/Ð/àðð �sð  X¨c¤]ð ¸hÀs¼mð ð ð ñ „^ðð ð�sð  8¨C¤=ð °Tð ð ð ñ „^ðð ð˜#ð  $ð ð ð ñ „^ðð ð˜#ð  $ð ð ð ñ „^ðð ðð ð ñ „^ðð ð r#   r   c                   ó´   — e Zd ZU dZi Zeeee         f         ed<   ddedee         dee         fd„Z	dedee         ddfd	„Z
deddfd
„Zdedefd„Zdd„ZdS )ÚInMemoryEntityStorezIn-memory Entity store.ÚstoreNr   r   r   c                 ó8   — | j                              ||¦  «        S r0   )r:   r!   r   s      r    r!   zInMemoryEntityStore.get9   s   € ØŒz�~Š~˜c 7Ñ+Ô+Ð+r#   r$   c                 ó   — || j         |<   d S r0   ©r:   r&   s      r    r'   zInMemoryEntityStore.set<   s   € ØˆŒ
�3‰ˆˆr#   c                 ó   — | j         |= d S r0   r=   r)   s     r    r*   zInMemoryEntityStore.delete?   s   € ØŒJ�sˆOˆOˆOr#   c                 ó   — || j         v S r0   r=   r)   s     r    r,   zInMemoryEntityStore.existsB   s   € Ø�d”jÐ Ð r#   c                 ó4   — | j                              ¦   «         S r0   )r:   r/   r.   s    r    r/   zInMemoryEntityStore.clearE   s   € ØŒz×ÒÑ!Ô!Ð!r#   r0   r1   )r2   r3   r4   r5   r:   r   r6   r
   Ú__annotations__r!   r'   r*   r7   r,   r/   r   r#   r    r9   r9   4   sõ   € € € € € € Ø!Ð!à&(€Eˆ4��X˜c”]Ð"Ô#Ð(Ð(Ñ(ð,ð ,�sð , X¨c¤]ð ,¸hÀs¼mð ,ð ,ð ,ð ,ð �sð   8¨C¤=ð  °Tð  ð  ð  ð  ð˜#ð  $ð ð ð ð ð!˜#ð ! $ð !ð !ð !ð !ð"ð "ð "ð "ð "ð "r#   r9   c                   óü   ‡ — e Zd ZdZ	 	 	 	 	 	 ddeded	ed
edee         dee         dedefˆ fd„Ze	defd„¦   «         Z
ddedee         dee         fd„Zdedee         ddfd„Zdeddfd„Zdedefd„Z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ÚttlÚ
recall_ttlÚargsÚkwargsc                 ó<  •— 	 ddl m}	 n# t          $ r t          d¦  «        ‚w xY w t          ¦   «         j        |i |¤Ž 	  |	||¬¦  «        | _        n*# t          $ r t                               d¦  «         Y nw xY w|| _	        || _
        || _        |p|| _        d S )Nr   )ÚRediszbCould not import upstash_redis python package. Please install it with `pip install upstash_redis`.)rI   rJ   z.Upstash Redis instance could not be initiated.)Úupstash_redisrQ   ÚImportErrorÚsuperÚ__init__Úredis_clientÚ	ExceptionÚloggerÚerrorrH   rK   rL   rM   )r   rH   rI   rJ   rK   rL   rM   rN   rO   rQ   Ú	__class__s             €r    rU   z UpstashRedisEntityStore.__init__P   sí   ø€ ð	Ø+Ð+Ð+Ð+Ð+Ð+Ð+øÝð 	ð 	ð 	ÝðFñô ð ð	øøøð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	KØ % ¨#°UÐ ;Ñ ;Ô ;ˆDÔÐøÝð 	Kð 	Kð 	KÝ�LŠLÐIÑJÔJÐJÐJÐJð	Køøøð %ˆŒØ$ˆŒØˆŒØ$Ð+¨ˆŒˆˆs   ƒ
 Š$ÁA Á$A;Á:A;r   c                 ó$   — | j         › d| j        › �S ©Nú:©rK   rH   r.   s    r    Úfull_key_prefixz'UpstashRedisEntityStore.full_key_prefixo   ó   € à”/Ð5Ð5 D¤OÐ5Ð5Ð5r#   Nr   c           	      ó¶   — | j                              | j        › d|› �| j        ¬¦  «        p|pd}t                               d| j        › d|› d|› d�¦  «         |S )Nr]   ©ÚexrD   zUpstash Redis MEM get 'ú': 'ú'©rV   Úgetexr_   rM   rX   Údebug©r   r   r   Úress       r    r!   zUpstashRedisEntityStore.gets   s{   € àÔ×#Ò# tÔ';Ð$CÐ$C¸cÐ$CÐ$CÈÌÐ#ÑXÔXð Øðàð 	õ
 	�ŠÐU¨tÔ/CÐUÐUÀcÐUÐUÈsÐUÐUÐUÑVÔVÐVØˆ
r#   r$   c           
      óì   — |s|                       |¦  «        S | j                             | j        › d|› �|| j        ¬¦  «         t
                               d| j        › d|› d|› d| j        › �¦  «         d S )Nr]   rb   zRedis MEM set 'rd   ú' EX ©r*   rV   r'   r_   rL   rX   rh   r&   s      r    r'   zUpstashRedisEntityStore.set|   ó•   € Øð 	$Ø—;’;˜sÑ#Ô#Ð#ØÔ×Ò Ô!5Ð=Ð=¸Ð=Ð=¸uÈÌÐÑRÔRÐRÝ�ŠØT˜dÔ2ÐTÐT°SÐTÐT¸eÐTÐTÈ$Ì(ÐTÐTñ	
ô 	
ð 	
ð 	
ð 	
r#   c                 óN   — | j                              | j        › d|› �¦  «         d S r\   ©rV   r*   r_   r)   s     r    r*   zUpstashRedisEntityStore.delete„   ó0   € ØÔ× Ò  DÔ$8Ð!@Ð!@¸3Ð!@Ð!@ÑAÔAÐAÐAÐAr#   c                 óR   — | j                              | j        › d|› �¦  «        dk    S ©Nr]   é   ©rV   r,   r_   r)   s     r    r,   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ú:*)rV   Úscanr_   r*   )rx   Úkeys_to_deleter   s     €r    Úscan_and_deletez6UpstashRedisEntityStore.clear.<locals>.scan_and_delete‹   sK   ø€ Ø%)Ô%6×%;Ò%;Ø˜4Ô/Ð3Ð3Ð3ñ&ô &Ñ"ˆF�Nð %ˆDÔÔ$ nÐ5Ð5ØˆMr#   r   )Úint)r   r}   rx   s   `  r    r/   zUpstashRedisEntityStore.clearŠ   sl   ø€ ð	¥Cð 	­Cð 	ð 	ð 	ð 	ð 	ð 	ð !� Ñ#Ô#ˆØ˜ŠkˆkØˆO˜FÑ#Ô#Ð#ð ˜Škˆkˆkˆkˆkˆkr#   )r   rD   rD   rE   rF   rG   r0   r1   )r2   r3   r4   r5   r6   r
   r~   r   rU   Úpropertyr_   r!   r'   r*   r7   r,   r/   Ú__classcell__©rZ   s   @r    rC   rC   I   s¤  ø€ € € € € ðð ð $ØØØ(Ø)Ø$4ð,ð ,àð,ð ð,ð ð	,ð
 ð,ð �cŒ]ð,ð ˜S”Mð,ð ð,ð ð,ð ,ð ,ð ,ð ,ð ,ð> ð6 ð 6ð 6ð 6ñ „Xð6ðð �sð  X¨c¤]ð ¸hÀs¼mð ð ð ð ð
�sð 
 8¨C¤=ð 
°Tð 
ð 
ð 
ð 
ðB˜#ð B $ð Bð Bð Bð BðN˜#ð N $ð Nð Nð Nð Nð
$ð 
$ð 
$ð 
$ð 
$ð 
$ð 
$ð 
$r#   rC   c                   óR  ‡ — e Zd ZU dZeed<   dZeed<   dZeed<   dZ	e
e         ed<   d	Ze
e         ed
<   	 	 	 	 	 ddededede
e         d
e
e         dedefˆ fd„Zedefd„¦   «         Zddede
e         de
e         fd„Zdede
e         ddfd„Zdeddfd„Zdedefd„Z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.
    rV   r   rH   rE   rK   rF   rL   rG   rM   úredis://localhost:6379/0rI   rN   rO   c                 óX  •— 	 dd l }n# t          $ r t          d¦  «        ‚w xY w t          ¦   «         j        |i |¤Ž 	 t	          |d¬¦  «        | _        n6# |j        j        $ r$}	t           	                    |	¦  «         Y d }	~	nd }	~	ww xY w|| _
        || _        || _        |p|| _        d S )Nr   zRCould not import redis python package. Please install it with `pip install redis`.T)Ú	redis_urlÚdecode_responses)ÚredisrS   rT   rU   r   rV   Ú
exceptionsÚConnectionErrorrX   rY   rH   rK   rL   rM   )r   rH   rI   rK   rL   rM   rN   rO   rˆ   rY   rZ   s             €r    rU   zRedisEntityStore.__init__¤   sí   ø€ ð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	Ýð>ñô ð ð	øøøð 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	 Ý *°SÈ4Ð PÑ PÔ PˆDÔÐøØÔÔ/ð 	 ð 	 ð 	 Ý�LŠL˜ÑÔÐÐÐÐÐÐøøøøð	 øøøð %ˆŒØ$ˆŒØˆŒØ$Ð+¨ˆŒˆˆs   ƒ ˆ"¿A ÁB	Á%BÂB	r   c                 ó$   — | j         › d| j        › �S r\   r^   r.   s    r    r_   z RedisEntityStore.full_key_prefixÂ   r`   r#   Nr   c           	      ó¶   — | j                              | j        › d|› �| j        ¬¦  «        p|pd}t                               d| j        › d|› d|› d�¦  «         |S )Nr]   rb   rD   zREDIS MEM get 'rd   re   rf   ri   s       r    r!   zRedisEntityStore.getÆ   s{   € àÔ×#Ò# tÔ';Ð$CÐ$C¸cÐ$CÐ$CÈÌÐ#ÑXÔXð Øðàð 	õ
 	�ŠÐM tÔ';ÐMÐM¸cÐMÐMÀsÐMÐMÐMÑNÔNÐNØˆ
r#   r$   c           
      óì   — |s|                       |¦  «        S | j                             | j        › d|› �|| j        ¬¦  «         t
                               d| j        › d|› d|› d| j        › �¦  «         d S )Nr]   rb   zREDIS MEM set 'rd   rl   rm   r&   s      r    r'   zRedisEntityStore.setÏ   rn   r#   c                 óN   — | j                              | j        › d|› �¦  «         d S r\   rp   r)   s     r    r*   zRedisEntityStore.delete×   rq   r#   c                 óR   — | j                              | j        › d|› �¦  «        dk    S rs   ru   r)   s     r    r,   zRedisEntityStore.existsÚ   rv   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 r0   )ÚiterÚlistr   )r‘   r’   ÚiteratorÚbatchs       r    Úbatchedz'RedisEntityStore.clear.<locals>.batchedß   sn   è è € Ý˜H‘~”~ˆHÝ¥ x°Ñ <Ô <Ñ=Ô=Ð=�%ð Ø���õ  ¥ x°Ñ <Ô <Ñ=Ô=Ð=�%ð ð ð ð ð r#   rz   iô  )r   r   r~   rV   Ú	scan_iterr_   r*   )r   r˜   Úkeybatchs      r    r/   zRedisEntityStore.clearÝ   s”   € ð	�h¥sœmð 	½ð 	ÅÍ#Äð 	ð 	ð 	ð 	ð
  ˜ØÔ×'Ò'¨4Ô+?Ð(CÐ(CÐ(CÑDÔDÀcñ
ô 
ð 	0ð 	0ˆHð %ˆDÔÔ$ hÐ/Ð/Ð/ð	0ð 	0r#   )r   r„   rE   rF   rG   r0   r1   )r2   r3   r4   r5   r   rA   rH   r6   rK   rL   r
   r~   rM   rU   r   r_   r!   r'   r*   r7   r,   r/   r€   r�   s   @r    rƒ   rƒ   —   sï  ø€ € € € € € ðð ð ÐÐÑØ€J�ÐÐÑØ$€J�Ð$Ð$Ñ$Ø%€Cˆ�#ŒÐ%Ð%Ñ%Ø 0€J�˜”Ð0Ð0Ñ0ð $Ø-Ø(Ø)Ø$4ð,ð ,àð,ð ð,ð ð	,ð
 �cŒ]ð,ð ˜S”Mð,ð ð,ð ð,ð ,ð ,ð ,ð ,ð ,ð< ð6 ð 6ð 6ð 6ñ „Xð6ðð �sð  X¨c¤]ð ¸hÀs¼mð ð ð ð ð
�sð 
 8¨C¤=ð 
°Tð 
ð 
ð 
ð 
ðB˜#ð B $ð Bð Bð Bð BðN˜#ð N $ð Nð Nð Nð Nð
0ð 
0ð 
0ð 
0ð 
0ð 
0ð 
0ð 
0r#   rƒ   c                   óø   ‡ — e Zd ZU dZdZeed<   dZeed<   	 	 	 ddedededed	ef
ˆ fd
„Z	e
defd„¦   «         Zdd„Zddedee         dee         fd„Zdedee         ddfd„Zdeddfd„Zdedefd„Zdd„Zˆ xZS )ÚSQLiteEntityStorezSQLite-backed Entity storer   rH   rE   Ú
table_nameúentities.dbÚdb_filerN   rO   c                 óø   •— 	 dd l }n# t          $ r t          d¦  «        ‚w xY w t          ¦   «         j        |i |¤Ž |                     |¦  «        | _        || _        || _        |                      ¦   «          d S )Nr   zVCould not import sqlite3 python package. Please install it with `pip install sqlite3`.)	Úsqlite3rS   rT   rU   ÚconnectÚconnrH   r�   Ú_create_table_if_not_exists)r   rH   rŸ   r�   rN   rO   r¡   rZ   s          €r    rU   zSQLiteEntityStore.__init__ð   s�   ø€ ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð@ñô ð ð	øøøð
 	�‰ŒÔ˜$Ð) &Ð)Ð)Ð)à—O’O GÑ,Ô,ˆŒ	Ø$ˆŒØ$ˆŒØ×(Ò(Ñ*Ô*Ð*Ð*Ð*s   ƒ ˆ"r   c                 ó$   — | j         › d| j        › �S )NÚ_)r�   rH   r.   s    r    Úfull_table_namez!SQLiteEntityStore.full_table_name  r`   r#   Nc                 ó�   — d| j         › d�}| j        5  | j                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz(
            CREATE TABLE IF NOT EXISTS zZ (
                key TEXT PRIMARY KEY,
                value TEXT
            )
        ©r§   r£   Úexecute)r   Úcreate_table_querys     r    r¤   z-SQLiteEntityStore._create_table_if_not_exists
  s¤   € ðØ(,Ô(<ðð ð Ðð ŒYð 	2ð 	2ØŒI×ÒÐ0Ñ1Ô1Ð1ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ó   “;»?Á?r   c                 ó”   — d| j         › d�}| j                             ||f¦  «        }|                     ¦   «         }|�
|d         }|S |S )Nz+
            SELECT value
            FROM ú#
            WHERE key = ?
        r   ©r§   r£   rª   Úfetchone)r   r   r   Úqueryrx   Úresultr$   s          r    r!   zSQLiteEntityStore.get  sa   € ðàÔ&ðð ð ˆð
 ”×"Ò" 5¨3¨&Ñ1Ô1ˆØ—’Ñ"Ô"ˆØÐØ˜1”IˆEØˆLØˆr#   r$   c                 óÄ   — |s|                       |¦  «        S d| j        › d�}| j        5  | j                             |||f¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz$
            INSERT OR REPLACE INTO z0 (key, value)
            VALUES (?, ?)
        )r*   r§   r£   rª   )r   r   r$   r±   s       r    r'   zSQLiteEntityStore.set!  sÂ   € Øð 	$Ø—;’;˜sÑ#Ô#Ð#ðØ$(Ô$8ðð ð ˆð ŒYð 	3ð 	3ØŒI×Ò˜e c¨5 \Ñ2Ô2Ð2ð	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð 	3ð 	3s   ªAÁAÁAc                 ó”   — d| j         › d�}| j        5  | j                             ||f¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nú
            DELETE FROM r®   r©   )r   r   r±   s      r    r*   zSQLiteEntityStore.delete+  s¦   € ðØÔ-ðð ð ˆð ŒYð 	-ð 	-ØŒI×Ò˜e c VÑ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð 	-ð 	-s   “=½AÁAc                 ó€   — d| j         › d�}| j                             ||f¦  «        }|                     ¦   «         }|d uS )Nz'
            SELECT 1
            FROM z7
            WHERE key = ?
            LIMIT 1
        r¯   )r   r   r±   rx   r²   s        r    r,   zSQLiteEntityStore.exists3  sS   € ðàÔ&ðð ð ˆð ”×"Ò" 5¨3¨&Ñ1Ô1ˆØ—’Ñ"Ô"ˆØ˜TÐ!Ð!r#   c                 ó�   — d| j         › d�}| j        5  | j                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nrµ   z	
        r©   )r   r±   s     r    r/   zSQLiteEntityStore.clear>  s¢   € ðØÔ-ðð ð ˆð ŒYð 	%ð 	%ØŒI×Ò˜eÑ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%r¬   )r   rž   rE   r1   r0   )r2   r3   r4   r5   rH   r6   rA   r�   r   rU   r   r§   r¤   r
   r!   r'   r*   r7   r,   r/   r€   r�   s   @r    rœ   rœ   ê   s›  ø€ € € € € € Ø$Ð$à€J�ÐÐÑØ$€J�Ð$Ð$Ñ$ð $Ø$Ø(ð	+ð +àð+ð ð+ð ð	+ð
 ð+ð ð+ð +ð +ð +ð +ð +ð, ð6 ð 6ð 6ð 6ñ „Xð6ð2ð 2ð 2ð 2ðð �sð  X¨c¤]ð ¸hÀs¼mð ð ð ð ð3�sð 3 8¨C¤=ð 3°Tð 3ð 3ð 3ð 3ð-˜#ð - $ð -ð -ð -ð -ð	"˜#ð 	" $ð 	"ð 	"ð 	"ð 	"ð%ð %ð %ð %ð %ð %ð %ð %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Úmessagesr.   s    r    ÚbufferzConversationEntityMemory.buffera  s   € ð ÔÔ(Ð(r#   c                 ó   — d| j         gS )zMWill always return list of memory variables.

        :meta private:
        Úentities)rÅ   r.   s    r    Úmemory_variablesz)ConversationEntityMemory.memory_variablesf  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 )ae  
        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>–  s    € Ð=Ð=Ð= a˜Ÿš™	œ	Ð=Ð=Ð=r#   ú,rD   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_variablesn  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Ñ   rD   )Úsummaryræ   rÄ   rÕ   )rT   Ú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ä   rZ   s             €r    rë   z%ConversationEntityMemory.save_context¯  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É   r/   rÁ   rÇ   r.   s    r    r/   zConversationEntityMemory.clearÙ  sG   € àÔ×ÒÑ Ô Ð ØÔ×ÒÑ!Ô!Ð!ØÔ×ÒÑ!Ô!Ð!Ð!Ð!r#   r1   )!r2   r3   r4   r5   r»   r6   rA   r½   r   r   r¿   r   r   rÀ   rÁ   r	   rÃ   r~   rÅ   r   r9   rÇ   r   r   r   rË   rÎ   r   r   rç   rë   r/   r€   r�   s   @r    r¹   r¹   F  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ð (:ð (:ð (:ð (:ð (:ð (:ðT"ð "ð "ð "ð "ð "ð "ð "r#   r¹   )*ÚloggingÚabcr   r   Ú	itertoolsr   Útypingr   r   r   r	   r
   Ú#langchain_community.utilities.redisr   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   r   Úlangchain_core.promptsr   Úlangchain_core.pydantic_v1r   r   Úlangchain.chains.llmr   Úlangchain.memory.chat_memoryr   Úlangchain.memory.promptr   r   Úlangchain.memory.utilsr   Ú	getLoggerr2   rX   r   r9   rC   rƒ   rœ   r¹   r   r#   r    ú<module>rý      sg  ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à :Ð :Ð :Ð :Ð :Ð :Ø <Ð <Ð <Ð <Ð <Ð <Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð �i ñ ô ð ð:"ð "ð "ð "ð "˜/ñ "ô "ð "ð*K$ð K$ð K$ð K$ð K$˜oñ K$ô K$ð K$ð\P0ð P0ð P0ð P0ð P0�ñ P0ô P0ð P0ðfY%ð Y%ð Y%ð Y%ð Y%˜ñ Y%ô Y%ð Y%ðxW"ð W"ð W"ð W"ð W"˜~ñ W"ô W"ð W"ð W"ð W"r#   