|
|
import streamlit as st |
|
|
import openai |
|
|
import pyodbc |
|
|
import pandas as pd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
openai.api_key = "YOUR_OPENAI_API_KEY" |
|
|
|
|
|
|
|
|
server = 'dcdocstgdb01.dc68032.easn.morningstar.com' |
|
|
database = 'DocumentAcquisition' |
|
|
username = 'DocuUser' |
|
|
password = 'StagTest@1' |
|
|
|
|
|
conn_str = ( |
|
|
f"DRIVER={{ODBC Driver 17 for SQL Server}};" |
|
|
f"SERVER={server};" |
|
|
f"DATABASE={database};" |
|
|
f"UID={username};" |
|
|
f"PWD={password}" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_sql(nl_question): |
|
|
prompt = f""" |
|
|
You are a helpful assistant that converts user questions into SQL Server queries. |
|
|
|
|
|
Question: "{nl_question}" |
|
|
|
|
|
SQL Query: |
|
|
""" |
|
|
response = openai.ChatCompletion.create( |
|
|
model="gpt-4", |
|
|
messages=[{"role": "user", "content": prompt}], |
|
|
temperature=0 |
|
|
) |
|
|
sql_query = response.choices[0].message["content"].strip() |
|
|
return sql_query |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_query(sql_query): |
|
|
try: |
|
|
conn = pyodbc.connect(conn_str) |
|
|
df = pd.read_sql(sql_query, conn) |
|
|
conn.close() |
|
|
return df |
|
|
except Exception as e: |
|
|
return str(e) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
st.title("π§ GenAI SQL Server Q&A") |
|
|
st.markdown("Ask a question in natural language. Iβll generate SQL and return the results from your database.") |
|
|
|
|
|
user_question = st.text_input("π Ask your question:") |
|
|
|
|
|
if st.button("Submit") and user_question: |
|
|
with st.spinner("Thinking..."): |
|
|
sql_query = generate_sql(user_question) |
|
|
st.code(sql_query, language="sql") |
|
|
|
|
|
result = run_query(sql_query) |
|
|
|
|
|
if isinstance(result, pd.DataFrame): |
|
|
st.success("β
Results:") |
|
|
st.dataframe(result) |
|
|
else: |
|
|
st.error(f"β Error:\n{result}") |
|
|
|