
    BCh                     \    d dl Z d dlmZmZmZmZ  e j                  e      Z G d d      Z	y)    N)DictAnyOptionalListc                       e Zd ZdZdZd Zddedeeef   dede	eeef      d	eeef   f
d
Z
deeef   deded	eeef   fdZdeeef   d	eeef   fdZy)AIModelBasezBase class for AI modelsbasec                      y)zInitialize the AI modelN )selfs    )/var/www/html/app/models/ai_model_base.py__init__zAIModelBase.__init__   s        Npromptschema_datadb_type	db_configreturnc                     t        d      )a  Generate SQL query from natural language prompt
        
        Args:
            prompt: Natural language prompt
            schema_data: Database schema data
            db_type: Database type (mysql, postgresql, sqlserver, oracle)
            db_config: Optional database configuration settings
            
        Returns:
            Dictionary with generated SQL query and metadata
        %Subclasses must implement this methodNotImplementedError)r   r   r   r   r   s        r   generate_sqlzAIModelBase.generate_sql   s     ""IJJr   explain_data	sql_queryc                     t        d      )z9Analyze database explain plan and provide recommendationsr   r   )r   r   r   r   s       r   analyze_explain_planz AIModelBase.analyze_explain_plan   s    !"IJJr   resultc                    |j                  dd      s|S |j                  dd      j                         j                         g d}|D ]8  }j                  |      s|j                  dd      }d|d<   ||d<   d|d<   |c S  rt	              dk  rd|d<   d	|d<   d|d<   |S g d
}t        fd|D              }|sd|d<   d|d<   d|d<   |S |S )a  Validate SQL query generation results
        
        This method checks if the generated SQL is valid or if it contains
        patterns that indicate a failure to generate a proper query despite
        the model returning a success status.
        
        Args:
            result: The result dictionary from the AI model
            
        Returns:
            Updated result dictionary with corrected success status if needed
        successFr    )z	i'm sorryzi cannotzi apologizez	unable tozcan't generatezcannot generatez
sorry, butzsorry i cannotzi don't havezi don't knowznot able toz$Failed to generate a valid SQL queryerror
   z5Generated SQL query is empty or too short to be valid)selectfromwherejoinzgroup byzorder byhavinglimitc              3   &   K   | ]  }|v  
 y wNr   ).0keywordr   s     r   	<genexpr>z6AIModelBase.validate_sql_generation.<locals>.<genexpr>Y   s     Pw)3Ps   z6Generated text does not appear to be a valid SQL query)getstriplower
startswithlenany)r   r   failure_indicators	indicatorerror_messagesql_keywordshas_sql_keywordsr   s          @r   validate_sql_generationz#AIModelBase.validate_sql_generation"   s    zz)U+MJJ{B/557==?	
 , 		I##I. &

;8^ _ %*y!"/w&({#		 C	NR/ %F9UF7O"$F;M fP<PP %F9VF7O"$F;Mr   r+   )__name__
__module____qualname____doc__
model_typer   strr   r   r   r   r   r:   r   r   r   r   r      s    " JK3 KT#s(^ Kc K^fgkloqtltgu^v K  CG  HK  MP  HP  CQ KKc3h K# KZ] Kbfgjlogobp K?d38n ?c3h ?r   r   )
loggingtypingr   r   r   r   	getLoggerr;   loggerr   r   r   r   <module>rE      s,     , ,			8	$[ [r   