# import streamlit as st | |
# import requests | |
# import json | |
# st.set_page_config(page_title="QueryMate: Text to SQL & CSV") | |
# st.markdown("# QueryMate: Text to SQL & CSV π¬πποΈ") | |
# st.description('''Welcome to QueryMate, your friendly assistant for converting natural language queries into SQL statements and CSV outputs! | |
# Let's get started with your data queries!''') | |
# # Load chat history | |
# def load_chat_history(): | |
# try: | |
# with open('chat_history.json', 'r') as f: | |
# return json.load(f) | |
# except FileNotFoundError: | |
# return [] | |
# def save_chat_history(history): | |
# with open('chat_history.json', 'w') as f: | |
# json.dump(history, f) | |
# chat_history = load_chat_history() | |
# # Data source selection | |
# data_source = st.radio("Select Data Source:", ('SQL Database', 'Employee CSV')) | |
# # Predefined queries | |
# predefined_queries = { | |
# 'SQL Database': [ | |
# 'Print all students', | |
# 'Count total number of students', | |
# 'List students in Data Science class' | |
# ], | |
# 'Employee CSV': [ | |
# 'Print employees having the department id equal to 100', | |
# 'Count total number of employees', | |
# 'List Top 5 employees according to salary in descending order' | |
# ] | |
# } | |
# st.markdown(f"### Predefined Queries for {data_source}") | |
# # Create buttons for predefined queries | |
# for query in predefined_queries[data_source]: | |
# if st.button(query): | |
# st.session_state.predefined_query = query | |
# st.markdown("### Enter Your Question") | |
# question = st.text_input("Input: ", key="input", value=st.session_state.get('predefined_query', '')) | |
# # Submit button | |
# submit = st.button("Submit") | |
# if submit: | |
# # Send request to FastAPI backend | |
# response = requests.post("http://localhost:8000/query", | |
# json={"question": question, "data_source": data_source}) | |
# if response.status_code == 200: | |
# data = response.json() | |
# st.markdown(f"## Generated {'SQL' if data_source == 'SQL Database' else 'Pandas'} Query") | |
# st.code(data['query']) | |
# st.markdown("## Query Results") | |
# st.write(data['result']) | |
# if data_source == 'Employee CSV': | |
# st.markdown("## Available CSV Columns") | |
# st.write(data['columns']) | |
# # Update chat history | |
# chat_history.append(f"User ({data_source}): {question}") | |
# chat_history.append(f"AI: {data['query']}") | |
# save_chat_history(chat_history) | |
# else: | |
# st.error(f"Error processing your request: {response.text}") | |
# # Clear the predefined query from session state | |
# st.session_state.pop('predefined_query', None) | |
# # Display chat history | |
# st.markdown("## Chat History") | |
# for message in chat_history: | |
# st.text(message) | |
# # Option to clear chat history | |
# if st.button("Clear Chat History"): | |
# chat_history.clear() | |
# save_chat_history(chat_history) | |
# st.success("Chat history cleared!") | |
import streamlit as st | |
import requests | |
import json | |
import pandas as pd | |
st.set_page_config(page_title="QueryMate: Text to SQL & CSV") | |
st.markdown("# QueryMate: Text to SQL & CSV π¬ποΈ") | |
st.markdown('''Welcome to QueryMate, your friendly assistant for converting natural language queries into SQL statements and CSV outputs! | |
Let's get started with your data queries!''') | |
# Load chat history | |
def load_chat_history(): | |
try: | |
with open('chat_history.json', 'r') as f: | |
return json.load(f) | |
except FileNotFoundError: | |
return [] | |
def save_chat_history(history): | |
with open('chat_history.json', 'w') as f: | |
json.dump(history, f) | |
chat_history = load_chat_history() | |
# Data source selection | |
data_source = st.radio("Select Data Source:", ('SQL Database', 'Employee CSV')) | |
# Predefined queries | |
predefined_queries = { | |
'SQL Database': [ | |
'Print all students', | |
'Count total number of students', | |
'List students in Data Science class' | |
], | |
'Employee CSV': [ | |
'Print employees having the department id equal to 100', | |
'Count total number of employees', | |
'List Top 5 employees according to salary in descending order' | |
] | |
} | |
st.markdown(f"### Predefined Queries for {data_source}") | |
# Create buttons for predefined queries | |
for query in predefined_queries[data_source]: | |
if st.button(query): | |
st.session_state.predefined_query = query | |
st.markdown("### Enter Your Question") | |
question = st.text_input("Input: ", key="input", value=st.session_state.get('predefined_query', '')) | |
# Submit button | |
submit = st.button("Submit") | |
if submit: | |
# Send request to FastAPI backend | |
response = requests.post("http://localhost:8000/query", | |
json={"question": question, "data_source": data_source}) | |
if response.status_code == 200: | |
data = response.json() | |
st.markdown(f"## Generated {'SQL' if data_source == 'SQL Database' else 'Pandas'} Query") | |
st.code(data['query']) | |
st.markdown("## Query Results") | |
result = data['result'] | |
if isinstance(result, list) and len(result) > 0: | |
if isinstance(result[0], dict): | |
# For CSV queries that return a list of dictionaries | |
df = pd.DataFrame(result) | |
st.dataframe(df) | |
elif isinstance(result[0], list): | |
# For SQL queries that return a list of lists | |
df = pd.DataFrame(result) | |
st.dataframe(df) | |
else: | |
# For single column results | |
st.dataframe(pd.DataFrame(result, columns=['Result'])) | |
elif isinstance(result, dict): | |
# For single row results | |
st.table(result) | |
else: | |
# For scalar results or empty results | |
st.write(result) | |
if data_source == 'Employee CSV': | |
st.markdown("## Available CSV Columns") | |
st.write(data['columns']) | |
# Update chat history | |
chat_history.append(f"π¨βπ»({data_source}): {question}") | |
chat_history.append(f"π€: {data['query']}") | |
save_chat_history(chat_history) | |
else: | |
st.error(f"Error processing your request: {response.text}") | |
# Clear the predefined query from session state | |
st.session_state.pop('predefined_query', None) | |
# Display chat history | |
st.markdown("## Chat History") | |
for message in chat_history: | |
st.text(message) | |
# Option to clear chat history | |
if st.button("Clear Chat History"): | |
chat_history.clear() | |
save_chat_history(chat_history) | |
st.success("Chat history cleared!") |