
    7|h6                        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e
      Z G d d	e
      Z G d
 de
      Z G d de
      Zy)    )annotations)AnyDictOptionalN)CallbackManagerForToolRun)BaseToolc                  x    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ZddZ	y)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."
    )
    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_urlNc                j    | j                  | 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   )selfqueryrun_managerresponses       i/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/tools/cogniswitch/tool.py_runz CogniswitchKnowledgeRequest._run   s)    $ >>$--T    c                    |st        d      |st        d      |st        d      |st        d      |||d}d|i}t        j                  | j                  |d|      }|j	                         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   Fheadersverifydata)
ValueErrorrequestspostr   json)r   r   r   r   r   r    r"   r   s           r   r   z%CogniswitchKnowledgeRequest.answer_cs2   s     /00344>??233 %$
 ==wuSWX}}r   N)r   r   r   #Optional[CallbackManagerForToolRun]returnDict[str, Any])
r   r   r   r   r   r   r   r   r)   dict)
__name__
__module____qualname____doc__r   __annotations__r   r   r   r    r   r   r
   r
   
   sf     0D#/4K 4MNKUGSU
 <@ 9 
	*r   r
   c                  x    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ZddZ	y)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"
    )
    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_urlNc                (    | j                  |      }|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   document_namer   r   s       r   r   zCogniswitchKnowledgeStatus._runi   s    $ ((7r   c                ,   || j                   d}| j                  | j                  | j                   d}t        j                  | j
                  ||d      }|j                  dk(  r!|j                         }t        |d         }|j	                  d      }|dk(  rd	|d<   n6|d
k(  rd|d<   n+|dk(  rd|d<   n |dk(  rd|d<   n|dk(  rd|d<   n
|dk(  rd|d<   d|j                         v r|j                  d       d|j                         v r|j                  d       d|j                         v r|j                  d       d|j                         v r|j                  d       d|j                         v r|j                  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.
        )docNamer   r   r   r   F)r    paramsr!      statusr   SUCCESS   
PROCESSING   UPLOADED   FAILURE   UPLOAD_FAILURE   REJECTEDfilePathsavedFileNameintegrationConfigIdmetaData
docEntryIdmessage)r   r   r   r$   getr5   status_coder&   r+   keyspop)r   r8   r<   r    r   source_infosource_datar?   s           r   r7   z+CogniswitchKnowledgeStatus.knowledge_status~   s    +T]]Kkk>>!]]

 <<%%	
 3&"--/K{2/K __X.F{(1H%1(4H%1(2H%1(1H%1(8H%1(2H%[--//
++"2"2"440$(8(8(:: 56[--//
+{//11- 8// r   r'   )r8   r   r   r(   r)   r*   )r8   r   r)   r+   )
r,   r-   r.   r/   r   r0   r   r5   r   r7   r1   r   r   r3   r3   S   sm    	 /D#.AK AMNKP #  <@ 9 
	*6r   r3   c                      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Z	 	 	 	 	 	 	 	 ddZ	y)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."
    )
    !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_fileNc                :    |sddiS | j                  |||      }|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.
        rP   No input provided)filer8   document_description
store_data)r   r]   r8   r^   r   r   s         r   r   z#CogniswitchKnowledgeSourceFile._run   s<    0 .  +%9 ' H
 Or   c                   | j                   | j                  | j                  d}|sd}|sd}|dt        |d      i}||d}t	        j
                  | j                  |d|      }|j                  dk(  r|j                         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.
        r;    r]   rb)documentNamedocumentDescriptionF)r    r!   r"   filesr=   rP   Bad Request)	r   r   r   openr$   r%   rZ   rR   r&   )r   r]   r8   r^   r    rf   r"   r   s           r   r`   z)CogniswitchKnowledgeSourceFile.store_data   s    . kk>>!]]
 M##% T$-.E *#7
 ==%%
 3&==?"}--r   NNNN)
r]   Optional[str]r8   rj   r^   rj   r   r(   r)   r*   )r]   rj   r8   rj   r^   rj   r)   r+   )
r,   r-   r.   r/   r   r0   r   rZ   r   r`   r1   r   r   rX   rX      s     4D#3K 
 MNKN #  #'+.2;?"" %" ,	"
 9" 
"H2.2. %2. ,	2.
 
2.r   rX   c                      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Z	 	 	 	 	 	 	 	 ddZ	y)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"
    )
     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_urlNc                :    |sddiS | j                  |||      }|S )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.
        rP   r\   )urlr8   r^   r_   )r   rp   r8   r^   r   r   s         r   r   z"CogniswitchKnowledgeSourceURL._run?  s<    0 .  ??'!5 # 

 r   c                    | j                   | j                  | j                  d}|sd}|sd}|sddiS d|i}t        j                  | j
                  |d|      }|j                  dk(  r|j                         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.
        r;   rb   rP   r\   rp   Fr   r=   rg   )r   r   r   r$   r%   rn   rR   r&   )r   rp   r8   r^   r    r"   r   s          r   r`   z(CogniswitchKnowledgeSourceURL.store_datab  s    * kk>>!]]
 M##% .  3<D}}((	H 3&==?"}--r   ri   )
rp   rj   r8   rj   r^   rj   r   r(   r)   r*   )rp   rj   r8   rj   r^   rj   r)   r+   )
r,   r-   r.   r/   r   r0   r   rn   r   r`   r1   r   r   rl   rl   (  s     3D#2HK H MNKM   "'+.2;?!! %! ,	!
 9! 
!F-.-. %-. ,	-.
 
-.r   rl   )
__future__r   typingr   r   r   r$   langchain_core.callbacksr   langchain_core.toolsr   r
   r3   rX   rl   r1   r   r   <module>rv      sR    " & &  > )F( FRa aHn.X n.bg.H g.r   