from crewai import Agent, Crew, Process, Task, LLM from crewai.project import CrewBase, agent, crew, task # Uncomment the following line to use an example of a custom tool # from surprise_travel.tools.custom_tool import MyCustomTool # Check our tools documentation for more information on how to use them from crewai_tools import SerperDevTool, ScrapeWebsiteTool #from pydantic import BaseModel, Field from typing import List, Optional import os llm = LLM(model="sambanova/Meta-Llama-3.1-70B-Instruct") """ class Activity(BaseModel): name: str = Field(..., description="Name of the activity") location: str = Field(..., description="Location of the activity") description: str = Field(..., description="Description of the activity") date: str = Field(..., description="Date of the activity") cousine: str = Field(..., description="Cousine of the restaurant") why_its_suitable: str = Field(..., description="Why it's suitable for the traveler") reviews: Optional[List[str]] = Field(..., description="List of reviews") rating: Optional[float] = Field(..., description="Rating of the activity") class DayPlan(BaseModel): date: str = Field(..., description="Date of the day") activities: List[Activity] = Field(..., description="List of activities") restaurants: List[str] = Field(..., description="List of restaurants") flight: Optional[str] = Field(None, description="Flight information") class Itinerary(BaseModel): name: str = Field(..., description="Name of the itinerary, something funny") day_plans: List[DayPlan] = Field(..., description="List of day plans") hotel: str = Field(..., description="Hotel information") """ @CrewBase class SurpriseTravelCrew(): """SurpriseTravel crew""" agents_config = 'config/agents.yaml' tasks_config = 'config/tasks.yaml' @agent def personalized_activity_planner(self) -> Agent: return Agent( config=self.agents_config['personalized_activity_planner'], llm=llm, max_iter=1, tools=[SerperDevTool(), ScrapeWebsiteTool()], # Example of custom tool, loaded at the beginning of file verbose=True, allow_delegation=False, ) @agent def restaurant_scout(self) -> Agent: return Agent( config=self.agents_config['restaurant_scout'], llm=llm, max_iter=1, tools=[SerperDevTool(), ScrapeWebsiteTool()], verbose=True, allow_delegation=False, ) @agent def itinerary_compiler(self) -> Agent: return Agent( config=self.agents_config['itinerary_compiler'], llm=llm, max_iter=1, verbose=True, allow_delegation=False, ) @task def personalized_activity_planning_task(self) -> Task: return Task( config=self.tasks_config['personalized_activity_planning_task'], llm=llm, max_iter=1, agent=self.personalized_activity_planner() ) @task def restaurant_scenic_location_scout_task(self) -> Task: return Task( config=self.tasks_config['restaurant_scenic_location_scout_task'], llm=llm, max_iter=1, agent=self.restaurant_scout() ) @task def itinerary_compilation_task(self) -> Task: return Task( config=self.tasks_config['itinerary_compilation_task'], llm=llm, max_iter=1, agent=self.itinerary_compiler(), # output_json=Itinerary ) @crew def crew(self) -> Crew: """Creates the SurpriseTravel crew""" return Crew( agents=self.agents, # Automatically created by the @agent decorator tasks=self.tasks, # Automatically created by the @task decorator process=Process.sequential, verbose=True, # process=Process.hierarchical, # In case you want to use that instead https://docs.crewai.com/how-to/Hierarchical/ )