AITutor / app.py
sairaarif89's picture
Create app.py
ac871ea verified
# app.py
import streamlit as st
import google.generativeai as genai
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from io import StringIO
# Configure Gemini API
GEMINI_API_KEY = "YOUR_GEMINI_API_KEY" # Replace with your Gemini API key
genai.configure(api_key=GEMINI_API_KEY)
# Function to load and index documents from an uploaded file
def load_and_index_documents(uploaded_file):
# Read the uploaded file
file_content = uploaded_file.read().decode("utf-8")
# Use StringIO to simulate a file object for TextLoader
file_like = StringIO(file_content)
loader = TextLoader(file_like)
documents = loader.load()
# Split documents into chunks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)
# Create embeddings and vector store
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vector_store = FAISS.from_documents(texts, embeddings)
return vector_store.as_retriever(search_kwargs={"k": 3})
# Generate answer using Gemini
def generate_answer(query, retriever):
relevant_docs = retriever.get_relevant_documents(query)
context = "\n".join([doc.page_content for doc in relevant_docs])
prompt = f"""
You are an AI tutor. Answer the following question based on the provided context:
Question: {query}
Context: {context}
Answer:
"""
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content(prompt)
return response.text
# Streamlit app
st.title("AI Tutor")
st.write("Upload a file and ask me anything!")
# File uploader
uploaded_file = st.file_uploader("Upload a text or PDF file", type=["txt", "pdf"])
# Initialize retriever
retriever = None
if uploaded_file is not None:
retriever = load_and_index_documents(uploaded_file)
st.success("File uploaded and processed successfully!")
# Input from user
user_query = st.text_input("Enter your question:")
# Generate and display answer
if user_query and retriever:
answer = generate_answer(user_query, retriever)
st.write("Answer:")
st.write(answer)
elif user_query and not retriever:
st.warning("Please upload a file first!")