a
    eg]                     @   s   d dl 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	 d dl
mZ eje_ejZeeddd	d
Ze	eZed dddZeeedddZdddZdS )    N)
app_config)
ChatOpenAI)create_sql_agent)SQLDatabase)create_engine   2   F)	pool_sizemax_overflowechozgpt-4-turboi,  )ZtemperatureZ
model_nameZ
max_tokenszopenai-toolsT)dbZ
agent_typeverbose      c              
   C   s   d}||k rz$t d| i}|r&|W S tdW n2 tyb } zdt| }W Y d}~n
d}~0 0 |d7 }||k r|d|d   }td| d	| d
| d| d	 t| qtd| d qd|iS )z
    Generates an SQL query using the LLM with automatic retry mechanism.
    
    - Retries up to `max_retries` times if an error occurs.
    - Uses exponential backoff (`base_delay` seconds) between retries.
    r   inputzNo response from LLMzUnexpected error: N   r   u   ⚠️ Attempt /z	 failed: z. Retrying in zs...zAll z* attempts failed. Returning error message.error)agent_executorinvoke
ValueError	Exceptionstrprinttimesleep)natural_language_queryZmax_retriesZ
base_delayZattemptresulteZerror_messageZ	wait_time r   -/var/www/html/emsaiapi.evdpl.com/app/utils.pygenerate_sql_query   s     $"r!   )r   r   )r   Zopenaiconfigr   Zlangchain_openair   Z"langchain_community.agent_toolkitsr   Zlangchain_community.utilitiesr   
sqlalchemyr   OPENAI_API_KEYZapi_keySQLALCHEMY_DATABASE_URIZdb_connenginer   Zllmr   r!   r   r   r   r    <module>   s   