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