Commit
Β·
926fb90
1
Parent(s):
26e76ca
mv2
Browse files
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
|