forked from i-am-bee/beeai-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtravel_advisor.py
More file actions
79 lines (66 loc) · 3.03 KB
/
travel_advisor.py
File metadata and controls
79 lines (66 loc) · 3.03 KB
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
71
72
73
74
75
76
77
78
79
import asyncio
import sys
import traceback
from beeai_framework.backend import ChatModel
from beeai_framework.errors import FrameworkError
from beeai_framework.tools.search.duckduckgo import DuckDuckGoSearchTool
from beeai_framework.tools.weather import OpenMeteoTool
from beeai_framework.workflows.agent import AgentWorkflow, AgentWorkflowInput
async def main() -> None:
destination = ""
while not destination:
destination = input("Enter your travel destination (e.g., Boston, MA): ").strip()
travel_dates = ""
while not travel_dates:
travel_dates = input("Enter your travel dates (e.g., Mar 23-25, 2025): ").strip()
llm = ChatModel.from_name("ollama:llama3.1")
workflow = AgentWorkflow(name="Travel Advisor")
workflow.add_agent(
name="Weather Forecaster",
role="A diligent weather forecaster",
instructions="You specialize in reporting on the weather.",
tools=[OpenMeteoTool()],
llm=llm,
)
workflow.add_agent(
name="Activity Planner",
role="An expert in local attractions",
instructions="You know about interesting activities and would like to share.",
tools=[DuckDuckGoSearchTool()],
llm=llm,
)
workflow.add_agent(
name="Travel Advisor",
role="A travel advisor",
instructions="""You can synthesize travel details such as weather and recommended activities and provide a coherent summary.""", # noqa: E501
llm=llm,
)
response = await workflow.run(
inputs=[
AgentWorkflowInput(
prompt=f"Provide a comprehensive weather summary for '{destination}' from '{travel_dates}'.",
expected_output="Essential weather details such as chance of rain, temperature and wind. Only report information that is available.", # noqa: E501
),
AgentWorkflowInput(
prompt=f"Search for a set of activities close to '{destination}' from '{travel_dates}' that are appropriate in light of the weather conditions.", # noqa: E501
expected_output="A list of activities including location and description that are weather appropriate.",
),
AgentWorkflowInput(
prompt=f"Consider the weather report and recommended activities for the trip to '{destination}' from '{travel_dates}' and provide a coherent summary.", # noqa: E501
expected_output="A summary of the trip that the traveler could take with them. Break it down by day including weather, location and helpful tips.", # noqa: E501
),
]
).on(
"success",
lambda data, event: print(
f"-> Step '{data.step}' has been completed with the following outcome.\n\n{data.state.final_answer}"
),
)
print(":earth_africa: Travel Recommendations :earth_africa:")
print(response.state.final_answer)
if __name__ == "__main__":
try:
asyncio.run(main())
except FrameworkError as e:
traceback.print_exc()
sys.exit(e.explain())