
    3fiN                        d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZmZ  ej(                  e      Z G d	 d
e      Zy)    )annotationsN)abstractmethod)AnyDictListOptional)CallbackManagerForToolRun)BaseTool)secret_from_env)Field	SecretStrc                      e Zd ZU dZded<   ded<    e edd            Zd	ed
<   dZded<   ded<   	 e	dd       Z
ddZddZe	 d	 	 	 	 	 dd       Zedd       ZddZ	 d	 	 	 	 	 	 	 d dZ	 	 	 	 	 	 	 	 d!dZy)"
EdenaiToolz
    the base tool for all the EdenAI Tools .
    you should have
    the environment variable ``EDENAI_API_KEY`` set with your API token.
    You can find your token here: https://app.edenai.run/admin/account/settings
    strfeature
subfeatureEDENAI_API_KEYN)default)default_factoryzOptional[SecretStr]edenai_api_keyFboolis_asyncz	List[str]	providersc                     ddl m}  d|  S )Nr   __version__z
langchain/)langchain_communityr   r   s    o/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_community/tools/edenai/edenai_base_tool.pyget_user_agentzEdenaiTool.get_user_agent"   s    3K=))    c                   | j                   r| j                   j                         nd}d| | j                         d}d| j                   d| j                   }t        | j                        dddd}|j                  |       t        j                  |||	      }| j                  |       	 | j                  |j                               S # t        $ r}t        d
|       d}~ww xY w)a  
        Make an API call to the EdenAI service with the specified query parameters.

        Args:
            query_params (dict): The parameters to include in the API call.

        Returns:
            requests.Response: The response from the EdenAI API call.

         Bearer )Authorization
User-Agentzhttps://api.edenai.run/v2//FT)r   response_as_dictattributes_as_listshow_original_response)jsonheadersz&An error occurred while running tool: N)r   get_secret_valuer   r   r   r   r   updaterequestspost_raise_on_error_parse_responser*   	ExceptionRuntimeError)selfquery_paramsapi_keyr+   urlpayloadresponsees           r   _call_eden_aizEdenaiTool._call_eden_ai(   s     =A<O<O$%%668UW&wi0--/

 +4<<.$//9JK T^^, %"&&+	
 	|$==7GDX&	M''88 	M!GsKLL	Ms   0C 	C+C&&C+c                   |j                   dk\  rt        d|j                          |j                   dk\  rt        d|j                         |j                   dk7  r%t        d|j                    d|j                         | j                  du r;|j                         d	   }|j                  d
      dk(  r|d   d   }t        |      y y )Ni  zEdenAI Server: Error i  z$EdenAI received an invalid payload:    z3EdenAI returned an unexpected response with status z: Fr   statusfailerrormessage)status_coder2   
ValueErrortextr   r*   get)r4   r9   provider_responseerr_msgs       r   r0   zEdenaiTool._raise_on_errorM   s    3&3H4H4H3IJKK!!S(CHMM?STT!!S(E''(8==/;  ==E! !) 2 $$X.&8+G4Y? )) 9	 "r    c                     y N )r4   queryrun_managers      r   _runzEdenaiTool._runb   s     	r    c                     y)zFTake a dict response and condense it's data in a human readable stringNrJ   )r4   r9   s     r   r1   zEdenaiTool._parse_responseh   s     	r    c                    dd| j                    | j                         d}t        j                  ||      }| j	                  |       |S )Nzapplication/jsonr#   )acceptauthorizationr%   )r+   )r   r   r.   rE   r0   )r4   r7   r+   r9   s       r   _get_edenaizEdenaiTool._get_edenaim   sN    (&t':':&;<--/
 <<W5X&r    c                   |j                         D ]  \  }}d|z  }t        |t              r+|j                  dd      }|j	                  | | d|        Ft        |t
              r-|j	                  | | d       | j                  |||dz          t        |t              s|j	                  | | d       | j                  |||dz           y )N  
,z :    )	items
isinstancer   replaceappendlist_list_handlingdict_parse_json_multilevel)r4   extracted_dataformatted_listlevelsectionsubsectionsindentations          r   r_   z!EdenaiTool._parse_json_multilevelz   s     %3$8$8$: 	T G[,K+s+)11$<%%gYc+&OPK.%%gYc&BC##KKK.%%gYc&BC++KQRS	Tr    c                    |D ]e  }t        |t              r| j                  |||       't        |t              r| j	                  |||dz          N|j                  d|z   |        g y )NrW   rT   )rY   r^   r_   r\   r]   r[   )r4   subsection_listra   rb   	list_items        r   r]   zEdenaiTool._list_handling   sn     ) 	DI)T*++I~uMIt,##I~uqyI %%yk&BC	Dr    )returnr   )r5   zDict[str, Any]ri   r   )r9   requests.Responseri   NonerI   )rK   r   rL   z#Optional[CallbackManagerForToolRun]ri   r   )r9   r   ri   r   )r7   r   ri   rj   )r   )r`   r^   ra   r\   rb   intri   rk   )rg   r\   ra   r\   rb   rl   ri   rk   )__name__
__module____qualname____doc____annotations__r   r   r   r   staticmethodr   r;   r0   r   rM   r1   rR   r_   r]   rJ   r    r   r   r      s    LO*/'(8$G+N'  Hd+* *
#MJ** MQ'J	 
   HIT"T48TADT	T"D#D59DBED	Dr    r   )
__future__r   loggingabcr   typingr   r   r   r   r.   langchain_core.callbacksr	   langchain_core.toolsr
   langchain_core.utilsr   pydanticr   r   	getLoggerrm   loggerr   rJ   r    r   <module>r}      sE    "   , ,  > ) 0 %			8	$FD FDr    