LeonceNsh's picture
Update app.py
f146007 verified
raw
history blame
2.21 kB
import json
import gradio as gr
import duckdb
# Load the Parquet dataset path
dataset_path = 'sample_contract_df.parquet' # Update with your Parquet file path
# Load the dataset schema with DuckDB
def load_dataset_schema():
con = duckdb.connect()
con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
schema = con.execute("DESCRIBE contract_data").fetchdf()
con.close()
return schema.to_dict(orient="records")
# Generate SQL based on schema and user query
def generate_sql_query(features, query):
# This simple example constructs an SQL condition directly, adapt for complex queries if needed
sql_query = f"SELECT * FROM contract_data WHERE {query}"
return sql_query
# Execute the SQL query and display results
def execute_query(sql_query):
con = duckdb.connect()
con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
result_df = con.execute(sql_query).fetchdf()
con.close()
return result_df.to_markdown() # Display result as markdown
# Gradio app UI
with gr.Blocks() as demo:
gr.Markdown("""
# Local Parquet SQL Query App
Query and explore data in `sample_contract_df.parquet` using DuckDB and SQL queries.
""")
# Load dataset schema and convert it to JSON for display
schema = load_dataset_schema()
schema_json = json.dumps(schema, indent=2)
features = gr.Code(label="Dataset Schema", value=schema_json, language="json")
# User input components
query = gr.Textbox(label="Natural Language Query", placeholder="Enter a condition, e.g., 'amount > 1000'")
sql_out = gr.Code(label="Generated SQL Query", language="sql")
results_out = gr.Markdown(label="Query Results")
# Buttons to generate and execute SQL
btn_generate = gr.Button("Generate SQL")
btn_execute = gr.Button("Execute Query")
# Set up click events with correct inputs and outputs
btn_generate.click(
fn=generate_sql_query,
inputs=[features, query], # Both are Gradio components now
outputs=sql_out,
)
btn_execute.click(
fn=execute_query,
inputs=sql_out,
outputs=results_out,
)
# Launch the app
demo.launch()