Skip to content

Commit ccf32ce

Browse files
joachim-dansweraponcedeleonch
authored andcommitted
feat: KG improvements (onyx-dot-app#5048)
* improvements * drop views if SQL fails * mypy fix
1 parent 90b15e8 commit ccf32ce

File tree

2 files changed

+49
-8
lines changed

2 files changed

+49
-8
lines changed

backend/onyx/agents/agent_search/kb_search/nodes/a3_generate_simple_sql.py

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ def generate_simple_sql(
203203
if state.kg_entity_temp_view_name is None:
204204
raise ValueError("kg_entity_temp_view_name is not set")
205205

206+
sql_statement_display: str | None = None
207+
206208
## STEP 3 - articulate goals
207209

208210
stream_write_step_activities(writer, _KG_STEP_NR)
@@ -381,7 +383,18 @@ def generate_simple_sql(
381383

382384
raise e
383385

384-
logger.debug(f"A3 - sql_statement after correction: {sql_statement}")
386+
# display sql statement with view names replaced by general view names
387+
sql_statement_display = sql_statement.replace(
388+
state.kg_doc_temp_view_name, "<your_allowed_docs_view_name>"
389+
)
390+
sql_statement_display = sql_statement_display.replace(
391+
state.kg_rel_temp_view_name, "<your_relationship_view_name>"
392+
)
393+
sql_statement_display = sql_statement_display.replace(
394+
state.kg_entity_temp_view_name, "<your_entity_view_name>"
395+
)
396+
397+
logger.debug(f"A3 - sql_statement after correction: {sql_statement_display}")
385398

386399
# Get SQL for source documents
387400

@@ -409,7 +422,20 @@ def generate_simple_sql(
409422
"relationship_table", rel_temp_view
410423
)
411424

412-
logger.debug(f"A3 source_documents_sql: {source_documents_sql}")
425+
if source_documents_sql:
426+
source_documents_sql_display = source_documents_sql.replace(
427+
state.kg_doc_temp_view_name, "<your_allowed_docs_view_name>"
428+
)
429+
source_documents_sql_display = source_documents_sql_display.replace(
430+
state.kg_rel_temp_view_name, "<your_relationship_view_name>"
431+
)
432+
source_documents_sql_display = source_documents_sql_display.replace(
433+
state.kg_entity_temp_view_name, "<your_entity_view_name>"
434+
)
435+
else:
436+
source_documents_sql_display = "(No source documents SQL generated)"
437+
438+
logger.debug(f"A3 source_documents_sql: {source_documents_sql_display}")
413439

414440
scalar_result = None
415441
query_results = None
@@ -435,7 +461,13 @@ def generate_simple_sql(
435461
rows = result.fetchall()
436462
query_results = [dict(row._mapping) for row in rows]
437463
except Exception as e:
464+
# TODO: raise error on frontend
438465
logger.error(f"Error executing SQL query: {e}")
466+
drop_views(
467+
allowed_docs_view_name=doc_temp_view,
468+
kg_relationships_view_name=rel_temp_view,
469+
kg_entity_view_name=ent_temp_view,
470+
)
439471

440472
raise e
441473

@@ -459,8 +491,14 @@ def generate_simple_sql(
459491
for source_document_result in query_source_document_results
460492
]
461493
except Exception as e:
462-
# No stopping here, the individualized SQL query is not mandatory
463494
# TODO: raise error on frontend
495+
496+
drop_views(
497+
allowed_docs_view_name=doc_temp_view,
498+
kg_relationships_view_name=rel_temp_view,
499+
kg_entity_view_name=ent_temp_view,
500+
)
501+
464502
logger.error(f"Error executing Individualized SQL query: {e}")
465503

466504
else:
@@ -493,11 +531,11 @@ def generate_simple_sql(
493531
if reasoning:
494532
stream_write_step_answer_explicit(writer, step_nr=_KG_STEP_NR, answer=reasoning)
495533

496-
if main_sql_statement:
534+
if sql_statement_display:
497535
stream_write_step_answer_explicit(
498536
writer,
499537
step_nr=_KG_STEP_NR,
500-
answer=f" \n Generated SQL: {main_sql_statement}",
538+
answer=f" \n Generated SQL: {sql_statement_display}",
501539
)
502540

503541
stream_close_step_answer(writer, _KG_STEP_NR)

backend/onyx/db/kg_temp_view.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import random
2+
13
from sqlalchemy import text
24
from sqlalchemy.ext.declarative import declarative_base
35
from sqlalchemy.orm import Session
@@ -17,10 +19,11 @@ def get_user_view_names(user_email: str, tenant_id: str) -> KGViewNames:
1719
user_email_cleaned = (
1820
user_email.replace("@", "__").replace(".", "_").replace("+", "_")
1921
)
22+
random_suffix_str = str(random.randint(1000000, 9999999))
2023
return KGViewNames(
21-
allowed_docs_view_name=f'"{tenant_id}".{KG_TEMP_ALLOWED_DOCS_VIEW_NAME_PREFIX}_{user_email_cleaned}',
22-
kg_relationships_view_name=f'"{tenant_id}".{KG_TEMP_KG_RELATIONSHIPS_VIEW_NAME_PREFIX}_{user_email_cleaned}',
23-
kg_entity_view_name=f'"{tenant_id}".{KG_TEMP_KG_ENTITIES_VIEW_NAME_PREFIX}_{user_email_cleaned}',
24+
allowed_docs_view_name=f'"{tenant_id}".{KG_TEMP_ALLOWED_DOCS_VIEW_NAME_PREFIX}_{user_email_cleaned}_{random_suffix_str}',
25+
kg_relationships_view_name=f'"{tenant_id}".{KG_TEMP_KG_RELATIONSHIPS_VIEW_NAME_PREFIX}_{user_email_cleaned}_{random_suffix_str}',
26+
kg_entity_view_name=f'"{tenant_id}".{KG_TEMP_KG_ENTITIES_VIEW_NAME_PREFIX}_{user_email_cleaned}_{random_suffix_str}',
2427
)
2528

2629

0 commit comments

Comments
 (0)