o
    |!g%v                     @   s  d dl Z d dlZd dl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 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 ddlmZ zd dlZejdr_ed dl m!Z W n eys   d dlZY nw e "e j#dZ$G dd dZ%G dd dZ&dS )    N)JSONDecodeError   )ApiError)AsyncClientWrapperSyncClientWrapper)jsonable_encoder)remove_none_from_dict)UnprocessableEntityError)CompositeRetrievalMode)CompositeRetrievalResult)HttpValidationError)	Retriever)RetrieverCreate)RetrieverPipelinez1..c                   @     e Zd ZdefddZdddddeje deje deje d	eje	 fd
dZ
ddddeje deje ded	e	fddZddddeje deje ded	e	fddZddddedeje deje d	e	fddZeeddedeje dejeje  d	e	fddZded	dfddZeeddedeje deje ded	ef
dd Zddeeed!deje deje deje deje dedejeje  d	efd"d#ZdS )$RetrieversClientclient_wrapperc                C   
   || _ d S N_client_wrapperselfr    r   i/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/llama_cloud/resources/retrievers/client.py__init__       
zRetrieversClient.__init__Nname
project_idorganization_idr   r   r    returnc                C   s   | j jjdtj| j   ddt|||d| j  dd}d|j	  kr+dk r8n nt
tjt | S |j	d	krGtt
t| z| }W n ty\   t|j	|jd
w t|j	|d
)a  
        List Retrievers for a project.

        Parameters:
            - name: typing.Optional[str].

            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].
        ---
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.list_retrievers()
        GET/api/v1/retrieversr   <   paramsheaderstimeout   ,    status_codebodyr   httpx_clientrequesturllibparseurljoinget_base_urlr   get_headersr.   pydanticparse_obj_astypingListr   jsonr	   r   r   r   textr   r   r   r    	_response_response_jsonr   r   r   list_retrievers#   s"   
z RetrieversClient.list_retrieversr   r    r2   c                C      | j jjdtj| j   ddt||dt|| j 	 dd}d|j
  kr-dk r7n ntt| S |j
d	krFttt| z| }W n ty[   t|j
|jd
w t|j
|d
)a  
        Create a new Retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - request: RetrieverCreate.
        ---
        from llama_cloud import RetrieverCreate
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.create_retriever(
            request=RetrieverCreate(
                name="string",
            ),
        )
        POSTr#   r$   rB   r%   r'   r<   r(   r)   r*   r+   r,   r-   r   r1   r2   r3   r4   r5   r6   r   r   r7   r.   r8   r9   r   r<   r	   r   r   r   r=   r   r   r    r2   r?   r@   r   r   r   create_retrieverL   $   
z!RetrieversClient.create_retrieverc                C   rC   )a  
        Upsert a new Retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - request: RetrieverCreate.
        ---
        from llama_cloud import RetrieverCreate
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.upsert_retriever(
            request=RetrieverCreate(
                name="string",
            ),
        )
        PUTr#   r$   rB   r%   rE   r*   r+   r,   r-   rF   rG   r   r   r   upsert_retriever{   rI   z!RetrieversClient.upsert_retrieverretriever_idc                C   s   | j jjdtj| j   dd| t||d| j  dd}d|j	  kr-dk r7n nt
t| S |j	d	krFtt
t| z| }W n ty[   t|j	|jd
w t|j	|d
)a  
        Get a Retriever by ID.

        Parameters:
            - retriever_id: str.

            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].
        ---
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.get_retriever(
            retriever_id="string",
        )
        r"   r#   api/v1/retrievers/rB   r%   r&   r*   r+   r,   r-   r   r1   r2   r3   r4   r5   r6   r   r7   r.   r8   r9   r   r<   r	   r   r   r   r=   r   rL   r   r    r?   r@   r   r   r   get_retriever   s"   
zRetrieversClient.get_retrieverr   	pipelinesrR   c                C   s   i }|t ur
||d< |t ur||d< | jjjdtj| j  dd| t|| j	 dd}d|j
  kr<d	k rFn ntt| S |j
d
krUttt| z| }W n tyj   t|j
|jdw t|j
|d)a  
        Update an existing Retriever.

        Parameters:
            - retriever_id: str.

            - name: typing.Optional[str].

            - pipelines: typing.Optional[typing.List[RetrieverPipeline]].
        ---
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.update_retriever(
            retriever_id="string",
        )
        r   rR   rJ   r#   rM   r%   r<   r(   r)   r*   r+   r,   r-   OMITr   r1   r2   r3   r4   r5   r6   r   r7   r.   r8   r9   r   r<   r	   r   r   r   r=   r   rL   r   rR   _requestr?   r@   r   r   r   update_retriever   s,   
