
    7|h                     R    d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
  G d de      Zy)zUtil that calls Dataherald.    )AnyDictOptional)get_from_dict_or_env)	BaseModel
ConfigDictmodel_validatorc                       e Zd ZU dZdZeed<   eed<   dZe	e   ed<    e
d      Z ed	      ed
edefd              ZdedefdZy)DataheraldAPIWrapperzWrapper for Dataherald.

    Docs for using:

    1. Go to dataherald and sign up
    2. Create an API key
    3. Save your API key into DATAHERALD_API_KEY env variable
    4. pip install dataherald

    Ndataherald_clientdb_connection_iddataherald_api_keyforbid)extrabefore)modevaluesreturnc                     t        |dd      }||d<   	 ddl}|j                  |      }||d<   |S # t        $ r t        d      w xY w)z?Validate that api key and python package exists in environment.r   DATAHERALD_API_KEYr   NzLdataherald is not installed. Please install it with `pip install dataherald`)api_keyr   )r   
dataheraldImportError
Dataherald)clsr   r   r   clients        g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/dataherald.pyvalidate_environmentz)DataheraldAPIWrapper.validate_environment   sw     2(*>
 (:#$	 &&/A&B&,"#  	B 	s	   1 Apromptc                     ddl m}  ||| j                        }| j                  j                  j                  |      }	 |j                  }|syd| S # t        $ r Y yw xY w)z9Generate a sql query through Dataherald and parse result.r   )Prompt)textr   )r   z	No answerzAnswer: z#Dataherald wasn't able to answer it)-dataherald.types.sql_generation_create_paramsr!   r   r   sql_generationscreatesqlStopIteration)selfr   r!   
prompt_objresanswers         r   runzDataheraldAPIWrapper.run4   si    H$:O:OP
$$44;;:;N		9WWF"!&** 	98	9s   A A 	A"!A")__name__
__module____qualname____doc__r   r   __annotations__strr   r   r   model_configr	   classmethodr   r   r,        r   r   r   	   sx    	 "s!(,,L (#$ 3   $*9# 9# 9r6   r   N)r0   typingr   r   r   langchain_core.utilsr   pydanticr   r   r	   r   r5   r6   r   <module>r:      s#    ! & & 5 ; ;;99 ;9r6   