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")