Ravi theja K
commited on
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import streamlit as st
|
3 |
+
from snowflake.snowpark import Session
|
4 |
+
from snowflake.ml.utils.connection_params import SnowflakeLoginOptions
|
5 |
+
from langchain_community.utilities import SQLDatabase
|
6 |
+
from langchain_openai import OpenAI
|
7 |
+
from langchain.chains import create_sql_query_chain
|
8 |
+
|
9 |
+
@st.cache_resource(show_spinner="Connecting...")
|
10 |
+
def getSession():
|
11 |
+
pars = SnowflakeLoginOptions("test_conn")
|
12 |
+
pars["database"] = "SNOWFLAKE_SAMPLE_DATA"
|
13 |
+
pars["schema"] = "TPCH_SF1"
|
14 |
+
session = Session.builder.configs(pars).create()
|
15 |
+
|
16 |
+
url = (f"snowflake://{pars['user']}:{pars['password']}@{pars['account']}"
|
17 |
+
+ f"/{pars['database']}/{pars['schema']}"
|
18 |
+
+ f"?warehouse={pars['warehouse']}&role={pars['role']}")
|
19 |
+
db = SQLDatabase.from_uri(url)
|
20 |
+
|
21 |
+
openai_key = os.environ["OPENAI_API_KEY"]
|
22 |
+
llm = OpenAI(openai_api_key=openai_key)
|
23 |
+
chain = create_sql_query_chain(llm, db)
|
24 |
+
return session, db, chain
|
25 |
+
|
26 |
+
|
27 |
+
st.title("SQL Query Generator")
|
28 |
+
st.write("Returns and runs queries from questions in natural language.")
|
29 |
+
|
30 |
+
session, db, chain = getSession()
|
31 |
+
|
32 |
+
question = st.sidebar.text_area("Ask a question:",
|
33 |
+
value="Show me the total number of entries in the first table")
|
34 |
+
sql = chain.invoke({"question": question}).rstrip(';')
|
35 |
+
|
36 |
+
tabQuery, tabData, tabLog = st.tabs(["Query", "Data", "Log"])
|
37 |
+
tabQuery.code(sql, language="sql")
|
38 |
+
tabData.dataframe(session.sql(sql))
|
39 |
+
tabLog.code(db.table_info, language="sql")
|