Ë
    ´Œj  ã                   óˆ   — 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  eddd	¬
«       G d„ dee«      «       Zy)é    )ÚAnyÚUnion)Ú
deprecated)ÚBaseMessageÚget_buffer_string)Úpre_init)ÚBaseChatMemory)ÚSummarizerMixinz0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/)ÚsinceÚremovalÚmessagec                   ó„  ‡ — e Zd ZU dZdZeed<   dZeed<   dZ	eed<   e
deeee   f   fd	„«       Zdeeee   f   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   fd„Zededefd„«       Zdeeef   deeef   ddfˆ fd„Zdeeef   deeef   ddfˆ fd„Zdd„Zdd„Zdˆ fd„Zdˆ fd„Zˆ xZS )ÚConversationSummaryBufferMemorya  Buffer with summarizer for storing conversation memory.

    Provides a running summary of the conversation together with the most recent
    messages in the conversation under the constraint that the total number of
    tokens in the conversation does not exceed a certain limit.
    iÐ  Úmax_token_limitÚ Úmoving_summary_bufferÚhistoryÚ
memory_keyÚreturnc                 ó>   — | j                  i «      | j                     S )zString buffer of memory.)Úload_memory_variablesr   ©Úselfs    úi/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/memory/summary_buffer.pyÚbufferz&ConversationSummaryBufferMemory.buffer   s   € ð ×)Ñ)¨"Ó-¨d¯o©oÑ>Ð>ó    c              ƒ   ó^   K  — | j                  i «      ƒ d{  –—† }|| j                     S 7 Œ­w)zAsync memory buffer.N)Úaload_memory_variablesr   )r   Úmemory_variabless     r   Úabufferz'ConversationSummaryBufferMemory.abuffer$   s/   è ø€ à!%×!<Ñ!<¸RÓ!@×@ÐØ §¡Ñ0Ð0ð Aús   ‚-—+˜-c                 ó   — | j                   gS )zMWill always return list of memory variables.

        :meta private:
        )r   r   s    r   r   z0ConversationSummaryBufferMemory.memory_variables)   s   € ð —‘Ð Ð r   Úinputsc                 ó  — | j                   j                  }| j                  dk7  r"| j                  | j                  ¬«      g}||z   }| j                  r|}n"t        || j                  | j                  ¬«      }| j                  |iS )zReturn history buffer.r   ©Úcontent©Úhuman_prefixÚ	ai_prefix)	Úchat_memoryÚmessagesr   Úsummary_message_clsÚreturn_messagesr   r'   r(   r   ©r   r"   r   Úfirst_messagesÚfinal_buffers        r   r   z5ConversationSummaryBufferMemory.load_memory_variables1   s‡   € à×!Ñ!×*Ñ*ˆØ×%Ñ%¨Ò+à×(Ñ(°×1KÑ1KÐ(ÓLð1ˆNð $ fÑ,ˆFØ×ÒØ &‰Lä,ØØ!×.Ñ.ØŸ.™.ôˆLð
 —‘ Ð.Ð.r   c              ƒ   ó2  K  — | j                   j                  «       ƒ d{  –—† }| j                  dk7  r"| j                  | j                  ¬«      g}||z   }| j                  r|}n"t        || j                  | j                  ¬«      }| j                  |iS 7 Œt­w)zHAsynchronously return key-value pairs given the text input to the chain.Nr   r$   r&   )	r)   Úaget_messagesr   r+   r,   r   r'   r(   r   r-   s        r   r   z6ConversationSummaryBufferMemory.aload_memory_variablesC   s–   è ø€ à×'Ñ'×5Ñ5Ó7×7ˆØ×%Ñ%¨Ò+à×(Ñ(°×1KÑ1KÐ(ÓLð1ˆNð $ fÑ,ˆFØ×ÒØ &‰Lä,ØØ!×.Ñ.ØŸ.™.ôˆLð
 —‘ Ð.Ð.ð 8ús   ‚B B¡A5BÚvaluesc                 óp   — |d   j                   }ddh}|t        |«      k7  rd|› d|› d�}t        |«      ‚|S )z4Validate that prompt input variables are consistent.ÚpromptÚsummaryÚ	new_linesz:Got unexpected prompt input variables. The prompt expects z, but it should have Ú.)Úinput_variablesÚsetÚ
