Geometry_Lesson / app.py
mayzinoo's picture
Update app.py
5e7d66d verified
raw
history blame
1.94 kB
import os
import zipfile
import gradio as gr
from langchain_openai import ChatOpenAI
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# Unzip vector DB if not already extracted
if not os.path.exists("geometry_chroma"):
with zipfile.ZipFile("geometry_chroma.zip", 'r') as zip_ref:
zip_ref.extractall(".")
# Load vector DB
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectordb = Chroma(persist_directory="geometry_chroma", embedding_function=embedding_model)
retriever = vectordb.as_retriever()
# Set OpenAI key (use Secrets or .env later)
os.environ["OPENAI_API_KEY"] = os.getenv("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")
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.2)
# Prompt templates
templates = {
"flashcard": PromptTemplate(
input_variables=["context", "query"],
template="""
{context}
Create 5 flashcards based on: "{query}"
Each card should have a question and short answer.
"""
)
}
def generate_output(prompt_type, query):
docs = retriever.get_relevant_documents(query)
context = "\n\n".join([doc.page_content for doc in docs])
chain = LLMChain(llm=llm, prompt=templates[prompt_type])
return chain.run({"context": context, "query": query})
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("# 📐 Geometry Assistant")
query = gr.Textbox(label="Enter a geometry topic")
prompt_type = gr.Dropdown(["flashcard"], value="flashcard", label="Prompt Type")
output = gr.Textbox(label="Generated Output", lines=12)
btn = gr.Button("Generate")
btn.click(fn=generate_output, inputs=[prompt_type, query], outputs=output)
demo.launch()