|
|
|
|
|
|
|
import streamlit as st |
|
import os |
|
import sqlite3 |
|
from groq import Groq |
|
|
|
|
|
st.set_page_config(page_title="SQL Retrieval by text") |
|
st.header("Retrieve SQL Data using GROQ") |
|
|
|
db_file = st.file_uploader("Choose a file (.db)",type='db') |
|
|
|
tablename=st.text_input("Table Name",key="tablename") |
|
columnnames=st.text_input("Column Names",key="columnname") |
|
question=st.text_input("Query ",key="input") |
|
|
|
submit=st.button("Ask the question") |
|
|
|
|
|
prompt=[ |
|
""" |
|
You are an expert in converting English questions to SQL query! |
|
The SQL database has the name """ + tablename + """ and has the following columns - """ + columnnames +""" \n\n |
|
For example,\n |
|
|
|
Example 1 - How many entries of records are present?, |
|
the SQL command will be something like this SELECT COUNT(*) FROM """+ tablename + """ . In this example tablename is Table name;\n |
|
|
|
Example 2 - Tell me all the students studying in Data Science class?, |
|
the SQL command will be something like this SELECT * FROM STUDENT |
|
where CLASS="Data Science". In this example, STUDENT is the table name and CLASS is one of the colmns; |
|
also the sql code should not have ``` in beginning or end and sql word in output \n |
|
|
|
Example 3 - Based on tablename and columnnames, generate a SQL response for any uploaded db_file. |
|
"""] |
|
|
|
client=Groq(api_key=os.getenv("GROQ_API_KEY")) |
|
|
|
|
|
|
|
def get_groq_response(client,question,prompt): |
|
completion=client.chat.completions.create( |
|
model='llama3-8b-8192', |
|
messages=[ |
|
{ |
|
"role":'system', |
|
'content':prompt |
|
}, |
|
{ |
|
"role":'user', |
|
'content':question |
|
} |
|
]) |
|
return completion.choices[0].message.content |
|
|
|
|
|
|
|
def read_sql_query(sql,db): |
|
if db: |
|
|
|
|
|
conn = sqlite3.connect(db) |
|
cur=conn.cursor() |
|
cur.execute(sql) |
|
rows=cur.fetchall() |
|
conn.commit() |
|
conn.close() |
|
return rows |
|
|
|
|
|
|
|
if submit: |
|
response=get_groq_response(client,question,prompt[0]) |
|
response1=read_sql_query(response,db_file.name) |
|
st.subheader(" :blue[RESPONSE] :sunglasses: ") |
|
for row in response1: |
|
st.text(row[0]) |