z!RetrieversClient.update_retrieverc                 C   s   | j jjdtj| j   dd| | j  dd}d|j  kr(dk r)dS  |jd	kr8t	t
t| z| }W n tyM   t|j|jd
w t|j|d
)a@  
        Delete a Retriever by ID.

        Parameters:
            - retriever_id: str.
        ---
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.delete_retriever(
            retriever_id="string",
        )
        DELETEr#   rM   r%   r(   r)   r*   r+   Nr,   r-   r   r1   r2   r3   r4   r5   r6   r7   r.   r	   r8   r9   r   r<   r   r   r=   r   rL   r?   r@   r   r   r   delete_retriever  s"   
z!RetrieversClient.delete_retrievermodererank_top_nr_   r`   queryc                C   s   d|i}|t ur||d< |t ur||d< | jjjdtj| j  dd| dt|| j	 dd	}d
|j
  kr?dk rIn ntt| S |j
dkrXttt| z| }W n tym   t|j
|jdw t|j
|d)a  
        Retrieve data using a Retriever.

        Parameters:
            - retriever_id: str.

            - mode: typing.Optional[CompositeRetrievalMode]. The mode of composite retrieval.

            - rerank_top_n: typing.Optional[int]. The number of nodes to retrieve after reranking over retrieved nodes from all retrieval tools.

            - query: str. The query to retrieve against.
        ---
        from llama_cloud import CompositeRetrievalMode
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.retrieve(
            retriever_id="string",
            mode=CompositeRetrievalMode.ROUTING,
            query="string",
        )
        ra   r_   r`   rD   r#   rM   	/retriever%   rS   r*   r+   r,   r-   rU   r   r1   r2   r3   r4   r5   r6   r   r7   r.   r8   r9   r   r<   r	   r   r   r   r=   r   rL   r_   r`   ra   rW   r?   r@   r   r   r   retrieve%  s0    	
zRetrieversClient.retriever   r    r_   r`   rR   c          
      C   s   d|i}|t ur||d< |t ur||d< |t ur||d< | jjjdtj| j  ddt||dt	|| j
 d	d
}d|j  krIdk rSn ntt| S |jdkrbttt| z| }	W n tyw   t|j|jdw t|j|	d)a  
        Retrieve data using specified pipelines without creating a persistent retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - mode: typing.Optional[CompositeRetrievalMode]. The mode of composite retrieval.

            - rerank_top_n: typing.Optional[int]. The number of nodes to retrieve after reranking over retrieved nodes from all retrieval tools.

            - query: str. The query to retrieve against.

            - pipelines: typing.Optional[typing.List[RetrieverPipeline]]. The pipelines to use for retrieval.
        ---
        from llama_cloud import CompositeRetrievalMode
        from llama_cloud.client import LlamaCloud

        client = LlamaCloud(
            token="YOUR_TOKEN",
        )
        client.retrievers.direct_retrieve(
            mode=CompositeRetrievalMode.ROUTING,
            query="string",
        )
        ra   r_   r`   rR   rD   r#   api/v1/retrievers/retrieverB   r%   rE   r*   r+   r,   r-   rU   r   r1   r2   r3   r4   r5   r6   r   r   r7   r.   r8   r9   r   r<   r	   r   r   r   r=   
r   r   r    r_   r`   ra   rR   rW   r?   r@   r   r   r   direct_retrieve]  s2   %
z RetrieversClient.direct_retrieve)__name__
__module____qualname__r   r   r:   Optionalstrr;   r   rA   r   rH   rK   rP   rU   r   rX   r]   r
   intr   re   rj   r   r   r   r   r          
,
2
3
/
0$
;	r   c                   @   r   )$AsyncRetrieversClientr   c                C   r   r   r   r   r   r   r   r     r   zAsyncRetrieversClient.__init__Nr   r   r   r    r!   c                   s   | j jjdtj| j   ddt|||d| j  ddI dH }d|j	  kr/d	k r<n nt
tjt | S |j	d
krKtt
t| z| }W n ty`   t|j	|jdw t|j	|d)a  
        List Retrievers for a project.

        Parameters:
            - name: typing.Optional[str].

            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].
        ---
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.list_retrievers()
        r"   r#   r$   r   r%   r&   Nr*   r+   r,   r-   r0   r>   r   r   r   rA     s$   
z%AsyncRetrieversClient.list_retrieversrB   r2   c                      | j jjdtj| j   ddt||dt|| j 	 ddI dH }d|j
  kr1d	k r;n ntt| S |j
d
krJttt| z| }W n ty_   t|j
|jdw t|j
|d)a  
        Create a new Retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - request: RetrieverCreate.
        ---
        from llama_cloud import RetrieverCreate
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.create_retriever(
            request=RetrieverCreate(
                name="string",
            ),
        )
        rD   r#   r$   rB   r%   rE   Nr*   r+   r,   r-   rF   rG   r   r   r   rH     &   
z&AsyncRetrieversClient.create_retrieverc                   rs   )a  
        Upsert a new Retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - request: RetrieverCreate.
        ---
        from llama_cloud import RetrieverCreate
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.upsert_retriever(
            request=RetrieverCreate(
                name="string",
            ),
        )
        rJ   r#   r$   rB   r%   rE   Nr*   r+   r,   r-   rF   rG   r   r   r   rK     rt   z&AsyncRetrieversClient.upsert_retrieverrL   c                   s   | j jjdtj| j   dd| t||d| j  ddI dH }d|j	  kr1d	k r;n nt
