WebashalarForML commited on
Commit
1b44a17
·
verified ·
1 Parent(s): 942ac66

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -4
app.py CHANGED
@@ -57,9 +57,14 @@ def create_agent_app(db_path: str):
57
  except Exception as e:
58
  flash(f"[ERROR]: Failed to connect to DB: {e}", "error")
59
  raise
60
-
61
  @tool
62
  def db_query_tool(query: str) -> str:
 
 
 
 
 
63
  try:
64
  result = db_instance.run_no_throw(query)
65
  return result or "Error: Query failed. Please rewrite your query and try again."
@@ -74,13 +79,54 @@ def create_agent_app(db_path: str):
74
  messages: Annotated[list[AnyMessage], add_messages]
75
 
76
  try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  query_check = ChatPromptTemplate.from_messages([
78
- ("system", "You are a SQL expert. Fix common issues in SQLite queries."),
79
  ("placeholder", "{messages}")
80
  ]) | llm.bind_tools([db_query_tool])
81
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  query_gen = ChatPromptTemplate.from_messages([
83
- ("system", "You are a SQL expert. Generate SQLite query and return answer using SubmitFinalAnswer tool."),
84
  ("placeholder", "{messages}")
85
  ]) | llm.bind_tools([SubmitFinalAnswer])
86
  except Exception as e:
 
57
  except Exception as e:
58
  flash(f"[ERROR]: Failed to connect to DB: {e}", "error")
59
  raise
60
+
61
  @tool
62
  def db_query_tool(query: str) -> str:
63
+ """
64
+ Execute a SQL query against the database and return the result.
65
+ If the query is invalid or returns no result, an error message will be returned.
66
+ In case of an error, the user is advised to rewrite the query and try again.
67
+ """
68
  try:
69
  result = db_instance.run_no_throw(query)
70
  return result or "Error: Query failed. Please rewrite your query and try again."
 
79
  messages: Annotated[list[AnyMessage], add_messages]
80
 
81
  try:
82
+ query_check_system = """You are a SQL expert with a strong attention to detail.
83
+ Double check the SQLite query for common mistakes, including:
84
+ - Using NOT IN with NULL values
85
+ - Using UNION when UNION ALL should have been used
86
+ - Using BETWEEN for exclusive ranges
87
+ - Data type mismatch in predicates
88
+ - Properly quoting identifiers
89
+ - Using the correct number of arguments for functions
90
+ - Casting to the correct data type
91
+ - Using the proper columns for joins
92
+
93
+ If there are any of the above mistakes, rewrite the query. If there are no mistakes, just reproduce the original query.
94
+
95
+ You will call the appropriate tool to execute the query after running this check.
96
+ """
97
+
98
  query_check = ChatPromptTemplate.from_messages([
99
+ ("system", query_check_system),
100
  ("placeholder", "{messages}")
101
  ]) | llm.bind_tools([db_query_tool])
102
+
103
+ query_gen_system = """You are a SQL expert with a strong attention to detail.
104
+
105
+ Given an input question, output a syntactically correct SQLite query to run, then look at the results of the query and return the answer.
106
+
107
+ DO NOT call any tool besides SubmitFinalAnswer to submit the final answer.
108
+
109
+ When generating the query:
110
+
111
+ Output the SQL query that answers the input question without a tool call.
112
+
113
+ Unless the user specifies a specific number of examples they wish to obtain, always limit your query to at most 5 results.
114
+ You can order the results by a relevant column to return the most interesting examples in the database.
115
+ Never query for all the columns from a specific table, only ask for the relevant columns given the question.
116
+
117
+ If you get an error while executing a query, rewrite the query and try again.
118
+
119
+ If you get an empty result set, you should try to rewrite the query to get a non-empty result set.
120
+ NEVER make stuff up if you don't have enough information to answer the query... just say you don't have enough information.
121
+
122
+ If you have enough information to answer the input question, simply invoke the appropriate tool to submit the final answer to the user.
123
+
124
+ DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. Do not return any sql query except answer.
125
+ """
126
+
127
+
128
  query_gen = ChatPromptTemplate.from_messages([
129
+ ("system", query_gen_system),
130
  ("placeholder", "{messages}")
131
  ]) | llm.bind_tools([SubmitFinalAnswer])
132
  except Exception as e: