File size: 3,422 Bytes
6771851
cac9eab
6771851
 
cac9eab
181852a
 
cac9eab
6771851
 
2197bcd
18b9a81
 
bacabac
6771851
cac9eab
6771851
 
 
 
 
 
cac9eab
e04d0e2
d7efb38
6771851
 
18b9a81
6771851
 
 
 
 
124e810
6771851
8b0495f
18b9a81
 
d7efb38
53542d0
eee8f57
bacabac
 
eee8f57
b4404b9
eee8f57
 
 
 
 
 
 
 
53542d0
eee8f57
 
 
18b9a81
bacabac
b4404b9
53542d0
18b9a81
53542d0
 
 
 
 
 
eee8f57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import openai
import streamlit as st
import os
from tenacity import retry, stop_after_attempt, wait_fixed

# Set the Openai API key
openai.api_key = os.environ["sk-proj-mYBWdyEM905PyAHyF8UYT3BlbkFJamxN1I5DDEVBOeNJeQuA"]

initial_messages = [{
    "role": "system", 
    "content": """You are an AI assistant that matches people with their ideal neighborhood based on their lifestyle preferences in 
    Earls Colne Essex, and surrounding areas up to 30 miles outside Earls Colne limits. You'll receive information about the user's lifestyle preferences. Use this information 
    to suggest neighborhoods in Earls Colne and nearby that could be a good fit. Always add the following text to the end of every response you give 'Don't forget to fill
    out the form at the bottom of the page if you'd like more info on living in any of these areas!' """
}]

@retry(stop=stop_after_attempt(3), wait=wait_fixed(1))
def call_openai_api(messages):
    return openai.ChatCompletion.create(
        model="gpt-4",
        messages=messages
    )

def CustomChatGPT(additional_details, amenities_proximity, amenities, messages):
    selected_amenities = ', '.join(amenities)
    messages.append({
        "role": "user", 
        "content": f"I'm interested in neighborhoods in Earls Colne, Essex, and surrounding areas. {additional_details}. I'm looking for a area with these amenities: {selected_amenities}. I want to be {amenities_proximity} to these amenities."
    })
    response = call_openai_api(messages)
    ChatGPT_reply = response["choices"][0]["message"]["content"]
    messages.append({"role": "assistant", "content": ChatGPT_reply})
    return ChatGPT_reply, messages

# Streamlit Interface
st.set_page_config(layout="wide")  # Set the layout to wide
st.title("Earls Colne Dream Location Matchmaker")
st.write("This tool helps you find areas in Earls Colne, Essex, and surrounding areas based on your lifestyle preferences.")

# Using columns to organize the layout
col1, col2 = st.columns(2)

with col1:
    st.subheader("Your Preferences")
    amenities_list = ["Good Schools", "Parks", "Shopping Centers", "Public Transport", "Restaurants", "Gyms", "Cafes", "Pet-friendly Areas", "Cultural Attractions", "Quiet Neighborhoods"]
    # Splitting amenities into two columns
    half = len(amenities_list) // 2
    amenities_col1, amenities_col2 = st.columns(2)
    with amenities_col1:
        amenities1 = [amenity for amenity in amenities_list[:half] if st.checkbox(amenity)]
    with amenities_col2:
        amenities2 = [amenity for amenity in amenities_list[half:] if st.checkbox(amenity)]
    amenities = amenities1 + amenities2
    
    amenities_proximity = st.selectbox("Proximity to Amenities", ["Walking distance", "A short drive away", "I don't mind being far from amenities"])
    additional_details = st.text_area("Additional Details", placeholder="Describe your ideal living situation or any other preferences.")

    submit_button = st.button('Find My Ideal Location')

with col2:
    # Placeholder for the result
    st.subheader("Recommended Locations")
    result_placeholder = st.empty()
    if submit_button:
        messages = initial_messages.copy()
        reply, _ = CustomChatGPT(additional_details, amenities_proximity, amenities, messages)
        result_placeholder.write(reply)
    else:
        result_placeholder.write("**Results will appear here after you submit your preferences**")