t| S |j	d
krJtt
t| z| }W n ty_   t|j	|jdw t|j	|d)a  
        Get a Retriever by ID.

        Parameters:
            - retriever_id: str.

            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].
        ---
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.get_retriever(
            retriever_id="string",
        )
        r"   r#   rM   rB   r%   r&   Nr*   r+   r,   r-   rN   rO   r   r   r   rP   '  s$   
z#AsyncRetrieversClient.get_retrieverrQ   rR   c                   s   i }|t ur||d< |t ur||d< | jjjdtj| j  dd| t|| j	 ddI dH }d	|j
  kr@d
k rJn ntt| S |j
dkrYttt| z| }W n tyn   t|j
|jdw t|j
|d)a  
        Update an existing Retriever.

        Parameters:
            - retriever_id: str.

            - name: typing.Optional[str].

            - pipelines: typing.Optional[typing.List[RetrieverPipeline]].
        ---
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.update_retriever(
            retriever_id="string",
        )
        r   rR   rJ   r#   rM   r%   rS   Nr*   r+   r,   r-   rT   rV   r   r   r   rX   R  s.   
z&AsyncRetrieversClient.update_retrieverc                    s   | j jjdtj| j   dd| | j  ddI dH }d|j  kr,dk r-dS  |jd	kr<t	t
t| z| }W n tyQ   t|j|jd
w t|j|d
)aP  
        Delete a Retriever by ID.

        Parameters:
            - retriever_id: str.
        ---
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.delete_retriever(
            retriever_id="string",
        )
        rY   r#   rM   r%   rZ   Nr*   r+   r,   r-   r[   r\   r   r   r   r]     s$   
z&AsyncRetrieversClient.delete_retrieverr^   r_   r`   ra   c                   s   d|i}|t ur||d< |t ur||d< | jjjdtj| j  dd| dt|| j	 dd	I d
H }d|j
  krCdk rMn ntt| S |j
dkr\ttt| z| }W n tyq   t|j
|jdw t|j
|d)a  
        Retrieve data using a Retriever.

        Parameters:
            - retriever_id: str.

            - mode: typing.Optional[CompositeRetrievalMode]. The mode of composite retrieval.

            - rerank_top_n: typing.Optional[int]. The number of nodes to retrieve after reranking over retrieved nodes from all retrieval tools.

            - query: str. The query to retrieve against.
        ---
        from llama_cloud import CompositeRetrievalMode
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.retrieve(
            retriever_id="string",
            mode=CompositeRetrievalMode.ROUTING,
            query="string",
        )
        ra   r_   r`   rD   r#   rM   rb   r%   rS   Nr*   r+   r,   r-   rc   rd   r   r   r   re     s2    	
zAsyncRetrieversClient.retrieverf   c          
         s  d|i}|t ur||d< |t ur||d< |t ur||d< | jjjdtj| j  ddt||dt	|| j
 d	d
I dH }d|j  krMdk rWn ntt| S |jdkrfttt| z| }	W n ty{   t|j|jdw t|j|	d)a  
        Retrieve data using specified pipelines without creating a persistent retriever.

        Parameters:
            - project_id: typing.Optional[str].

            - organization_id: typing.Optional[str].

            - mode: typing.Optional[CompositeRetrievalMode]. The mode of composite retrieval.

            - rerank_top_n: typing.Optional[int]. The number of nodes to retrieve after reranking over retrieved nodes from all retrieval tools.

            - query: str. The query to retrieve against.

            - pipelines: typing.Optional[typing.List[RetrieverPipeline]]. The pipelines to use for retrieval.
        ---
        from llama_cloud import CompositeRetrievalMode
        from llama_cloud.client import AsyncLlamaCloud

        client = AsyncLlamaCloud(
            token="YOUR_TOKEN",
        )
        await client.retrievers.direct_retrieve(
            mode=CompositeRetrievalMode.ROUTING,
            query="string",
        )
        ra   r_   r`   rR   rD   r#   rg   rB   r%   rE   Nr*   r+   r,   r-   rh   ri   r   r   r   rj     s4   %
z%AsyncRetrieversClient.direct_retrieve)rk   rl   rm   r   r   r:   rn   ro   r;   r   rA   r   rH   rK   rP   rU   r   rX   r]   r
   rp   r   re   rj   r   r   r   r   rr     rq   rr   )'r:   urllib.parser3   json.decoderr   core.api_errorr   core.client_wrapperr   r   core.jsonable_encoderr   core.remove_none_from_dictr   !errors.unprocessable_entity_errorr	   types.composite_retrieval_moder
    types.composite_retrieval_resultr   types.http_validation_errorr   types.retrieverr   types.retriever_creater   types.retriever_pipeliner   r8   __version__
startswithImportErrorpydantic.v1v1castAnyrU   r   rr   r   r   r   r   <module>   s6     