Gradio / app.py
ajalisatgi's picture
Update app.py
31a10d7 verified
raw
history blame
4.15 kB
import gradio as gr
import openai
import os
from langchain.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.schema import Document
# Load the Sentence Transformer Embedding Model
model_name = "intfloat/e5-small"
embedding_model = HuggingFaceEmbeddings(model_name=model_name)
# Set up OpenAI API Key (Replace with your own API key)
openai.api_key = os.getenv("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") # Add in Hugging Face Secrets
# Load ChromaDB with RunGalileo Dataset
persist_directory = "./docs/chroma/"
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding_model)
from langchain_community.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.schema import Document
# Load the embedding model
model_name = "intfloat/e5-small"
embedding_model = HuggingFaceEmbeddings(model_name=model_name)
# Define the ChromaDB persist directory
persist_directory = "./docs/chroma/"
# Load ChromaDB (or create if empty)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding_model)
# Check if documents exist
if vectordb._collection.count() == 0:
print("⚠️ No documents found in ChromaDB. Re-indexing dataset...")
# Sample dataset (Replace with real RunGalileo dataset)
documents = [
Document(page_content="HVAC systems help regulate indoor temperature."),
Document(page_content="Chiller plants are used in large buildings for cooling."),
Document(page_content="BACnet is a common protocol for building automation."),
Document(page_content="Heat pumps are essential in modern energy-efficient HVAC designs."),
Document(page_content="Smart thermostats improve energy efficiency through AI-based control.")
]
# Insert documents into ChromaDB
vectordb.add_documents(documents)
print(" Documents successfully indexed into ChromaDB.")
else:
print(f" ChromaDB contains {vectordb._collection.count()} documents.")
# Function to Retrieve Top-K Relevant Documents
def retrieve_documents(question, k=5):
"""Retrieve top K relevant documents from ChromaDB"""
docs = vectordb.similarity_search(question, k=k)
if not docs:
return ["⚠️ No relevant documents found. Try a different query."]
return [doc.page_content for doc in docs]
# Function to Generate AI Response
import openai
def generate_response(question, context):
"""Generate AI response using OpenAI GPT-4"""
if not context or "No relevant documents found." in context:
return "No relevant context available. Try a different query."
full_prompt = f"Context: {context}\n\nQuestion: {question}"
try:
client = openai.OpenAI() # New OpenAI client format
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are an AI assistant that answers user queries based on the given context."},
{"role": "user", "content": full_prompt}
],
max_tokens=300,
temperature=0.7
)
return response.choices[0].message.content.strip()
except Exception as e:
return f"Error generating response: {str(e)}"
# Full RAG Pipeline
def rag_pipeline(question):
retrieved_docs = retrieve_documents(question, k=5)
context = " ".join(retrieved_docs)
response = generate_response(question, context)
return response, "\n\n".join(retrieved_docs)
# Gradio UI Interface
iface = gr.Interface(
fn=rag_pipeline,
inputs=gr.Textbox(label="Enter your question"),
outputs=[
gr.Textbox(label="Generated Response"),
gr.Textbox(label="Retrieved Documents")
],
title="RAG-Based Question Answering System ",
description="Enter a question and retrieve relevant documents with AI-generated response."
)
# ✅ Launch the Gradio App
if __name__ == "__main__":
iface.launch()