ValueError)Úclsr2   Úprompt_variablesÚexpected_keysÚmsgs        r   Úvalidate_prompt_input_variablesz?ConversationSummaryBufferMemory.validate_prompt_input_variablesU   s[   € ð " (Ñ+×;Ñ;ÐØ" KÐ0ˆØœCÐ 0Ó1Ò1àLØ#Ð$Ð$9¸-¸ÈðKð ô ˜S“/Ð!Øˆr   ÚoutputsNc                 óF   •— t         ‰| �  ||«       | j                  «        y)z.Save context from this conversation to buffer.N)ÚsuperÚsave_contextÚprune©r   r"   r@   Ú	__class__s      €r   rC   z,ConversationSummaryBufferMemory.save_contextb   s   ø€ ä‰Ñ˜V WÔ-Ø�
‰
�r   c              ƒ   óv   •K  — t         ‰| �  ||«      ƒ d{  –—†  | j                  «       ƒ d{  –—†  y7 Œ7 Œ­w)z=Asynchronously save context from this conversation to buffer.N)rB   Úasave_contextÚaprunerE   s      €r   rH   z-ConversationSummaryBufferMemory.asave_contextg   s6   øè ø€ ô ‰gÑ# F¨GÓ4×4Ð4Ø�k‰k‹m×Ñð 	5øØús   ƒ9—5˜9¯7°9·9c                 ó€  — | j                   j                  }| j                  j                  |«      }|| j                  kD  r~g }|| j                  kD  rK|j                  |j                  d«      «       | j                  j                  |«      }|| j                  kD  rŒK| j                  || j                  «      | _        yy)z*Prune buffer if it exceeds max token limitr   N)	r)   r*   ÚllmÚget_num_tokens_from_messagesr   ÚappendÚpopÚpredict_new_summaryr   ©r   r   Úcurr_buffer_lengthÚpruned_memorys       r   rD   z%ConversationSummaryBufferMemory.prunep   sª   € à×!Ñ!×*Ñ*ˆØ!ŸX™X×BÑBÀ6ÓJÐØ × 4Ñ 4Ò4ØˆMØ$ t×';Ñ';Ò;Ø×$Ñ$ V§Z¡Z°£]Ô3Ø%)§X¡X×%JÑ%JÈ6Ó%RÐ"ð % t×';Ñ';Ó;ð *.×)AÑ)AØØ×*Ñ*ó*ˆDÕ&ð 5r   c              ƒ   óœ  K  — | j                   j                  }| j                  j                  |«      }|| j                  kD  r†g }|| j                  kD  rK|j                  |j                  d«      «       | j                  j                  |«      }|| j                  kD  rŒK| j                  || j                  «      ƒ d{  –—† | _        yy7 Œ­w)z9Asynchronously prune buffer if it exceeds max token limitr   N)	r)   r*   rK   rL   r   rM   rN   Úapredict_new_summaryr   rP   s       r   rI   z&ConversationSummaryBufferMemory.aprune~   s¸   è ø€ à×!Ñ!×*Ñ*ˆØ!ŸX™X×BÑBÀ6ÓJÐØ × 4Ñ 4Ò4ØˆMØ$ t×';Ñ';Ò;Ø×$Ñ$ V§Z¡Z°£]Ô3Ø%)§X¡X×%JÑ%JÈ6Ó%RÐ"ð % t×';Ñ';Ó;ð 04×/HÑ/HØØ×*Ñ*ó0÷ *ˆDÕ&ð 5ð
*ús   ‚BCÂCÂ>C
Â?Cc                 ó0   •— t         ‰| �  «        d| _        y)zClear memory contents.r   N)rB   Úclearr   ©r   rF   s    €r   rV   z%ConversationSummaryBufferMemory.clearŒ   s   ø€ ä‰‰ŒØ%'ˆÕ"r   c              ƒ   óL   •K  — t         ‰| �  «       ƒ d{  –—†  d| _        y7 Œ­w)z%Asynchronously clear memory contents.Nr   )rB   Úaclearr   rW   s    €r   rY   z&ConversationSummaryBufferMemory.aclear‘   s$   øè ø€ ä‰g‰nÓ×ÐØ%'ˆÕ"ð 	ús   ƒ$•"–$)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚ__annotations__r   Ústrr   Úpropertyr   Úlistr   r   r    r   Údictr   r   r   r   r?   rC   rH   rD   rI   rV   rY   Ú__classcell__)rF   s   @r   r   r      sh  ø… ñð  €O�SÓØ!#Ð˜3Ó#Ø€J�Óàð?˜˜c 4¨Ñ#4Ð4Ñ5ò ?ó ð?ð1˜u S¨$¨{Ñ*;Ð%;Ñ<ó 1ð
 ð! $ s¡)ò !ó ð!ð/¨D°°c°©Nð /¸tÀCÈÀH¹~ó /ð$/°4¸¸S¸±>ð /ÀdÈ3ÐPSÈ8Ánó /ð$ ð
°Tð 
¸dò 
ó ð
ð 4¨¨S¨¡>ð ¸DÀÀcÀ¹Nð Ètõ ð
à�S˜#�X‘ðð �c˜3�h‘ðð 
õ	óóõ(÷
(ñ (r   r   N)Útypingr   r   Úlangchain_core._apir   Úlangchain_core.messagesr   r   Úlangchain_core.utilsr   Úlangchain.memory.chat_memoryr	   Úlangchain.memory.summaryr
   r   © r   r   Ú<module>rl      sH   ðß å *ß BÝ )å 7Ý 4ñ Ø
Øð	Gô	ôA( n°oó A(óñA(r   