
    h5                        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       h/var/www/html/eduruby.in/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                  ||      }|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   headers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 %$
 ==wTJ}}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
                  ||      }|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   )r    params   statusr   SUCCESS   
PROCESSING   UPLOADED   FAILURE   UPLOAD_FAILURE   REJECTEDfilePathsavedFileNameintegrationConfigIdmetaData
docEntryIdmessage)r   r   r   r#   getr4   status_coder%   r*   keyspop)r   r7   r;   r    r   source_infosource_datar>   s           r   r6   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&   )r7   r   r   r'   r(   r)   )r7   r   r(   r*   )
r+   r,   r-   r.   r   r/   r   r4   r   r6   r0   r   r   r2   r2   S   sm    	 /D#.AK AMNKP #  <@ 9 
	*4r   r2   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.
        rO   No input provided)filer7   document_description
store_data)r   r\   r7   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                  ||      }|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documentDescription)r    r!   filesr<   rO   Bad Request)	r   r   r   openr#   r$   rY   rQ   r%   )r   r\   r7   r]   r    re   r!   r   s           r   r_   z)CogniswitchKnowledgeSourceFile.store_data   s    . kk>>!]]
 M##% T$-.E *#7
 ==%%	
 3&==?"}--r   NNNN)
r\   Optional[str]r7   ri   r]   ri   r   r'   r(   r)   )r\   ri   r7   ri   r]   ri   r(   r*   )
r+   r,   r-   r.   r   r/   r   rY   r   r_   r0   r   r   rW   rW      s     4D#3K 
 MNKN #  #'+.2;?"" %" ,	"
 9" 
"H1.1. %1. ,	1.
 
1.r   rW   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.
        rO   r[   )urlr7   r]   r^   )r   ro   r7   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
                  ||      }|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:   ra   rO   r[   ro   r   r<   rf   )r   r   r   r#   r$   rm   rQ   r%   )r   ro   r7   r]   r    r!   r   s          r   r_   z(CogniswitchKnowledgeSourceURL.store_data_  s    * kk>>!]]
 M##% .  3<D}}((H
 3&==?"}--r   rh   )
ro   ri   r7   ri   r]   ri   r   r'   r(   r)   )ro   ri   r7   ri   r]   ri   r(   r*   )
r+   r,   r-   r.   r   r/   r   rm   r   r_   r0   r   r   rk   rk   %  s     3D#2HK H MNKM   "'+.2;?!! %! ,	!
 9! 
!F,.,. %,. ,	,.
 
,.r   rk   )
__future__r   typingr   r   r   r#   langchain_core.callbacksr   langchain_core.toolsr   r
   r2   rW   rk   r0   r   r   <module>ru      sR    " & &  > )F( FR_ _Dm.X m.`f.H f.r   