Reat_Estate_App / app.py
Waseem7711's picture
Update app.py
bd7e578 verified
raw
history blame contribute delete
No virus
2.57 kB
import streamlit as st
from transformers import RagTokenizer, RagRetriever, RagTokenForGeneration, DPRQuestionEncoder, DPRQuestionEncoderTokenizer
import torch
import faiss
import numpy as np
# Streamlit app layout
st.title("Real Estate Recommendation System")
st.write("Use this app to predict property values, rent prices, and find matching properties for potential buyers.")
# Load models function
@st.cache_resource
def load_models():
try:
# Load RAG model components
rag_tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq")
rag_retriever = RagRetriever.from_pretrained("facebook/rag-token-nq", index_name="exact", use_dummy_dataset=True)
rag_model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq", retriever=rag_retriever)
# Load DPR components for question encoding
dpr_tokenizer = DPRQuestionEncoderTokenizer.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
dpr_model = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base")
return rag_tokenizer, rag_retriever, rag_model, dpr_tokenizer, dpr_model
except Exception as e:
st.error(f"Error loading models: {e}")
st.stop()
# Load models
rag_tokenizer, rag_retriever, rag_model, dpr_tokenizer, dpr_model = load_models()
# User input for property details
st.sidebar.header("Enter Property Details:")
property_location = st.sidebar.text_input("Property Location", "San Francisco, CA")
property_size = st.sidebar.number_input("Property Size (sq ft)", 500, 10000, 1500)
bedrooms = st.sidebar.number_input("Number of Bedrooms", 1, 10, 3)
bathrooms = st.sidebar.number_input("Number of Bathrooms", 1, 5, 2)
budget = st.sidebar.number_input("Buyer's Budget ($)", 50000, 10000000, 500000)
# Property query
query = f"Find properties in {property_location} with {bedrooms} bedrooms, {bathrooms} bathrooms, and approximately {property_size} sq ft."
# Encoding the query using DPR
input_ids = dpr_tokenizer(query, return_tensors="pt")["input_ids"]
embeddings = dpr_model(input_ids).pooler_output
# Display the query
st.write(f"### Query: {query}")
# Using the RAG model for generating recommendations
rag_input_dict = rag_tokenizer.prepare_seq2seq_batch(query, return_tensors="pt")
generated_ids = rag_model.generate(input_ids=rag_input_dict["input_ids"], num_beams=2, max_length=100)
output = rag_tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
# Display the recommendations
st.write("### Recommended Properties:")
st.write(output)