a
    bg                     @  s   d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZ erd dlmZ d dlmZ G d	d
 d
eZdddddddZdddddddZG dd deZdS )    )annotationsN)TYPE_CHECKINGListOptionalSequenceType)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)	BaseModelField)BaseBrowserTool)aget_current_pageget_current_page)Pagec                   @  s>   e Zd ZU dZedddZded< edd d	d
Zded< dS )GetElementsToolInputzInput for GetElementsTool..z;CSS selector, such as '*', 'div', 'p', 'a', #id, .classname)descriptionstrselectorc                   C  s   dgS )N	innerText r   r   r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/tools/playwright/get_elements.py<lambda>       zGetElementsToolInput.<lambda>z.Set of attributes to retrieve for each element)default_factoryr   z	List[str]
attributesN)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   r      s   
r   	AsyncPager   Sequence[str]z
List[dict])pager   r   returnc           	        s   |  |I dH }g }|D ]d}i }|D ]H}|dkr@| I dH }n||I dH }|dur$| dkr$|||< q$|r|| q|S )-Get elements matching the given CSS selector.Nr    Zquery_selector_allZ
inner_textZget_attributestripappend	r"   r   r   elementsresultselementresult	attributevalr   r   r   _aget_elements$   s    
r0   SyncPagec           	      C  sp   |  |}g }|D ]X}i }|D ]<}|dkr4| }n
||}|dur| dkr|||< q|r|| q|S )r$   r   Nr%   r&   r)   r   r   r   _get_elements8   s    



r2   c                   @  sn   e Zd ZU dZdZded< dZded< eZded< d	gd
fdddddddZ	d	gd
fdddddddZ
d
S )GetElementsToolzJTool for getting elements in the current web page matching a CSS selector.Zget_elementsr   namezIRetrieve elements in the current web page matching the given CSS selectorr   zType[BaseModel]args_schemar   Nr!   z#Optional[CallbackManagerForToolRun])r   r   run_managerr#   c                 C  s>   | j du rtd| j t| j }t|||}tj|ddS )Use the tool.Nz$Synchronous browser not provided to Fensure_ascii)Zsync_browser
ValueErrorr4   r   r2   jsondumpsselfr   r   r6   r"   r+   r   r   r   _runU   s
    

zGetElementsTool._runz(Optional[AsyncCallbackManagerForToolRun]c                   sJ   | j du rtd| j t| j I dH }t|||I dH }tj|ddS )r7   Nz%Asynchronous browser not provided to Fr8   )Zasync_browserr:   r4   r   r0   r;   r<   r=   r   r   r   _arunc   s
    
zGetElementsTool._arun)r   r   r   r   r4   r   r   r   r5   r?   r@   r   r   r   r   r3   L   s   

r3   )
__future__r   r;   typingr   r   r   r   r   Zlangchain_core.callbacksr   r	   Zpydanticr
   r   Z)langchain_community.tools.playwright.baser   Z*langchain_community.tools.playwright.utilsr   r   Zplaywright.async_apir   r    Zplaywright.sync_apir1   r   r0   r2   r3   r   r   r   r   <module>   s   