Spaces:
Sleeping
Sleeping
| 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() | |