Spaces:
Runtime error
Runtime error
File size: 4,147 Bytes
16a6662 0ffe0e0 43d5a63 6cbadc6 16a6662 81bc43b 21ccc58 16a6662 026bcae 6cbadc6 0ffe0e0 81bc43b 0ffe0e0 81bc43b 0ffe0e0 81bc43b 6cbadc6 16a6662 4af7e0e 6cbadc6 16a6662 6cbadc6 0ffe0e0 6cbadc6 0ffe0e0 6cbadc6 0ffe0e0 16a6662 4af7e0e 16a6662 0ffe0e0 16a6662 4af7e0e 16a6662 6cbadc6 16a6662 6cbadc6 0ffe0e0 6cbadc6 0ffe0e0 6cbadc6 0ffe0e0 6cbadc6 4af7e0e 0ffe0e0 6cbadc6 0ffe0e0 6cbadc6 4af7e0e 6cbadc6 48fb909 6cbadc6 16a6662 4af7e0e 16a6662 6cbadc6 0ffe0e0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
import os
import streamlit as st
from PyPDF2 import PdfReader
import numpy as np
from groq import Groq
import faiss
import fitz
# Set up Groq API client
#groq_client = Groq(api_key="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")
def get_groq_client():
return Groq(api_key=os.environ.get("api_key"))
# Function to extract text from PDF
def extract_pdf_content(pdf_file):
doc = fitz.open(pdf_file)
content = ""
for page in doc:
content += page.get_text()
return content
# Function to split content into chunks
def chunk_text(text, chunk_size=500):
words = text.split()
return [" ".join(words[i:i + chunk_size]) for i in range(0, len(words), chunk_size)]
# Function to compute embeddings using Groq's Llama3-70B-8192 model
def compute_embeddings(text_chunks):
embeddings = []
for chunk in text_chunks:
response = groq_client.chat.completions.create(
messages=[{"role": "user", "content": chunk}],
model="llama3-70b-8192"
)
embeddings.append(np.array(response['choices'][0]['message']['content']))
return np.array(embeddings)
# Function to build FAISS index
def build_faiss_index(embeddings):
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension) # L2 distance for similarity
index.add(embeddings)
return index
# Function to search in FAISS index
def search_faiss_index(index, query_embedding, text_chunks, top_k=3):
distances, indices = index.search(query_embedding, top_k)
return [(text_chunks[idx], distances[0][i]) for i, idx in enumerate(indices[0])]
# Function to generate professional content using Groq's Llama3-70B-8192 model
def generate_professional_content_groq(topic):
response = groq_client.chat.completions.create(
messages=[{"role": "user", "content": f"Explain '{topic}' in bullet points, highlighting key concepts, examples, and applications for electrical engineering students."}],
model="llama3-70b-8192"
)
return response['choices'][0]['message']['content'].strip()
# Function to compute query embedding using Groq's Llama3-70B-8192 model
def compute_query_embedding(query):
response = groq_client.chat.completions.create(
messages=[{"role": "user", "content": query}],
model="llama3-70b-8192"
)
return np.array(response['choices'][0]['message']['content']).reshape(1, -1)
# Streamlit app
st.title("Generative AI for Electrical Engineering Education with FAISS and Groq")
st.sidebar.header("AI-Based Tutor with Vector Search")
# File upload section
uploaded_file = st.sidebar.file_uploader("Upload Study Material (PDF)", type=["pdf"])
topic = st.sidebar.text_input("Enter a topic (e.g., Newton's Third Law)")
if uploaded_file:
# Extract and process file content
content = extract_pdf_content(uploaded_file)
st.sidebar.success(f"{uploaded_file.name} uploaded successfully!")
# Chunk and compute embeddings
chunks = chunk_text(content)
embeddings = compute_embeddings(chunks)
# Build FAISS index
index = build_faiss_index(embeddings)
st.write("**File Processed and Indexed for Search**")
st.write(f"Total chunks created: {len(chunks)}")
# Generate study material
if st.button("Generate Study Material"):
if topic:
st.header(f"Study Material: {topic}")
# Compute query embedding
query_embedding = compute_query_embedding(topic)
# Search FAISS index
if uploaded_file:
results = search_faiss_index(index, query_embedding, chunks, top_k=3)
st.write("**Relevant Content from Uploaded File:**")
for result, distance in results:
st.write(f"- {result} (Similarity: {distance:.2f})")
else:
st.warning("No file uploaded. Generating AI-based content instead.")
# Generate content using Groq's Llama3-70B-8192 model
ai_content = generate_professional_content_groq(topic)
st.write("**AI-Generated Content (Groq - Llama3-70B-8192):**")
st.write(ai_content)
else:
st.warning("Please enter a topic!")
|