in agents/DebugSQLAgent.py [0:0]
def start_debugger (self,
source_type,
user_grouping,
query,
user_question,
SQLChecker,
tables_schema,
columns_schema,
AUDIT_TEXT,
similar_sql="-No examples provided..-",
DEBUGGING_ROUNDS = 2,
LLM_VALIDATION=False):
i = 0
STOP = False
invalid_response = False
chat_session = self.init_chat(source_type,user_grouping,tables_schema,columns_schema,similar_sql)
sql = query.replace("```sql","").replace("```","").replace("EXPLAIN ANALYZE ","")
AUDIT_TEXT=AUDIT_TEXT+"\n\nEntering the debugging steps!"
while (not STOP):
json_syntax_result={ "valid":True, "errors":"None"}
# Check if LLM Validation is enabled
if LLM_VALIDATION:
# sql = query.replace("```sql","").replace("```","").replace("EXPLAIN ANALYZE ","")
json_syntax_result = SQLChecker.check(source_type,user_question,tables_schema,columns_schema, sql)
else:
json_syntax_result['valid'] = True
AUDIT_TEXT=AUDIT_TEXT+"\nLLM Validation is deactivated. Jumping directly to dry run execution."
if json_syntax_result['valid'] is True:
AUDIT_TEXT=AUDIT_TEXT+"\nGenerated SQL is syntactically correct as per LLM Validation!"
# print(AUDIT_TEXT)
if source_type=='bigquery':
connector=bqconnector
else:
connector=pgconnector
correct_sql, exec_result_df = connector.test_sql_plan_execution(sql)
if not correct_sql:
AUDIT_TEXT=AUDIT_TEXT+"\nGenerated SQL failed on execution! Here is the feedback from bigquery dryrun/ explain plan: \n" + str(exec_result_df)
rewrite_result = self.rewrite_sql_chat(chat_session, sql, user_question, exec_result_df)
print('\n Rewritten and Cleaned SQL: ' + str(rewrite_result))
AUDIT_TEXT=AUDIT_TEXT+"\nRewritten and Cleaned SQL: \n' + str({rewrite_result})"
sql = str(rewrite_result).replace("```sql","").replace("```","").replace("EXPLAIN ANALYZE ","")
else: STOP = True
else:
print(f'\nGenerated qeury failed on syntax check as per LLM Validation!\nError Message from LLM: {json_syntax_result} \nRewriting the query...')
AUDIT_TEXT=AUDIT_TEXT+'\nGenerated qeury failed on syntax check as per LLM Validation! \nError Message from LLM: '+ str(json_syntax_result) + '\nRewriting the query...'
syntax_err_df = pd.read_json(json.dumps(json_syntax_result))
rewrite_result=self.rewrite_sql_chat(chat_session, sql, user_question, syntax_err_df)
print(rewrite_result)
AUDIT_TEXT=AUDIT_TEXT+'\n Rewritten SQL: ' + str(rewrite_result)
sql=str(rewrite_result).replace("```sql","").replace("```","").replace("EXPLAIN ANALYZE ","")
i+=1
if i > DEBUGGING_ROUNDS:
AUDIT_TEXT=AUDIT_TEXT+ "Exceeded the number of iterations for correction!"
AUDIT_TEXT=AUDIT_TEXT+ "The generated SQL can be invalid!"
STOP = True
invalid_response=True
# After the while is completed
if i > DEBUGGING_ROUNDS:
invalid_response=True
return sql, invalid_response, AUDIT_TEXT