|
import streamlit as st |
|
import google.generativeai as genai |
|
from dotenv import load_dotenv |
|
import os |
|
|
|
|
|
load_dotenv() |
|
|
|
os.environ["GOOGLE_API_KEY"] = os.getenv("GOOGLE_API_KEY") |
|
genai.configure(api_key=os.environ["GOOGLE_API_KEY"]) |
|
|
|
def main(): |
|
|
|
def gemini_ans(prompt_input): |
|
model = genai.GenerativeModel('gemini-1.5-flash-latest') |
|
response = model.generate_content([prompt_input]) |
|
return response.text |
|
|
|
|
|
st.set_page_config(page_title='SQL Query Generator', page_icon=':robot:') |
|
|
|
|
|
st.markdown( |
|
""" |
|
<style> |
|
body { |
|
background-color: #f5f5f5; |
|
font-family: 'Arial', sans-serif; |
|
} |
|
.header { |
|
background-color: #ffffff; |
|
padding: 20px; |
|
border-radius: 10px; |
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); |
|
margin-bottom: 20px; |
|
} |
|
.header h1 { |
|
margin: 0; |
|
color: #333333; |
|
text-align: center; |
|
} |
|
.header p { |
|
margin: 0; |
|
text-align: center; |
|
color: #666666; |
|
font-size: 14px; |
|
} |
|
.input-container { |
|
background-color: #ffffff; |
|
padding: 20px; |
|
border-radius: 10px; |
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); |
|
margin-bottom: 20px; |
|
} |
|
.stTextArea, .stTextInput, .stButton { |
|
margin-top: 15px; |
|
} |
|
.stButton > button { |
|
background-color: #4CAF50; |
|
color: white; |
|
border: none; |
|
padding: 10px 20px; |
|
font-size: 16px; |
|
border-radius: 5px; |
|
cursor: pointer; |
|
} |
|
.stButton > button:hover { |
|
background-color: #45a049; |
|
} |
|
</style> |
|
""", |
|
unsafe_allow_html=True |
|
) |
|
|
|
|
|
st.markdown( |
|
""" |
|
<div class="header"> |
|
<h1>SQL Query Generator</h1> |
|
<p>Effortlessly transform your natural language input into SQL queries!</p> |
|
</div> |
|
""" |
|
, unsafe_allow_html=True) |
|
|
|
|
|
st.markdown( |
|
""" |
|
<div class="input-container"> |
|
<h4>Enter your details below:</h4> |
|
</div> |
|
""", |
|
unsafe_allow_html=True |
|
) |
|
|
|
|
|
input_text = st.text_area('Enter your natural language query...') |
|
schema_name = st.text_input('Enter the schema name (optional):', placeholder="e.g., public") |
|
table_name = st.text_input('Enter the table name:', placeholder="e.g., users") |
|
|
|
|
|
submit = st.button('Generate SQL Query', key='generate_button') |
|
|
|
|
|
prompt = """ |
|
You are an English to SQL language translator. The schema name is {schema}, |
|
and the table name is {table}. Using the given text here {en}, |
|
write a SQL query only without making any mistakes. |
|
""" |
|
|
|
prompt1 = """ |
|
What would be the expected response of this query snippet: |
|
``` |
|
{query} |
|
``` |
|
Provide a sample tabular response with no explanation. |
|
""" |
|
|
|
prompt2 = """ |
|
Explain the SQL query: |
|
``` |
|
{query} |
|
``` |
|
Please provide the simplest explanation. |
|
""" |
|
|
|
|
|
if submit: |
|
if not table_name: |
|
st.error("Please enter the table name!") |
|
return |
|
|
|
with st.spinner('Generating SQL Query...'): |
|
|
|
sql_query = gemini_ans(prompt.format( |
|
schema=schema_name or 'default schema', |
|
table=table_name, |
|
en=input_text |
|
)) |
|
st.header('Model Response') |
|
st.success("Generated SQL Query Successfully!") |
|
st.code(sql_query, language="sql") |
|
|
|
|
|
sql_table = gemini_ans(prompt1.format(query=sql_query)) |
|
st.success('Sample Expected Output') |
|
st.markdown(sql_table) |
|
|
|
|
|
sql_explanation = gemini_ans(prompt2.format(query=sql_query)) |
|
st.success('Explanation of the Given Query') |
|
st.markdown(sql_explanation) |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|