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