| | from crewai import Agent |
| | import re |
| | import streamlit as st |
| | from langchain_community.llms import OpenAI |
| |
|
| | from tools.browser_tools import BrowserTools |
| | from tools.calculator_tools import CalculatorTools |
| | from tools.search_tools import SearchTools |
| | from crewai.llm import LLM |
| |
|
| | model_kwargs = { |
| | "model": f"openai/{st.secrets['MODEL_ID']}", |
| | "base_url": st.secrets["MODEL_BASE_URL"], |
| | "api_key": st.secrets["OPENAI_API_KEY"] |
| | } |
| | llm = LLM(**model_kwargs) |
| |
|
| |
|
| | class TripAgents(): |
| |
|
| | def city_selection_agent(self): |
| | return Agent( |
| | role='City Selection Expert', |
| | goal='Select the best city based on weather, season, and prices', |
| | backstory='An expert in analyzing travel data to pick ideal destinations', |
| | tools=[ |
| | SearchTools.search_internet, |
| | BrowserTools.scrape_and_summarize_website, |
| | ], |
| | verbose=True, |
| | llm=llm |
| | |
| | ) |
| |
|
| | def local_expert(self): |
| | return Agent( |
| | role='Local Expert at this city', |
| | goal='Provide the BEST insights about the selected city', |
| | backstory="""A knowledgeable local guide with extensive information |
| | about the city, it's attractions and customs""", |
| | tools=[ |
| | SearchTools.search_internet, |
| | BrowserTools.scrape_and_summarize_website, |
| | ], |
| | verbose=True, |
| | llm=llm |
| | |
| | ) |
| |
|
| | def travel_concierge(self): |
| | return Agent( |
| | role='Amazing Travel Concierge', |
| | goal="""Create the most amazing travel itineraries with budget and |
| | packing suggestions for the city""", |
| | backstory="""Specialist in travel planning and logistics with |
| | decades of experience""", |
| | tools=[ |
| | SearchTools.search_internet, |
| | BrowserTools.scrape_and_summarize_website, |
| | CalculatorTools.calculate, |
| | ], |
| | verbose=True, |
| | llm=llm |
| | |
| | ) |
| |
|
| | class StreamToExpander: |
| | def __init__(self, expander): |
| | self.expander = expander |
| | self.buffer = [] |
| | self.colors = ['red', 'green', 'blue', 'orange'] |
| | self.color_index = 0 |
| |
|
| | def write(self, data): |
| | |
| | cleaned_data = re.sub(r'\x1B\[[0-9;]*[mK]', '', data) |
| |
|
| | |
| | task_match_object = re.search(r'\"task\"\s*:\s*\"(.*?)\"', cleaned_data, re.IGNORECASE) |
| | task_match_input = re.search(r'task\s*:\s*([^\n]*)', cleaned_data, re.IGNORECASE) |
| | task_value = None |
| | if task_match_object: |
| | task_value = task_match_object.group(1) |
| | elif task_match_input: |
| | task_value = task_match_input.group(1).strip() |
| |
|
| | if task_value: |
| | st.toast(":robot_face: " + task_value) |
| |
|
| | |
| | if "Entering new CrewAgentExecutor chain" in cleaned_data: |
| | |
| | self.color_index = (self.color_index + 1) % len(self.colors) |
| |
|
| | cleaned_data = cleaned_data.replace("Entering new CrewAgentExecutor chain", f":{self.colors[self.color_index]}[Entering new CrewAgentExecutor chain]") |
| |
|
| | if "City Selection Expert" in cleaned_data: |
| | |
| | cleaned_data = cleaned_data.replace("City Selection Expert", f":{self.colors[self.color_index]}[City Selection Expert]") |
| | if "Local Expert at this city" in cleaned_data: |
| | cleaned_data = cleaned_data.replace("Local Expert at this city", f":{self.colors[self.color_index]}[Local Expert at this city]") |
| | if "Amazing Travel Concierge" in cleaned_data: |
| | cleaned_data = cleaned_data.replace("Amazing Travel Concierge", f":{self.colors[self.color_index]}[Amazing Travel Concierge]") |
| | if "Finished chain." in cleaned_data: |
| | cleaned_data = cleaned_data.replace("Finished chain.", f":{self.colors[self.color_index]}[Finished chain.]") |
| |
|
| | self.buffer.append(cleaned_data) |
| | if "\n" in data: |
| | self.expander.markdown(''.join(self.buffer), unsafe_allow_html=True) |
| | self.buffer = [] |
| |
|