o
    Zhw$                     @   s   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 d dlmZmZ er0d dlmZ eddd	d
G dd deZdS )    )TYPE_CHECKINGAnyCallableDictOptional)
deprecated)Document)get_from_dict_or_env)	BaseModelmodel_validatorApifyDatasetLoaderz0.3.18zThis class is deprecated and will be removed in a future version. You can swap to using the `ApifyWrapper` implementation in `langchain_apify` package. See <https://github.com/apify/langchain-apify>zlangchain_apify.ApifyWrapper)ZsincemessageZalternative_importc                   @   sj  e Zd ZU dZeed< eed< dZee ed< e	dde
ded	efd
dZdddddededeegef dee dee dee d	dfddZdddddededeegef dee dee dee d	dfddZdddddededeegef dee dee dee d	dfddZdddddededeegef dee dee dee d	dfddZdS )ApifyWrapperzWrapper around Apify.
    To use, you should have the ``apify-client`` python package installed,
    and the environment variable ``APIFY_API_TOKEN`` set with your API key, or pass
    `apify_api_token` as a named parameter to the constructor.
    apify_clientapify_client_asyncNapify_api_tokenbefore)modevaluesreturnc           	      C   s   t |dd}z=ddlm}m} ||}t|jd }r$|jd  d7  < ||}t|jd }r9|jd  d7  < ||d	< ||d
< W |S  tyN   tdw )zValidate environment.
        Validate that an Apify API token is set and the apify-client
        Python package exists in the current environment.
        r   ZAPIFY_API_TOKENr   )ApifyClientApifyClientAsynchttpx_clientz
user-agentz; Origin/langchainhttpx_async_clientr   r   z`Could not import apify-client Python package. Please install it with `pip install apify-client`.)r	   r   r   r   getattrhttp_clientheadersImportError)	clsr   r   r   r   clientr   Zasync_clientr    r!   Z/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/utilities/apify.pyvalidate_environment!   s*   
z!ApifyWrapper.validate_environment)buildmemory_mbytestimeout_secsactor_id	run_inputdataset_mapping_functionr$   r%   r&   r   c          	      C   6   ddl m} | j|j||||d}||d |dS )a  Run an Actor on the Apify platform and wait for results to be ready.
        Args:
            actor_id (str): The ID or name of the Actor on the Apify platform.
            run_input (Dict): The input object of the Actor that you're trying to run.
            dataset_mapping_function (Callable): A function that takes a single
                dictionary (an Apify dataset item) and converts it to an
                instance of the Document class.
            build (str, optional): Optionally specifies the actor build to run.
                It can be either a build tag or build number.
            memory_mbytes (int, optional): Optional memory limit for the run,
                in megabytes.
            timeout_secs (int, optional): Optional timeout for the run, in seconds.
        Returns:
            ApifyDatasetLoader: A loader that will fetch the records from the
                Actor run's default dataset.
        r   r   r(   r$   r%   r&   defaultDatasetIdZ
dataset_idr)   )$langchain_community.document_loadersr   r   actorcall	selfr'   r(   r)   r$   r%   r&   r   Z
actor_callr!   r!   r"   
call_actorC   s   zApifyWrapper.call_actorc          	         >   ddl m} | j|j||||dI dH }||d |dS )a  Run an Actor on the Apify platform and wait for results to be ready.
        Args:
            actor_id (str): The ID or name of the Actor on the Apify platform.
            run_input (Dict): The input object of the Actor that you're trying to run.
            dataset_mapping_function (Callable): A function that takes a single
                dictionary (an Apify dataset item) and converts it to
                an instance of the Document class.
            build (str, optional): Optionally specifies the actor build to run.
                It can be either a build tag or build number.
            memory_mbytes (int, optional): Optional memory limit for the run,
                in megabytes.
            timeout_secs (int, optional): Optional timeout for the run, in seconds.
        Returns:
            ApifyDatasetLoader: A loader that will fetch the records from the
                Actor run's default dataset.
        r   r   r+   Nr,   r-   )r.   r   r   r/   r0   r1   r!   r!   r"   acall_actork   s   zApifyWrapper.acall_actortask_id
task_inputc          	      C   r*   )  Run a saved Actor task on Apify and wait for results to be ready.
        Args:
            task_id (str): The ID or name of the task on the Apify platform.
            task_input (Dict): The input object of the task that you're trying to run.
                Overrides the task's saved input.
            dataset_mapping_function (Callable): A function that takes a single
                dictionary (an Apify dataset item) and converts it to an
                instance of the Document class.
            build (str, optional): Optionally specifies the actor build to run.
                It can be either a build tag or build number.
            memory_mbytes (int, optional): Optional memory limit for the run,
                in megabytes.
            timeout_secs (int, optional): Optional timeout for the run, in seconds.
        Returns:
            ApifyDatasetLoader: A loader that will fetch the records from the
                task run's default dataset.
        r   r   r7   r$   r%   r&   r,   r-   )r.   r   r   taskr0   	r2   r6   r7   r)   r$   r%   r&   r   Z	task_callr!   r!   r"   call_actor_task   s   zApifyWrapper.call_actor_taskc          	         r4   )r8   r   r   r9   Nr,   r-   )r.   r   r   r:   r0   r;   r!   r!   r"   acall_actor_task   s   zApifyWrapper.acall_actor_task)__name__
__module____qualname____doc__r   __annotations__r   r   strr   classmethodr   r#   r   r   intr3   r5   r<   r=   r!   r!   r!   r"   r      s   
 &	
.	
.	
/	r   N)typingr   r   r   r   r   Zlangchain_core._apir   Zlangchain_core.documentsr   Zlangchain_core.utilsr	   Zpydanticr
   r   r.   r   r   r!   r!   r!   r"   <module>   s    
