
    Sg                       d dl mZ d dlZd dl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mZmZ d dlmZ d d	lmZ d d
lmZ d d	lmZ d dlmZmZmZmZ d dlmZ ddl m!Z! ddl"m#Z#  ej$        e%          Z& G d de	          Z'dS )    )annotationsN)ListOptionalTypeDict)MessageManager)MessageHistory)SystemPromptAgentMessagePrompt)ActionResultAgentStepInfoActionModel)BrowserState)BaseChatModel)ChatAnthropic)	AIMessageBaseMessageHumanMessageToolMessage)
ChatOpenAI   )DeepSeekR1ChatOpenAI   )CustomAgentMessagePromptc                  \     e Zd Zdddg ddddfd. fdZd Z	 	 	 	 d/d0d)Zd1d+Zd2d3d-Z xZS )4CustomMessageManageri     i   i  
   Nllmr   taskstraction_descriptionssystem_prompt_classType[SystemPrompt]agent_prompt_classType[AgentMessagePrompt]max_input_tokensintestimated_characters_per_tokenimage_tokensinclude_attributes	list[str]max_error_lengthmax_actions_per_stepmessage_contextOptional[str]sensitive_dataOptional[Dict[str, str]]c                0   t                                          ||||||||	|
|||           || _        t                      | _        |                     | j                   | j        r,t          | j                  }|                     |           d S d S )N)r   r    r"   r#   r'   r)   r*   r+   r-   r.   r/   r1   )content)	super__init__r%   r	   history_add_message_with_tokenssystem_promptr/   r   )selfr   r    r"   r#   r%   r'   r)   r*   r+   r-   r.   r/   r1   context_message	__class__s                  P/Users/kosar/src/browser-use-projects/web-ui/src/agent/custom_message_manager.pyr6   zCustomMessageManager.__init__   s      	 3 3-+I%1-!5+) 	 	
 	
 	
 #5%''%%d&8999 	;*43GHHHO))/:::::	; 	;    c                8   | j         j        | j        z
  }| j        dnd}|dk    rpt	          | j         j                  |k    rW| j                             |           | j         j        | j        z
  }|dk    r!t	          | j         j                  |k    QdS dS dS dS )z;Get current message list, potentially trimmed to max tokensNr   r   r   )r7   total_tokensr'   r/   lenmessagesremove_message)r:   diffmin_message_lens      r=   cut_messagesz!CustomMessageManager.cut_messagesC   s    |(4+@@#3?!!QQhh3t|455GGL''888<,t/DDD Qhh3t|455GGGGhhhhGGr>   Tstater   actionsOptional[List[ActionModel]]resultOptional[List[ActionResult]]	step_infoOptional[AgentStepInfo]returnNonec                    |                      |||| j        | j        |                              |          }|                     |           dS )z"Add browser state as human message)r+   r-   rL   N)r%   r+   r-   get_user_messager8   )r:   rG   rH   rJ   rL   
use_visionstate_messages          r=   add_state_messagez&CustomMessageManager.add_state_messageL   se     //#6!2 0 
 
 
:
&
& 	 	%%m44444r>   textc                   t          | j        t          t          t          f          rC	 | j                            |          }n># t          $ r t          |          | j        z  }Y nw xY wt          |          | j        z  }|S )N)	
isinstancer   r   r   r   get_num_tokens	ExceptionrA   r)   )r:   rU   tokenss      r=   _count_text_tokensz'CustomMessageManager._count_text_tokens`   s    dh]<P QRR 
	0066   YY$55  II44  s   A !A('A(c                $   t          | j        j                  dz
  }d}|dk    rkt          | j        j        |         j        t
                    r|dz  }|t          |          k    r| j                            |           dS |dz  }|dk    idS dS )z&Remove last state message from historyr   r   N)rA   r7   rB   rW   messager   absrC   )r:   
remove_indi
remove_cnts       r=   _remove_state_message_by_indexz3CustomMessageManager._remove_state_message_by_indexn   s    %&&*
1ff$,/2:LII  a
S__,,++A...FA 1ffffffr>   )r   r   r    r!   r"   r!   r#   r$   r%   r&   r'   r(   r)   r(   r*   r(   r+   r,   r-   r(   r.   r(   r/   r0   r1   r2   )NNNT)
rG   r   rH   rI   rJ   rK   rL   rM   rN   rO   )rU   r!   rN   r(   )r\   )rN   rO   )	__name__
__module____qualname__r6   rF   rT   r[   rc   __classcell__)r<   s   @r=   r   r      s         %+23 #,.$'(*-17;%; %; %; %; %; %; %;NE E E 4837155 5 5 5 5(   
 
 
 
 
 
 
 
 
r>   r   )(
__future__r   loggingtypingr   r   r   r   )browser_use.agent.message_manager.servicer   'browser_use.agent.message_manager.viewsr	   browser_use.agent.promptsr
   r   browser_use.agent.viewsr   r   r   browser_use.browser.viewsr   langchain_core.language_modelsr   langchain_anthropicr   langchain_core.messagesr   r   r   r   langchain_openair   	utils.llmr   custom_promptsr   	getLoggerrd   loggerr    r>   r=   <module>ry      s   " " " " " "  - - - - - - - - - - - - D D D D D D B B B B B B F F F F F F F F L L L L L L L L L L 2 2 2 2 2 2 8 8 8 8 8 8 - - - - - - 8 8 8 8 8 8            ( ' ' ' ' ' , , , , , , 4 4 4 4 4 4		8	$	$] ] ] ] ]> ] ] ] ] ]r>   