Spaces:
Sleeping
Sleeping
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() | |