Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import PyPDF2 | |
| import docx | |
| import pandas as pd | |
| from langchain_core.prompts import ChatPromptTemplate | |
| from langchain_google_genai import ChatGoogleGenerativeAI | |
| from langchain_core.output_parsers import StrOutputParser | |
| # Secure API key handling | |
| api_key = "AIzaSyBuhWQHGfMQewIY_gdnmbzzYoori6faeUo" # Store in .streamlit/secrets.toml | |
| # Database options | |
| db_options = ["MySQL", "PostgreSQL", "SQLite", "MSSQL", "Oracle", "MongoDB", "Firebase", "Pandas"] | |
| # Function to read PDF files | |
| def read_pdf(file): | |
| reader = PyPDF2.PdfReader(file) | |
| text = "\n".join([page.extract_text() for page in reader.pages if page.extract_text()]) | |
| return text | |
| # Function to read DOCX files | |
| def read_docx(file): | |
| doc = docx.Document(file) | |
| text = "\n".join([para.text for para in doc.paragraphs]) | |
| return text | |
| # System prompt for SQL, NoSQL, and Pandas problem solving | |
| prompt_template = ChatPromptTemplate.from_messages([ | |
| ("system", """ | |
| You are an expert in database and data analysis problem solving. Given a problem statement, | |
| provide the most efficient solution using SQL, NoSQL, or Pandas depending on the selected system. | |
| Ensure the query follows best practices, is optimized for performance, and works across multiple RDBMS like MySQL, PostgreSQL, SQLite, MSSQL, and Oracle. | |
| Additionally, support NoSQL databases such as MongoDB and Firebase by providing appropriate queries. | |
| If Pandas is selected, provide optimized Python code using Pandas functions. | |
| Output format: | |
| **Solution:** | |
| ```sql, NoSQL, or Python | |
| -- Query or Pandas code | |
| ``` | |
| **Explanation:** | |
| - Step-by-step breakdown of the logic. | |
| - Performance considerations and optimizations if applicable. | |
| - Compatibility notes for the selected system. | |
| """), | |
| ("human", """ | |
| Problem Statement: {sql_problem} | |
| Selected System: {db_type} | |
| """) | |
| ]) | |
| chat_model = ChatGoogleGenerativeAI(google_api_key=api_key, model='models/gemini-2.0-flash-exp') | |
| parser = StrOutputParser() | |
| chain = prompt_template | chat_model | parser | |
| def solve_problem(sql_problem, db_type): | |
| """Generates an AI-powered solution based on the selected system.""" | |
| try: | |
| response = chain.invoke({"sql_problem": sql_problem, "db_type": db_type}) | |
| return response if response else "No solution available." | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| # Streamlit UI | |
| st.title("🛠️ AI-Powered Data & Database Problem Solver") | |
| st.write("Enter a problem statement, select the system type (SQL, NoSQL, or Pandas), and AI will generate an optimized solution for you.") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| sql_problem = st.text_area("Problem Statement", placeholder="Describe your problem here...") | |
| uploaded_file = st.file_uploader("Upload a DOCX or PDF file", type=["pdf", "docx"]) | |
| if uploaded_file is not None: | |
| if uploaded_file.type == "application/pdf": | |
| sql_problem = read_pdf(uploaded_file) | |
| elif uploaded_file.type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document": | |
| sql_problem = read_docx(uploaded_file) | |
| st.success("File uploaded successfully!") | |
| with col2: | |
| db_type = st.selectbox("Select System Type", db_options) | |
| if st.button("Generate Solution") and sql_problem: | |
| with st.spinner("Generating solution..."): | |
| solution = solve_problem(sql_problem, db_type) | |
| st.subheader("AI-Generated Solution") | |
| st.markdown(solution, unsafe_allow_html=True) | |