Spaces:
Sleeping
Sleeping
File size: 1,939 Bytes
573a91c 5e7d66d 573a91c | 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 | 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()
|