from crewai import Crew
from trip_agents import TripAgents, StreamToExpander
from trip_tasks import TripTasks
import streamlit as st
import datetime
import sys
st.set_page_config(page_icon="✈️", layout="wide")
def icon(emoji: str):
"""Shows an emoji as a Notion-style page icon."""
st.write(
f'{emoji}',
unsafe_allow_html=True,
)
class TripCrew:
def __init__(self, origin, cities, date_range, interests):
self.cities = cities
self.origin = origin
self.interests = interests
self.date_range = date_range
self.output_placeholder = st.empty()
def run(self):
agents = TripAgents()
tasks = TripTasks()
city_selector_agent = agents.city_selection_agent()
local_expert_agent = agents.local_expert()
travel_concierge_agent = agents.travel_concierge()
identify_task = tasks.identify_task(
city_selector_agent,
self.origin,
self.cities,
self.interests,
self.date_range
)
gather_task = tasks.gather_task(
local_expert_agent,
self.origin,
self.interests,
self.date_range
)
plan_task = tasks.plan_task(
travel_concierge_agent,
self.origin,
self.interests,
self.date_range
)
crew = Crew(
agents=[
city_selector_agent, local_expert_agent, travel_concierge_agent
],
tasks=[identify_task, gather_task, plan_task],
verbose=True
)
result = crew.kickoff()
self.output_placeholder.markdown(result)
return result
if __name__ == "__main__":
icon("🏖️ VacAIgent")
st.subheader("Let AI agents plan your next vacation!",
divider="rainbow", anchor=False)
import datetime
today = datetime.datetime.now().date()
next_year = today.year + 1
jan_16_next_year = datetime.date(next_year, 1, 10)
with st.sidebar:
st.header("👇 Enter your trip details")
with st.form("my_form"):
location = st.text_input(
"Where are you currently located?", placeholder="San Mateo, CA")
cities = st.text_input(
"City and country are you interested in vacationing at?", placeholder="Bali, Indonesia")
date_range = st.date_input(
"Date range you are interested in traveling?",
min_value=today,
value=(today, jan_16_next_year + datetime.timedelta(days=6)),
format="MM/DD/YYYY",
)
interests = st.text_area("High level interests and hobbies or extra details about your trip?",
placeholder="2 adults who love swimming, dancing, hiking, and eating")
submitted = st.form_submit_button("Submit")
st.divider()
# Credits to joaomdmoura/CrewAI for the code: https://github.com/joaomdmoura/crewAI
st.sidebar.markdown(
"""
Credits to [**@joaomdmoura**](https://twitter.com/joaomdmoura)
for creating **crewAI** 🚀
""",
unsafe_allow_html=True
)
st.sidebar.info("Click the logo to visit GitHub repo", icon="👇")
st.sidebar.markdown(
"""
""",
unsafe_allow_html=True
)
if submitted:
with st.status("🤖 **Agents at work...**", state="running", expanded=True) as status:
with st.container(height=500, border=False):
sys.stdout = StreamToExpander(st)
trip_crew = TripCrew(location, cities, date_range, interests)
result = trip_crew.run()
status.update(label="✅ Trip Plan Ready!",
state="complete", expanded=False)
st.subheader("Here is your Trip Plan", anchor=False, divider="rainbow")
st.markdown(result)