Spaces:
Sleeping
Sleeping
File size: 2,185 Bytes
6f5d272 5b49ca2 6f5d272 971daac 5b49ca2 6f5d272 5b49ca2 6f5d272 5b49ca2 66bae08 5b49ca2 6f5d272 5b49ca2 66bae08 5b49ca2 66bae08 6f5d272 5b49ca2 66bae08 5b49ca2 6f5d272 5b49ca2 6f5d272 5b49ca2 6f5d272 5b49ca2 6f5d272 5b49ca2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | import streamlit as st
import os
from google import genai
from io import StringIO
import prompts # Your refactored prompts.py
st.set_page_config(page_title="Gemini SQL Pro", layout="wide")
# 1. Sidebar Context
st.sidebar.title("๐ ๏ธ Settings")
dialect = st.sidebar.selectbox("Dialect", ["PostgreSQL", "MySQL", "SQLite", "Snowflake"])
db_name = st.sidebar.text_input("DB Name", "prod_database")
# Schema Upload Logic
st.sidebar.subheader("๐ Schema")
uploaded_file = st.sidebar.file_uploader("Upload DDL (.sql)", type=["sql", "txt"])
default_schema = uploaded_file.getvalue().decode("utf-8") if uploaded_file else ""
schema = st.sidebar.text_area("Schema Context", value=default_schema, height=250)
show_explain = st.sidebar.checkbox("Explain Logic", value=False)
# 2. Secret Handling (The Fix)
api_key = os.environ.get("GOOGLE_API_KEY") or st.secrets.get("GOOGLE_API_KEY")
if not api_key:
st.error("API Key missing!")
st.stop()
client = genai.Client(api_key=api_key)
# 3. Chat & Generation
if "messages" not in st.session_state: st.session_state.messages = []
if "last_sql" not in st.session_state: st.session_state.last_sql = ""
for msg in st.session_state.messages:
st.chat_message(msg["role"]).write(msg["content"])
if prompt := st.chat_input("Ask for a query..."):
st.chat_message("user").write(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
explain_req = "Explain your steps." if show_explain else "Code only."
sys_msg = prompts.SYSTEM_INSTRUCTION.format(
dialect=dialect, db_name=db_name, schema=schema, explain=explain_req
)
with st.spinner("Gemini is thinking..."):
response = client.models.generate_content(
model="gemini-2.0-flash",
config={'system_instruction': sys_msg},
contents=prompt
)
st.session_state.last_sql = response.text
st.chat_message("assistant").code(response.text, language="sql")
st.session_state.messages.append({"role": "assistant", "content": response.text})
# 4. Download
if st.session_state.last_sql:
st.download_button("๐พ Download SQL", st.session_state.last_sql, "query.sql") |