o
    |qi5                     @  s   d dl mZ d dlmZmZmZ d dlZd dlmZ d dl	m
Z
 G dd de
ZG dd	 d	e
ZG d
d de
ZG dd de
ZdS )    )annotations)AnyDictOptionalN)CallbackManagerForToolRun)BaseToolc                   @  f   e Zd ZU dZdZded< dZded< ded< ded< ded	< d
Zded< 	ddddZdddZ	dS )CogniswitchKnowledgeRequesta!  Tool that uses the Cogniswitch service to answer questions.

    name: str = "cogniswitch_knowledge_request"
    description: str = (
        "A wrapper around cogniswitch service to answer the question
        from the knowledge base."
        "Input should be a search query."
    )
    Zcogniswitch_knowledge_requeststrnamezYA wrapper around cogniswitch service to 
    answer the question from the knowledge base.descriptioncs_token	OAI_tokenapiKeyz@https://api.cogniswitch.ai:8243/cs-api/0.0.1/cs/knowledgeRequestapi_urlNqueryrun_manager#Optional[CallbackManagerForToolRun]returnDict[str, Any]c                 C  s   |  | j| j|| j}|S )a  
        Use the tool to answer a query.

        Args:
            query (str): Natural language query,
              that you would like to ask to your knowledge graph.
            run_manager (Optional[CallbackManagerForChainRun]):
            Manager for chain run callbacks.

        Returns:
            Dict[str, Any]: Output dictionary containing
            the 'response' from the service.
        )	answer_csr   r   r   )selfr   r   response r   q/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain_community/tools/cogniswitch/tool.py_run   s   z CogniswitchKnowledgeRequest._rundictc                 C  s^   |st d|st d|st d|st d|||d}d|i}tj| j||d}| S )ac  
        Send a query to the Cogniswitch service and retrieve the response.

        Args:
            cs_token (str): Cogniswitch token.
            OAI_token (str): OpenAI token.
            apiKey (str): OAuth token.
            query (str): Query to be answered.

        Returns:
            dict: Response JSON from the Cogniswitch service.
        zMissing cs_tokenzMissing OpenAI tokenzMissing cogniswitch OAuth tokenzMissing input query)r   platformTokenopenAITokenr   headersdata)
ValueErrorrequestspostr   json)r   r   r   r   r   r    r!   r   r   r   r   r   2   s   z%CogniswitchKnowledgeRequest.answer_csN)r   r
   r   r   r   r   )
r   r
   r   r
   r   r
   r   r
   r   r   )
__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r   r   r	   
   s   
 
r	   c                   @  r   )CogniswitchKnowledgeStatusae  Tool that uses the Cogniswitch services to get the
     status of the document or url uploaded.

    name: str = "cogniswitch_knowledge_status"
    description: str = (
        "A wrapper around cogniswitch services to know the status of
         the document uploaded from a url or a file. "
        "Input should be a file name or the url link"
    )
    Zcogniswitch_knowledge_statusr
   r   zlA wrapper around cogniswitch services to know 
    the status of the document uploaded from a url or a file.r   r   r   r   zFhttps://api.cogniswitch.ai:8243/cs-api/0.0.1/cs/knowledgeSource/statusknowledge_status_urlNdocument_namer   r   r   r   c                 C  s   |  |}|S )a  
        Use the tool to know the status of the document uploaded.

        Args:
            document_name (str): name of the document or
            the url uploaded
            run_manager (Optional[CallbackManagerForChainRun]):
            Manager for chain run callbacks.

        Returns:
            Dict[str, Any]: Output dictionary containing
            the 'response' from the service.
        )knowledge_status)r   r.   r   r   r   r   r   r   i   s   
zCogniswitchKnowledgeStatus._runr   c                 C  s>  || j d}| j| j| j d}tj| j||d}|jdkr| }t|d }|d}|dkr5d|d< n,|d	kr>d
|d< n#|dkrGd|d< n|dkrPd|d< n|dkrYd|d< n|dkrad|d< d|	 v rl|
d d|	 v rw|
d d|	 v r|
d d|	 v r|
d d|	 v r|
d |S d|jiS )a  
        Use this function to know the status of the document or the URL uploaded
        Args:
            document_name (str): The document name or the url that is uploaded.

        Returns:
            dict: Response JSON from the Cogniswitch service.
        )ZdocNamer   r   r   r   )r    params   statusr   SUCCESS   
PROCESSING   ZUPLOADED   FAILURE   ZUPLOAD_FAILURE   ZREJECTEDZfilePathZsavedFileNameZintegrationConfigIdZmetaDataZ
docEntryIdmessage)r   r   r   r#   getr-   status_coder%   r   keyspop)r   r.   r1   r    r   Zsource_infoZsource_datar4   r   r   r   r/   ~   sN   












z+CogniswitchKnowledgeStatus.knowledge_statusr&   )r.   r
   r   r   r   r   )r.   r
   r   r   )
r'   r(   r)   r*   r   r+   r   r-   r   r/   r   r   r   r   r,   S   s   
 
