AliInamdar commited on
Commit
18956d7
Β·
verified Β·
1 Parent(s): 861ce83

Update streamlit_app.py

Browse files
Files changed (1) hide show
  1. streamlit_app.py +54 -40
streamlit_app.py CHANGED
@@ -1,64 +1,78 @@
1
  import streamlit as st
2
  import pandas as pd
 
3
  import os
4
- from groq import Groq
5
 
6
- # Set page configuration
7
- st.set_page_config(page_title="πŸ“Š Excel SQL Assistant", layout="centered")
8
- st.title("🧠 Excel to SQL with GROQ + Streamlit")
9
 
10
- # Load Groq API key from Streamlit secrets
11
- GROQ_API_KEY = st.secrets.get("GROQ_API_KEY", None)
12
 
13
- # Fallback warning if API key not found
14
- if not GROQ_API_KEY:
15
- st.error("❌ GROQ API key not found. Please set it in your Hugging Face `secrets` tab.")
16
  st.stop()
17
 
18
- # Initialize Groq client
19
- client = Groq(api_key=GROQ_API_KEY)
20
-
21
- # Upload Excel file
22
  uploaded_file = st.file_uploader("πŸ“‚ Upload your Excel file", type=["xlsx"])
23
- st.write("πŸ“ Uploaded file object:", uploaded_file) # Debugging aid
24
-
25
- # Text input for user query
26
- user_query = st.text_input("πŸ’¬ Ask a question about your data")
27
 
28
- # Generate button
29
  if st.button("πŸš€ Generate & Run SQL"):
30
- if uploaded_file is not None and user_query.strip() != "":
31
  try:
 
32
  df = pd.read_excel(uploaded_file)
33
- st.success("βœ… File successfully loaded!")
34
 
35
- # Create schema-like string from the DataFrame
36
  preview = df.head(5).to_string(index=False)
37
- schema = f"Here are the first few rows of the dataset:\n\n{preview}"
 
 
 
 
38
 
39
- # Prompt to Groq
40
- full_prompt = f"""You are a data expert. Write a Pandas code snippet to answer the following question based on the data:\n\n{schema}\n\nQuestion: {user_query}"""
 
41
 
42
- with st.spinner("⏳ Generating SQL-like response using Groq..."):
43
- response = client.chat.completions.create(
44
- model="mixtral-8x7b-32768",
45
- messages=[
46
- {"role": "system", "content": "You are an expert data assistant that writes pandas code based on user questions."},
47
- {"role": "user", "content": full_prompt}
 
 
 
 
 
 
 
48
  ]
 
 
 
 
 
 
49
  )
50
 
51
- answer = response.choices[0].message.content
52
- st.code(answer, language="python")
 
 
 
53
 
54
- # Optionally: try to run it
55
- try:
56
- local_vars = {"df": df.copy()}
57
- exec(answer, {}, local_vars)
58
- if 'df' in local_vars:
59
- st.dataframe(local_vars['df'])
60
- except Exception as e:
61
- st.warning(f"⚠️ Could not execute the code:\n\n{e}")
62
 
63
  except Exception as e:
64
  st.error(f"❌ Error processing file: {e}")
 
1
  import streamlit as st
2
  import pandas as pd
3
+ import requests
4
  import os
 
5
 
6
+ # Page setup
7
+ st.set_page_config(page_title="🧠 Excel SQL Assistant (Together AI)", layout="centered")
8
+ st.title("πŸ“Š Excel to SQL with Together AI + Streamlit")
9
 
10
+ # API key from Hugging Face Secrets
11
+ TOGETHER_API_KEY = st.secrets.get("TOGETHER_API_KEY", None)
12
 
13
+ if not TOGETHER_API_KEY:
14
+ st.error("❌ Together API key not found. Please add it in your Hugging Face Secrets.")
 
15
  st.stop()
16
 
17
+ # File and input
 
 
 
18
  uploaded_file = st.file_uploader("πŸ“‚ Upload your Excel file", type=["xlsx"])
19
+ user_query = st.text_input("πŸ’¬ Ask a question about your dataset")
 
 
 
20
 
21
+ # Process on button click
22
  if st.button("πŸš€ Generate & Run SQL"):
23
+ if uploaded_file is not None and user_query.strip():
24
  try:
25
+ # Load DataFrame
26
  df = pd.read_excel(uploaded_file)
27
+ st.success("βœ… File loaded successfully")
28
 
 
29
  preview = df.head(5).to_string(index=False)
30
+ prompt = f"""
31
+ You are an expert data analyst. Given this sample dataset, write a Python pandas code snippet to answer the question.
32
+
33
+ Data preview:
34
+ {preview}
35
 
36
+ Question:
37
+ {user_query}
38
+ """
39
 
40
+ # Make request to Together AI
41
+ with st.spinner("🧠 Generating response from Together AI..."):
42
+ headers = {
43
+ "Authorization": f"Bearer {TOGETHER_API_KEY}",
44
+ "Content-Type": "application/json"
45
+ }
46
+ payload = {
47
+ "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
48
+ "max_tokens": 512,
49
+ "temperature": 0.3,
50
+ "messages": [
51
+ {"role": "system", "content": "You are a helpful AI that writes pandas code from data questions."},
52
+ {"role": "user", "content": prompt}
53
  ]
54
+ }
55
+
56
+ response = requests.post(
57
+ "https://api.together.xyz/v1/chat/completions",
58
+ headers=headers,
59
+ json=payload
60
  )
61
 
62
+ if response.status_code != 200:
63
+ raise ValueError(f"API error: {response.status_code} - {response.text}")
64
+
65
+ answer = response.json()['choices'][0]['message']['content']
66
+ st.code(answer, language='python')
67
 
68
+ # Try running the generated code
69
+ try:
70
+ local_vars = {"df": df.copy()}
71
+ exec(answer, {}, local_vars)
72
+ if "df" in local_vars:
73
+ st.dataframe(local_vars["df"])
74
+ except Exception as e:
75
+ st.warning(f"⚠️ Couldn't execute generated code:\n{e}")
76
 
77
  except Exception as e:
78
  st.error(f"❌ Error processing file: {e}")