Jeremy Live commited on
Commit
926fb90
Β·
1 Parent(s): 26e76ca
Files changed (1) hide show
  1. app.py +19 -3
app.py CHANGED
@@ -355,6 +355,22 @@ def extract_sql_query(text):
355
 
356
  return None
357
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  def execute_sql_query(query, db_connection):
359
  """Ejecuta una consulta SQL y devuelve los resultados como una cadena."""
360
  if not db_connection:
@@ -364,7 +380,7 @@ def execute_sql_query(query, db_connection):
364
  with db_connection._engine.connect() as connection:
365
  # Ensure SQLAlchemy receives a SQL expression
366
  if sa_text is not None and isinstance(query, str):
367
- result = connection.execute(sa_text(query))
368
  else:
369
  result = connection.execute(query)
370
  rows = result.fetchall()
@@ -545,7 +561,7 @@ async def stream_agent_response(question: str, chat_history: List[List[str]]) ->
545
  logger.info(f"Detected SQL query: {sql_query}")
546
  db_connection, _ = setup_database_connection()
547
  if db_connection:
548
- query_result = execute_sql_query(sql_query, db_connection)
549
 
550
  # Add the query and its result to the response
551
  response_text += f"\n\n### πŸ” Resultado de la consulta:\n```sql\n{sql_query}\n```\n\n{query_result}"
@@ -632,7 +648,7 @@ async def stream_agent_response(question: str, chat_history: List[List[str]]) ->
632
  logger.info(f"Second pass SQL detected: {sql_query2}")
633
  db_connection, _ = setup_database_connection()
634
  if db_connection:
635
- query_result = execute_sql_query(sql_query2, db_connection)
636
  # Append query and result to response_text for transparency
637
  response_text += f"\n\n### πŸ” Resultado de la consulta (2Βͺ pasada):\n```sql\n{sql_query2}\n```\n\n{query_result}"
638
  # Try robust markdown table parse
 
355
 
356
  return None
357
 
358
+ def sanitize_sql_query_text(query: str) -> str:
359
+ """Normalize LLM-produced SQL text to be executable by MariaDB/MySQL.
360
+
361
+ - Converts literal escape sequences ("\\n", "\\t") to spaces
362
+ - Collapses excessive whitespace
363
+ - Strips surrounding code block backticks if any
364
+ """
365
+ if not isinstance(query, str):
366
+ return query
367
+ q = query.strip().strip('`')
368
+ # Replace escaped newlines/tabs that sometimes appear in model outputs
369
+ q = q.replace("\\n", " ").replace("\\t", " ")
370
+ # Collapse whitespace to single spaces
371
+ q = re.sub(r"\s+", " ", q)
372
+ return q
373
+
374
  def execute_sql_query(query, db_connection):
375
  """Ejecuta una consulta SQL y devuelve los resultados como una cadena."""
376
  if not db_connection:
 
380
  with db_connection._engine.connect() as connection:
381
  # Ensure SQLAlchemy receives a SQL expression
382
  if sa_text is not None and isinstance(query, str):
383
+ result = connection.execute(sa_text(sanitize_sql_query_text(query)))
384
  else:
385
  result = connection.execute(query)
386
  rows = result.fetchall()
 
561
  logger.info(f"Detected SQL query: {sql_query}")
562
  db_connection, _ = setup_database_connection()
563
  if db_connection:
564
+ query_result = execute_sql_query(sanitize_sql_query_text(sql_query), db_connection)
565
 
566
  # Add the query and its result to the response
567
  response_text += f"\n\n### πŸ” Resultado de la consulta:\n```sql\n{sql_query}\n```\n\n{query_result}"
 
648
  logger.info(f"Second pass SQL detected: {sql_query2}")
649
  db_connection, _ = setup_database_connection()
650
  if db_connection:
651
+ query_result = execute_sql_query(sanitize_sql_query_text(sql_query2), db_connection)
652
  # Append query and result to response_text for transparency
653
  response_text += f"\n\n### πŸ” Resultado de la consulta (2Βͺ pasada):\n```sql\n{sql_query2}\n```\n\n{query_result}"
654
  # Try robust markdown table parse