r,   c                   @  l   e Zd ZU dZdZded< dZded< ded< ded< ded	< d
Zded< 				ddddZdddZ	dS )CogniswitchKnowledgeSourceFilea  Tool that uses the Cogniswitch services to store data from file.

    name: str = "cogniswitch_knowledge_source_file"
    description: str = (
        "This calls the CogniSwitch services to analyze & store data from a file.
        If the input looks like a file path, assign that string value to file key.
        Assign document name & description only if provided in input."
    )
    Z!cogniswitch_knowledge_source_filer
   r   z
        This calls the CogniSwitch services to analyze & store data from a file. 
        If the input looks like a file path, assign that string value to file key. 
        Assign document name & description only if provided in input.
        r   r   r   r   zDhttps://api.cogniswitch.ai:8243/cs-api/0.0.1/cs/knowledgeSource/fileknowledgesource_fileNfileOptional[str]r.   document_descriptionr   r   r   r   c                 C      |sddiS | j |||d}|S )a  
        Execute the tool to store the data given from a file.
        This calls the CogniSwitch services to analyze & store data from a file.
        If the input looks like a file path, assign that string value to file key.
        Assign document name & description only if provided in input.

        Args:
            file Optional[str]: The file path of your knowledge
            document_name Optional[str]: Name of your knowledge document
            document_description Optional[str]: Description of your knowledge document
            run_manager (Optional[CallbackManagerForChainRun]):
            Manager for chain run callbacks.

        Returns:
            Dict[str, Any]: Output dictionary containing
            the 'response' from the service.
        r=   No input provided)rE   r.   rG   
store_data)r   rE   r.   rG   r   r   r   r   r   r      s   z#CogniswitchKnowledgeSourceFile._runr   c                 C  sp   | j | j| jd}|sd}|sd}|durdt|di}||d}tj| j|||d}|jdkr4| S d	d
iS )a  
        Store data using the Cogniswitch service.
        This calls the CogniSwitch services to analyze & store data from a file.
        If the input looks like a file path, assign that string value to file key.
        Assign document name & description only if provided in input.

        Args:
            file (Optional[str]): file path of your file.
            the current files supported by the files are
            .txt, .pdf, .docx, .doc, .html
            document_name (Optional[str]): Name of the document you are uploading.
            document_description (Optional[str]): Description of the document.

        Returns:
            dict: Response JSON from the Cogniswitch service.
        r0    NrE   rb)ZdocumentNameZdocumentDescription)r    r!   filesr2   r=   Bad Request)	r   r   r   openr#   r$   rD   r?   r%   )r   rE   r.   rG   r    rN   r!   r   r   r   r   rK      s,   
z)CogniswitchKnowledgeSourceFile.store_dataNNNN)
rE   rF   r.   rF   rG   rF   r   r   r   r   )rE   rF   r.   rF   rG   rF   r   r   )
r'   r(   r)   r*   r   r+   r   rD   r   rK   r   r   r   r   rC      s   
 

$rC   c                   @  rB   )CogniswitchKnowledgeSourceURLax  Tool that uses the Cogniswitch services to store data from a URL.

    name: str = "cogniswitch_knowledge_source_url"
    description: str = (
        "This calls the CogniSwitch services to analyze & store data from a url.
        the URL is provided in input, assign that value to the url key.
        Assign document name & description only if provided in input"
    )
    Z cogniswitch_knowledge_source_urlr
   r   z
    This calls the CogniSwitch services to analyze & store data from a url. 
        the URL is provided in input, assign that value to the url key. 
        Assign document name & description only if provided in inputr   r   r   r   zChttps://api.cogniswitch.ai:8243/cs-api/0.0.1/cs/knowledgeSource/urlknowledgesource_urlNurlrF   r.   rG   r   r   r   r   c                 C  rH   )a  
        Execute the tool to store the data given from a url.
        This calls the CogniSwitch services to analyze & store data from a url.
        the URL is provided in input, assign that value to the url key.
        Assign document name & description only if provided in input.

        Args:
            url Optional[str]: The website/url link of your knowledge
            document_name Optional[str]: Name of your knowledge document
            document_description Optional[str]: Description of your knowledge document
            run_manager (Optional[CallbackManagerForChainRun]):
            Manager for chain run callbacks.

        Returns:
            Dict[str, Any]: Output dictionary containing
            the 'response' from the service.
        r=   rI   )rT   r.   rG   rJ   )r   rT   r.   rG   r   r   r   r   r   r   <  s   z"CogniswitchKnowledgeSourceURL._runr   c                 C  sb   | j | j| jd}|sd}|sd}|sddiS d|i}tj| j||d}|jdkr-| S ddiS )	aE  
        Store data using the Cogniswitch service.
        This calls the CogniSwitch services to analyze & store data from a url.
        the URL is provided in input, assign that value to the url key.
        Assign document name & description only if provided in input.

        Args:
            url (Optional[str]): URL link.
            document_name (Optional[str]): Name of the document you are uploading.
            document_description (Optional[str]): Description of the document.

        Returns:
            dict: Response JSON from the Cogniswitch service.
        r0   rL   r=   rI   rT   r   r2   rO   )r   r   r   r#   r$   rS   r?   r%   )r   rT   r.   rG   r    r!   r   r   r   r   rK   _  s(   
z(CogniswitchKnowledgeSourceURL.store_datarQ   )
rT   rF   r.   rF   rG   rF   r   r   r   r   )rT   rF   r.   rF   rG   rF   r   r   )
r'   r(   r)   r*   r   r+   r   rS   r   rK   r   r   r   r   rR   %  s   
 

#rR   )
__future__r   typingr   r   r   r#   Zlangchain_core.callbacksr   Zlangchain_core.toolsr   r	   r,   rC   rR   r   r   r   r   <module>   s    Ibp