LeonceNsh commited on
Commit
f146007
·
verified ·
1 Parent(s): 7161a9c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -36
app.py CHANGED
@@ -1,13 +1,12 @@
1
- import os
2
  import json
3
  import gradio as gr
4
  import duckdb
5
 
6
- # Load the Parquet dataset
7
- dataset_path = 'sample_contract_df.parquet' # Update with your Parquet file's path
8
 
9
- # Load the dataset with DuckDB and get schema information
10
- def load_dataset():
11
  con = duckdb.connect()
12
  con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
13
  schema = con.execute("DESCRIBE contract_data").fetchdf()
@@ -16,23 +15,8 @@ def load_dataset():
16
 
17
  # Generate SQL based on schema and user query
18
  def generate_sql_query(features, query):
19
- messages = [
20
- {
21
- "role": "system",
22
- "content": "You are a SQL query expert assistant that generates DuckDB SQL queries based on the user's natural language query and dataset schema.",
23
- },
24
- {
25
- "role": "user",
26
- "content": f"""table contract_data
27
- # Features
28
- {features}
29
- # Query
30
- {query}
31
- """,
32
- },
33
- ]
34
- # Here we use DuckDB directly instead of an external API
35
- sql_query = f"SELECT * FROM contract_data WHERE {query}" # Simple example; adapt for complex queries
36
  return sql_query
37
 
38
  # Execute the SQL query and display results
@@ -41,38 +25,35 @@ def execute_query(sql_query):
41
  con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
42
  result_df = con.execute(sql_query).fetchdf()
43
  con.close()
44
- return result_df.to_markdown() # Convert result to markdown for display
45
 
46
  # Gradio app UI
47
  with gr.Blocks() as demo:
48
  gr.Markdown("""
49
  # Local Parquet SQL Query App
50
- Query and explore the data stored in `sample_contract_df.parquet` using DuckDB and SQL queries.
51
  """)
52
 
53
- # Display schema
54
- schema = load_dataset()
55
- features = json.dumps(schema, indent=2)
56
- gr.Markdown(f"### Dataset Schema:\n\n```json\n{features}\n```")
57
 
58
- # User inputs for natural language query
59
  query = gr.Textbox(label="Natural Language Query", placeholder="Enter a condition, e.g., 'amount > 1000'")
60
  sql_out = gr.Code(label="Generated SQL Query", language="sql")
61
  results_out = gr.Markdown(label="Query Results")
62
 
63
  # Buttons to generate and execute SQL
64
- with gr.Row():
65
- btn_generate = gr.Button("Generate SQL")
66
- btn_execute = gr.Button("Execute Query")
67
 
68
- # Generate SQL on button click
69
  btn_generate.click(
70
  fn=generate_sql_query,
71
- inputs=[features, query],
72
  outputs=sql_out,
73
  )
74
-
75
- # Execute SQL on button click
76
  btn_execute.click(
77
  fn=execute_query,
78
  inputs=sql_out,
 
 
1
  import json
2
  import gradio as gr
3
  import duckdb
4
 
5
+ # Load the Parquet dataset path
6
+ dataset_path = 'sample_contract_df.parquet' # Update with your Parquet file path
7
 
8
+ # Load the dataset schema with DuckDB
9
+ def load_dataset_schema():
10
  con = duckdb.connect()
11
  con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
12
  schema = con.execute("DESCRIBE contract_data").fetchdf()
 
15
 
16
  # Generate SQL based on schema and user query
17
  def generate_sql_query(features, query):
18
+ # This simple example constructs an SQL condition directly, adapt for complex queries if needed
19
+ sql_query = f"SELECT * FROM contract_data WHERE {query}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  return sql_query
21
 
22
  # Execute the SQL query and display results
 
25
  con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
26
  result_df = con.execute(sql_query).fetchdf()
27
  con.close()
28
+ return result_df.to_markdown() # Display result as markdown
29
 
30
  # Gradio app UI
31
  with gr.Blocks() as demo:
32
  gr.Markdown("""
33
  # Local Parquet SQL Query App
34
+ Query and explore data in `sample_contract_df.parquet` using DuckDB and SQL queries.
35
  """)
36
 
37
+ # Load dataset schema and convert it to JSON for display
38
+ schema = load_dataset_schema()
39
+ schema_json = json.dumps(schema, indent=2)
40
+ features = gr.Code(label="Dataset Schema", value=schema_json, language="json")
41
 
42
+ # User input components
43
  query = gr.Textbox(label="Natural Language Query", placeholder="Enter a condition, e.g., 'amount > 1000'")
44
  sql_out = gr.Code(label="Generated SQL Query", language="sql")
45
  results_out = gr.Markdown(label="Query Results")
46
 
47
  # Buttons to generate and execute SQL
48
+ btn_generate = gr.Button("Generate SQL")
49
+ btn_execute = gr.Button("Execute Query")
 
50
 
51
+ # Set up click events with correct inputs and outputs
52
  btn_generate.click(
53
  fn=generate_sql_query,
54
+ inputs=[features, query], # Both are Gradio components now
55
  outputs=sql_out,
56
  )
 
 
57
  btn_execute.click(
58
  fn=execute_query,
59
  inputs=sql_out,