
    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jH                  e%      Z& G d de	      Z'y)    )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	 	 	 	 	 	 	 	 	 dd	Zdd
ZdddZ xZS )CustomMessageManageri     i   i  
   Nc                   t         |   ||||||||	|
|||       || _        t               | _        | j                  | j                         | j                  r(t        | j                        }| j                  |       y y )N)llmtaskaction_descriptionssystem_prompt_classmax_input_tokensestimated_characters_per_tokenimage_tokensinclude_attributesmax_error_lengthmax_actions_per_stepmessage_contextsensitive_data)content)	super__init__agent_prompt_classr	   history_add_message_with_tokenssystem_promptr*   r   )selfr    r!   r"   r#   r/   r$   r%   r&   r'   r(   r)   r*   r+   context_message	__class__s                  P/Users/kosar/src/browser-use-projects/web-ui/src/agent/custom_message_manager.pyr.   zCustomMessageManager.__init__   s      	 3 3-+I%1-!5+) 	 	
 #5%'%%d&8&89*43G3GHO))/:      c                   | j                   j                  | j                  z
  }| j                  dnd}|dkD  rt	        | j                   j
                        |kD  rh| j                   j                  |       | j                   j                  | j                  z
  }|dkD  r$t	        | j                   j
                        |kD  rfyyyy)z;Get current message list, potentially trimmed to max tokensNr   r   r   )r0   total_tokensr$   r*   lenmessagesremove_message)r3   diffmin_message_lens      r6   cut_messagesz!CustomMessageManager.cut_messagesC   s    ||((4+@+@@#33?!QQh3t||445GLL''8<<,,t/D/DDD Qh3t||445GhGhr7   c                    | j                  |||| j                  | j                  |      j                  |      }| j	                  |       y)z"Add browser state as human message)r'   r(   	step_infoN)r/   r'   r(   get_user_messager1   )r3   stateactionsresultrA   
use_visionstate_messages          r6   add_state_messagez&CustomMessageManager.add_state_messageL   sW     //#66!22 0 
 
:
& 	 	%%m4r7   c                   t        | j                  t        t        t        f      r	 | j                  j                  |      }|S t        |      | j                  z  }|S # t        $ r t        |      | j                  z  }Y |S w xY w)N)	
isinstancer    r   r   r   get_num_tokens	Exceptionr:   r%   )r3   texttokenss      r6   _count_text_tokensz'CustomMessageManager._count_text_tokens`   s    dhh]<P QR006  I444    Y$555  s   A !BBc                .   t        | j                  j                        dz
  }d}|dk\  rlt        | j                  j                  |   j                  t
              r|dz  }|t        |      k(  r| j                  j                  |       y|dz  }|dk\  rkyy)z&Remove last state message from historyr   r   N)r:   r0   r;   rJ   messager   absr<   )r3   
remove_indi
remove_cnts       r6   _remove_state_message_by_indexz3CustomMessageManager._remove_state_message_by_indexn   s    %%&*
1f$,,//2::LIa
S_,++A.FA 1fr7   )r    r   r!   strr"   rW   r#   zType[SystemPrompt]r/   zType[AgentMessagePrompt]r$   intr%   rX   r&   rX   r'   z	list[str]r(   rX   r)   rX   r*   zOptional[str]r+   zOptional[Dict[str, str]])NNNT)
rC   r   rD   zOptional[List[ActionModel]]rE   zOptional[List[ActionResult]]rA   zOptional[AgentStepInfo]returnNone)rM   rW   rY   rX   ))rY   rZ   )	__name__
__module____qualname__r.   r?   rH   rO   rV   __classcell__)r5   s   @r6   r   r      s     %+23 #,.$'(*-17;%;%; %; "%	%;
 "4%; !9%; "%; -0%; %; !*%; "%; #&%; +%; 5%;NE 48371555 15 1	5
 /5 
5(
 
r7   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   	getLoggerr\   loggerr    r7   r6   <module>rq      sa    "  - - D B F L L 2 8 - 8  ( , 4			8	$]> ]r7   