AICopyCC's picture
Update app.py
181852a verified
raw
history blame contribute delete
No virus
3.42 kB
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**")