From ab2274caf079014a3e6771fcdb37a0b14de29868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moura?= Date: Mon, 20 Jan 2025 13:30:09 -0300 Subject: [PATCH 01/43] Stateful flows (#1931) * fix: ensure persisted state overrides class defaults - Remove early return in Flow.__init__ to allow proper state initialization - Add test_flow_default_override.py to verify state override behavior - Fix issue where default values weren't being overridden by persisted state Fixes the issue where persisted state values weren't properly overriding class defaults when restarting a flow with a previously saved state ID. Co-Authored-By: Joe Moura * test: improve state restoration verification with has_set_count flag Co-Authored-By: Joe Moura * test: add has_set_count field to PoemState Co-Authored-By: Joe Moura * refactoring test * fix: ensure persisted state overrides class defaults - Remove early return in Flow.__init__ to allow proper state initialization - Add test_flow_default_override.py to verify state override behavior - Fix issue where default values weren't being overridden by persisted state Fixes the issue where persisted state values weren't properly overriding class defaults when restarting a flow with a previously saved state ID. Co-Authored-By: Joe Moura * test: improve state restoration verification with has_set_count flag Co-Authored-By: Joe Moura * test: add has_set_count field to PoemState Co-Authored-By: Joe Moura * refactoring test * Fixing flow state * fixing peristed stateful flows * linter * type fix --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura --- src/crewai/flow/flow.py | 120 +++++++--------- src/crewai/flow/persistence/decorators.py | 126 ++++++++++------- src/crewai/flow/persistence/sqlite.py | 37 +++-- .../storage/kickoff_task_outputs_storage.py | 2 +- .../memory/storage/ltm_sqlite_storage.py | 2 +- src/crewai/utilities/paths.py | 6 +- src/crewai/utilities/printer.py | 25 ++++ tests/test_flow_default_override.py | 112 +++++++++++++++ tests/test_flow_persistence.py | 131 ++++++++---------- 9 files changed, 339 insertions(+), 222 deletions(-) create mode 100644 tests/test_flow_default_override.py diff --git a/src/crewai/flow/flow.py b/src/crewai/flow/flow.py index 6dcc37e40..b744ba6ad 100644 --- a/src/crewai/flow/flow.py +++ b/src/crewai/flow/flow.py @@ -447,14 +447,12 @@ class Flow(Generic[T], metaclass=FlowMeta): def __init__( self, persistence: Optional[FlowPersistence] = None, - restore_uuid: Optional[str] = None, **kwargs: Any, ) -> None: """Initialize a new Flow instance. Args: persistence: Optional persistence backend for storing flow states - restore_uuid: Optional UUID to restore state from persistence **kwargs: Additional state values to initialize or override """ # Initialize basic instance attributes @@ -464,64 +462,12 @@ class Flow(Generic[T], metaclass=FlowMeta): self._method_outputs: List[Any] = [] # List to store all method outputs self._persistence: Optional[FlowPersistence] = persistence - # Validate state model before initialization - if isinstance(self.initial_state, type): - if issubclass(self.initial_state, BaseModel) and not issubclass( - self.initial_state, FlowState - ): - # Check if model has id field - model_fields = getattr(self.initial_state, "model_fields", None) - if not model_fields or "id" not in model_fields: - raise ValueError("Flow state model must have an 'id' field") + # Initialize state with initial values + self._state = self._create_initial_state() - # Handle persistence and potential ID conflicts - stored_state = None - if self._persistence is not None: - if ( - restore_uuid - and kwargs - and "id" in kwargs - and restore_uuid != kwargs["id"] - ): - raise ValueError( - f"Conflicting IDs provided: restore_uuid='{restore_uuid}' " - f"vs kwargs['id']='{kwargs['id']}'. Use only one ID for restoration." - ) - - # Attempt to load state, prioritizing restore_uuid - if restore_uuid: - self._log_flow_event(f"Loading flow state from memory for UUID: {restore_uuid}", color="bold_yellow") - stored_state = self._persistence.load_state(restore_uuid) - if not stored_state: - raise ValueError( - f"No state found for restore_uuid='{restore_uuid}'" - ) - elif kwargs and "id" in kwargs: - self._log_flow_event(f"Loading flow state from memory for ID: {kwargs['id']}", color="bold_yellow") - stored_state = self._persistence.load_state(kwargs["id"]) - if not stored_state: - # For kwargs["id"], we allow creating new state if not found - self._state = self._create_initial_state() - if kwargs: - self._initialize_state(kwargs) - return - - # Initialize state based on persistence and kwargs - if stored_state: - # Create initial state and restore from persistence - self._state = self._create_initial_state() - self._restore_state(stored_state) - # Apply any additional kwargs to override specific fields - if kwargs: - filtered_kwargs = {k: v for k, v in kwargs.items() if k != "id"} - if filtered_kwargs: - self._initialize_state(filtered_kwargs) - else: - # No stored state, create new state with initial values - self._state = self._create_initial_state() - # Apply any additional kwargs - if kwargs: - self._initialize_state(kwargs) + # Apply any additional kwargs + if kwargs: + self._initialize_state(kwargs) self._telemetry.flow_creation_span(self.__class__.__name__) @@ -635,18 +581,18 @@ class Flow(Generic[T], metaclass=FlowMeta): @property def flow_id(self) -> str: """Returns the unique identifier of this flow instance. - + This property provides a consistent way to access the flow's unique identifier regardless of the underlying state implementation (dict or BaseModel). - + Returns: str: The flow's unique identifier, or an empty string if not found - + Note: This property safely handles both dictionary and BaseModel state types, returning an empty string if the ID cannot be retrieved rather than raising an exception. - + Example: ```python flow = MyFlow() @@ -656,7 +602,7 @@ class Flow(Generic[T], metaclass=FlowMeta): try: if not hasattr(self, '_state'): return "" - + if isinstance(self._state, dict): return str(self._state.get("id", "")) elif isinstance(self._state, BaseModel): @@ -731,7 +677,6 @@ class Flow(Generic[T], metaclass=FlowMeta): """ # When restoring from persistence, use the stored ID stored_id = stored_state.get("id") - self._log_flow_event(f"Restoring flow state from memory for ID: {stored_id}", color="bold_yellow") if not stored_id: raise ValueError("Stored state must have an 'id' field") @@ -755,6 +700,36 @@ class Flow(Generic[T], metaclass=FlowMeta): raise TypeError(f"State must be dict or BaseModel, got {type(self._state)}") def kickoff(self, inputs: Optional[Dict[str, Any]] = None) -> Any: + """Start the flow execution. + + Args: + inputs: Optional dictionary containing input values and potentially a state ID to restore + """ + # Handle state restoration if ID is provided in inputs + if inputs and 'id' in inputs and self._persistence is not None: + restore_uuid = inputs['id'] + stored_state = self._persistence.load_state(restore_uuid) + + # Override the id in the state if it exists in inputs + if 'id' in inputs: + if isinstance(self._state, dict): + self._state['id'] = inputs['id'] + elif isinstance(self._state, BaseModel): + setattr(self._state, 'id', inputs['id']) + + if stored_state: + self._log_flow_event(f"Loading flow state from memory for UUID: {restore_uuid}", color="yellow") + # Restore the state + self._restore_state(stored_state) + else: + self._log_flow_event(f"No flow state found for UUID: {restore_uuid}", color="red") + + # Apply any additional inputs after restoration + filtered_inputs = {k: v for k, v in inputs.items() if k != 'id'} + if filtered_inputs: + self._initialize_state(filtered_inputs) + + # Start flow execution self.event_emitter.send( self, event=FlowStartedEvent( @@ -762,10 +737,11 @@ class Flow(Generic[T], metaclass=FlowMeta): flow_name=self.__class__.__name__, ), ) - self._log_flow_event(f"Flow started with ID: {self.flow_id}", color="yellow") + self._log_flow_event(f"Flow started with ID: {self.flow_id}", color="bold_magenta") - if inputs is not None: + if inputs is not None and 'id' not in inputs: self._initialize_state(inputs) + return asyncio.run(self.kickoff_async()) async def kickoff_async(self, inputs: Optional[Dict[str, Any]] = None) -> Any: @@ -1010,18 +986,18 @@ class Flow(Generic[T], metaclass=FlowMeta): def _log_flow_event(self, message: str, color: str = "yellow", level: str = "info") -> None: """Centralized logging method for flow events. - + This method provides a consistent interface for logging flow-related events, combining both console output with colors and proper logging levels. - + Args: message: The message to log color: Color to use for console output (default: yellow) Available colors: purple, red, bold_green, bold_purple, - bold_blue, yellow, bold_yellow + bold_blue, yellow, yellow level: Log level to use (default: info) Supported levels: info, warning - + Note: This method uses the Printer utility for colored console output and the standard logging module for log level support. @@ -1031,7 +1007,7 @@ class Flow(Generic[T], metaclass=FlowMeta): logger.info(message) elif level == "warning": logger.warning(message) - + def plot(self, filename: str = "crewai_flow") -> None: self._telemetry.flow_plotting_span( self.__class__.__name__, list(self._methods.keys()) diff --git a/src/crewai/flow/persistence/decorators.py b/src/crewai/flow/persistence/decorators.py index 58cf1e111..ebf3778b7 100644 --- a/src/crewai/flow/persistence/decorators.py +++ b/src/crewai/flow/persistence/decorators.py @@ -54,57 +54,44 @@ LOG_MESSAGES = { class PersistenceDecorator: """Class to handle flow state persistence with consistent logging.""" - + _printer = Printer() # Class-level printer instance - + @classmethod def persist_state(cls, flow_instance: Any, method_name: str, persistence_instance: FlowPersistence) -> None: """Persist flow state with proper error handling and logging. - + This method handles the persistence of flow state data, including proper error handling and colored console output for status updates. - + Args: flow_instance: The flow instance whose state to persist method_name: Name of the method that triggered persistence persistence_instance: The persistence backend to use - + Raises: ValueError: If flow has no state or state lacks an ID RuntimeError: If state persistence fails AttributeError: If flow instance lacks required state attributes - - Note: - Uses bold_yellow color for success messages and red for errors. - All operations are logged at appropriate levels (info/error). - - Example: - ```python - @persist - def my_flow_method(self): - # Method implementation - pass - # State will be automatically persisted after method execution - ``` """ try: state = getattr(flow_instance, 'state', None) if state is None: raise ValueError("Flow instance has no state") - + flow_uuid: Optional[str] = None if isinstance(state, dict): flow_uuid = state.get('id') elif isinstance(state, BaseModel): flow_uuid = getattr(state, 'id', None) - + if not flow_uuid: raise ValueError("Flow state must have an 'id' field for persistence") - + # Log state saving with consistent message - cls._printer.print(LOG_MESSAGES["save_state"].format(flow_uuid), color="bold_yellow") + cls._printer.print(LOG_MESSAGES["save_state"].format(flow_uuid), color="cyan") logger.info(LOG_MESSAGES["save_state"].format(flow_uuid)) - + try: persistence_instance.save_state( flow_uuid=flow_uuid, @@ -154,44 +141,79 @@ def persist(persistence: Optional[FlowPersistence] = None): def begin(self): pass """ + def decorator(target: Union[Type, Callable[..., T]]) -> Union[Type, Callable[..., T]]: """Decorator that handles both class and method decoration.""" actual_persistence = persistence or SQLiteFlowPersistence() if isinstance(target, type): # Class decoration - class_methods = {} - for name, method in target.__dict__.items(): - if callable(method) and hasattr(method, "__is_flow_method__"): - # Wrap each flow method with persistence - if asyncio.iscoroutinefunction(method): - @functools.wraps(method) - async def class_async_wrapper(self: Any, *args: Any, **kwargs: Any) -> Any: - method_coro = method(self, *args, **kwargs) - if asyncio.iscoroutine(method_coro): - result = await method_coro - else: - result = method_coro - PersistenceDecorator.persist_state(self, method.__name__, actual_persistence) - return result - class_methods[name] = class_async_wrapper - else: - @functools.wraps(method) - def class_sync_wrapper(self: Any, *args: Any, **kwargs: Any) -> Any: - result = method(self, *args, **kwargs) - PersistenceDecorator.persist_state(self, method.__name__, actual_persistence) - return result - class_methods[name] = class_sync_wrapper + original_init = getattr(target, "__init__") - # Preserve flow-specific attributes + @functools.wraps(original_init) + def new_init(self: Any, *args: Any, **kwargs: Any) -> None: + if 'persistence' not in kwargs: + kwargs['persistence'] = actual_persistence + original_init(self, *args, **kwargs) + + setattr(target, "__init__", new_init) + + # Store original methods to preserve their decorators + original_methods = {} + + for name, method in target.__dict__.items(): + if callable(method) and ( + hasattr(method, "__is_start_method__") or + hasattr(method, "__trigger_methods__") or + hasattr(method, "__condition_type__") or + hasattr(method, "__is_flow_method__") or + hasattr(method, "__is_router__") + ): + original_methods[name] = method + + # Create wrapped versions of the methods that include persistence + for name, method in original_methods.items(): + if asyncio.iscoroutinefunction(method): + # Create a closure to capture the current name and method + def create_async_wrapper(method_name: str, original_method: Callable): + @functools.wraps(original_method) + async def method_wrapper(self: Any, *args: Any, **kwargs: Any) -> Any: + result = await original_method(self, *args, **kwargs) + PersistenceDecorator.persist_state(self, method_name, actual_persistence) + return result + return method_wrapper + + wrapped = create_async_wrapper(name, method) + + # Preserve all original decorators and attributes for attr in ["__is_start_method__", "__trigger_methods__", "__condition_type__", "__is_router__"]: if hasattr(method, attr): - setattr(class_methods[name], attr, getattr(method, attr)) - setattr(class_methods[name], "__is_flow_method__", True) + setattr(wrapped, attr, getattr(method, attr)) + setattr(wrapped, "__is_flow_method__", True) + + # Update the class with the wrapped method + setattr(target, name, wrapped) + else: + # Create a closure to capture the current name and method + def create_sync_wrapper(method_name: str, original_method: Callable): + @functools.wraps(original_method) + def method_wrapper(self: Any, *args: Any, **kwargs: Any) -> Any: + result = original_method(self, *args, **kwargs) + PersistenceDecorator.persist_state(self, method_name, actual_persistence) + return result + return method_wrapper + + wrapped = create_sync_wrapper(name, method) + + # Preserve all original decorators and attributes + for attr in ["__is_start_method__", "__trigger_methods__", "__condition_type__", "__is_router__"]: + if hasattr(method, attr): + setattr(wrapped, attr, getattr(method, attr)) + setattr(wrapped, "__is_flow_method__", True) + + # Update the class with the wrapped method + setattr(target, name, wrapped) - # Update class with wrapped methods - for name, method in class_methods.items(): - setattr(target, name, method) return target else: # Method decoration @@ -208,6 +230,7 @@ def persist(persistence: Optional[FlowPersistence] = None): result = method_coro PersistenceDecorator.persist_state(flow_instance, method.__name__, actual_persistence) return result + for attr in ["__is_start_method__", "__trigger_methods__", "__condition_type__", "__is_router__"]: if hasattr(method, attr): setattr(method_async_wrapper, attr, getattr(method, attr)) @@ -219,6 +242,7 @@ def persist(persistence: Optional[FlowPersistence] = None): result = method(flow_instance, *args, **kwargs) PersistenceDecorator.persist_state(flow_instance, method.__name__, actual_persistence) return result + for attr in ["__is_start_method__", "__trigger_methods__", "__condition_type__", "__is_router__"]: if hasattr(method, attr): setattr(method_sync_wrapper, attr, getattr(method, attr)) diff --git a/src/crewai/flow/persistence/sqlite.py b/src/crewai/flow/persistence/sqlite.py index bdd091b2b..7a6f134fa 100644 --- a/src/crewai/flow/persistence/sqlite.py +++ b/src/crewai/flow/persistence/sqlite.py @@ -3,10 +3,9 @@ SQLite-based implementation of flow state persistence. """ import json -import os import sqlite3 -import tempfile from datetime import datetime +from pathlib import Path from typing import Any, Dict, Optional, Union from pydantic import BaseModel @@ -16,34 +15,34 @@ from crewai.flow.persistence.base import FlowPersistence class SQLiteFlowPersistence(FlowPersistence): """SQLite-based implementation of flow state persistence. - + This class provides a simple, file-based persistence implementation using SQLite. It's suitable for development and testing, or for production use cases with moderate performance requirements. """ - + db_path: str # Type annotation for instance variable - + def __init__(self, db_path: Optional[str] = None): """Initialize SQLite persistence. - + Args: db_path: Path to the SQLite database file. If not provided, uses db_storage_path() from utilities.paths. - + Raises: ValueError: If db_path is invalid """ from crewai.utilities.paths import db_storage_path # Get path from argument or default location - path = db_path or db_storage_path() - + path = db_path or str(Path(db_storage_path()) / "flow_states.db") + if not path: raise ValueError("Database path must be provided") - + self.db_path = path # Now mypy knows this is str self.init_db() - + def init_db(self) -> None: """Create the necessary tables if they don't exist.""" with sqlite3.connect(self.db_path) as conn: @@ -58,10 +57,10 @@ class SQLiteFlowPersistence(FlowPersistence): """) # Add index for faster UUID lookups conn.execute(""" - CREATE INDEX IF NOT EXISTS idx_flow_states_uuid + CREATE INDEX IF NOT EXISTS idx_flow_states_uuid ON flow_states(flow_uuid) """) - + def save_state( self, flow_uuid: str, @@ -69,7 +68,7 @@ class SQLiteFlowPersistence(FlowPersistence): state_data: Union[Dict[str, Any], BaseModel], ) -> None: """Save the current flow state to SQLite. - + Args: flow_uuid: Unique identifier for the flow instance method_name: Name of the method that just completed @@ -84,7 +83,7 @@ class SQLiteFlowPersistence(FlowPersistence): raise ValueError( f"state_data must be either a Pydantic BaseModel or dict, got {type(state_data)}" ) - + with sqlite3.connect(self.db_path) as conn: conn.execute(""" INSERT INTO flow_states ( @@ -99,13 +98,13 @@ class SQLiteFlowPersistence(FlowPersistence): datetime.utcnow().isoformat(), json.dumps(state_dict), )) - + def load_state(self, flow_uuid: str) -> Optional[Dict[str, Any]]: """Load the most recent state for a given flow UUID. - + Args: flow_uuid: Unique identifier for the flow instance - + Returns: The most recent state as a dictionary, or None if no state exists """ @@ -118,7 +117,7 @@ class SQLiteFlowPersistence(FlowPersistence): LIMIT 1 """, (flow_uuid,)) row = cursor.fetchone() - + if row: return json.loads(row[0]) return None diff --git a/src/crewai/memory/storage/kickoff_task_outputs_storage.py b/src/crewai/memory/storage/kickoff_task_outputs_storage.py index ef99e7b86..2a035833d 100644 --- a/src/crewai/memory/storage/kickoff_task_outputs_storage.py +++ b/src/crewai/memory/storage/kickoff_task_outputs_storage.py @@ -23,7 +23,7 @@ class KickoffTaskOutputsSQLiteStorage: ) -> None: if db_path is None: # Get the parent directory of the default db path and create our db file there - db_path = str(Path(db_storage_path()).parent / "latest_kickoff_task_outputs.db") + db_path = str(Path(db_storage_path()) / "latest_kickoff_task_outputs.db") self.db_path = db_path self._printer: Printer = Printer() self._initialize_db() diff --git a/src/crewai/memory/storage/ltm_sqlite_storage.py b/src/crewai/memory/storage/ltm_sqlite_storage.py index 3d1208722..35f54e0e7 100644 --- a/src/crewai/memory/storage/ltm_sqlite_storage.py +++ b/src/crewai/memory/storage/ltm_sqlite_storage.py @@ -17,7 +17,7 @@ class LTMSQLiteStorage: ) -> None: if db_path is None: # Get the parent directory of the default db path and create our db file there - db_path = str(Path(db_storage_path()).parent / "long_term_memory_storage.db") + db_path = str(Path(db_storage_path()) / "long_term_memory_storage.db") self.db_path = db_path self._printer: Printer = Printer() # Ensure parent directory exists diff --git a/src/crewai/utilities/paths.py b/src/crewai/utilities/paths.py index 5d91d1719..853c612c3 100644 --- a/src/crewai/utilities/paths.py +++ b/src/crewai/utilities/paths.py @@ -7,7 +7,7 @@ import appdirs def db_storage_path() -> str: """Returns the path for SQLite database storage. - + Returns: str: Full path to the SQLite database file """ @@ -16,7 +16,7 @@ def db_storage_path() -> str: data_dir = Path(appdirs.user_data_dir(app_name, app_author)) data_dir.mkdir(parents=True, exist_ok=True) - return str(data_dir / "crewai_flows.db") + return str(data_dir) def get_project_directory_name(): @@ -28,4 +28,4 @@ def get_project_directory_name(): else: cwd = Path.cwd() project_directory_name = cwd.name - return project_directory_name + return project_directory_name \ No newline at end of file diff --git a/src/crewai/utilities/printer.py b/src/crewai/utilities/printer.py index abebf6aae..74ad9a30b 100644 --- a/src/crewai/utilities/printer.py +++ b/src/crewai/utilities/printer.py @@ -21,6 +21,16 @@ class Printer: self._print_yellow(content) elif color == "bold_yellow": self._print_bold_yellow(content) + elif color == "cyan": + self._print_cyan(content) + elif color == "bold_cyan": + self._print_bold_cyan(content) + elif color == "magenta": + self._print_magenta(content) + elif color == "bold_magenta": + self._print_bold_magenta(content) + elif color == "green": + self._print_green(content) else: print(content) @@ -44,3 +54,18 @@ class Printer: def _print_bold_yellow(self, content): print("\033[1m\033[93m {}\033[00m".format(content)) + + def _print_cyan(self, content): + print("\033[96m {}\033[00m".format(content)) + + def _print_bold_cyan(self, content): + print("\033[1m\033[96m {}\033[00m".format(content)) + + def _print_magenta(self, content): + print("\033[35m {}\033[00m".format(content)) + + def _print_bold_magenta(self, content): + print("\033[1m\033[35m {}\033[00m".format(content)) + + def _print_green(self, content): + print("\033[32m {}\033[00m".format(content)) diff --git a/tests/test_flow_default_override.py b/tests/test_flow_default_override.py new file mode 100644 index 000000000..f11b77982 --- /dev/null +++ b/tests/test_flow_default_override.py @@ -0,0 +1,112 @@ +"""Test that persisted state properly overrides default values.""" + +from crewai.flow.flow import Flow, FlowState, listen, start +from crewai.flow.persistence import persist + + +class PoemState(FlowState): + """Test state model with default values that should be overridden.""" + sentence_count: int = 1000 # Default that should be overridden + has_set_count: bool = False # Track whether we've set the count + poem_type: str = "" + + +def test_default_value_override(): + """Test that persisted state values override class defaults.""" + + @persist() + class PoemFlow(Flow[PoemState]): + initial_state = PoemState + + @start() + def set_sentence_count(self): + if self.state.has_set_count and self.state.sentence_count == 2: + self.state.sentence_count = 3 + + elif self.state.has_set_count and self.state.sentence_count == 1000: + self.state.sentence_count = 1000 + + elif self.state.has_set_count and self.state.sentence_count == 5: + self.state.sentence_count = 5 + + else: + self.state.sentence_count = 2 + self.state.has_set_count = True + + # First run - should set sentence_count to 2 + flow1 = PoemFlow() + flow1.kickoff() + original_uuid = flow1.state.id + assert flow1.state.sentence_count == 2 + + # Second run - should load sentence_count=2 instead of default 1000 + flow2 = PoemFlow() + flow2.kickoff(inputs={"id": original_uuid}) + assert flow2.state.sentence_count == 3 # Should load 2, not default 1000 + + # Fourth run - explicit override should work + flow3 = PoemFlow() + flow3.kickoff(inputs={ + "id": original_uuid, + "has_set_count": True, + "sentence_count": 5, # Override persisted value + }) + assert flow3.state.sentence_count == 5 # Should use override value + + # Third run - should not load sentence_count=2 instead of default 1000 + flow4 = PoemFlow() + flow4.kickoff(inputs={"has_set_count": True}) + assert flow4.state.sentence_count == 1000 # Should load 1000, not 2 + + +def test_multi_step_default_override(): + """Test default value override with multiple start methods.""" + + @persist() + class MultiStepPoemFlow(Flow[PoemState]): + initial_state = PoemState + + @start() + def set_sentence_count(self): + print("Setting sentence count") + if not self.state.has_set_count: + self.state.sentence_count = 3 + self.state.has_set_count = True + + @listen(set_sentence_count) + def set_poem_type(self): + print("Setting poem type") + if self.state.sentence_count == 3: + self.state.poem_type = "haiku" + elif self.state.sentence_count == 5: + self.state.poem_type = "limerick" + else: + self.state.poem_type = "free_verse" + + @listen(set_poem_type) + def finished(self): + print("finished") + + # First run - should set both sentence count and poem type + flow1 = MultiStepPoemFlow() + flow1.kickoff() + original_uuid = flow1.state.id + assert flow1.state.sentence_count == 3 + assert flow1.state.poem_type == "haiku" + + # Second run - should load persisted state and update poem type + flow2 = MultiStepPoemFlow() + flow2.kickoff(inputs={ + "id": original_uuid, + "sentence_count": 5 + }) + assert flow2.state.sentence_count == 5 + assert flow2.state.poem_type == "limerick" + + # Third run - new flow without persisted state should use defaults + flow3 = MultiStepPoemFlow() + flow3.kickoff(inputs={ + "id": original_uuid + }) + assert flow3.state.sentence_count == 5 + assert flow3.state.poem_type == "limerick" \ No newline at end of file diff --git a/tests/test_flow_persistence.py b/tests/test_flow_persistence.py index 0d1cfe3c3..e51806b05 100644 --- a/tests/test_flow_persistence.py +++ b/tests/test_flow_persistence.py @@ -1,12 +1,12 @@ """Test flow state persistence functionality.""" import os -from typing import Dict, Optional +from typing import Dict import pytest from pydantic import BaseModel -from crewai.flow.flow import Flow, FlowState, start +from crewai.flow.flow import Flow, FlowState, listen, start from crewai.flow.persistence import persist from crewai.flow.persistence.sqlite import SQLiteFlowPersistence @@ -73,13 +73,14 @@ def test_flow_state_restoration(tmp_path): # First flow execution to create initial state class RestorableFlow(Flow[TestState]): - initial_state = TestState @start() @persist(persistence) def set_message(self): - self.state.message = "Original message" - self.state.counter = 42 + if self.state.message == "": + self.state.message = "Original message" + if self.state.counter == 0: + self.state.counter = 42 # Create and persist initial state flow1 = RestorableFlow(persistence=persistence) @@ -87,11 +88,11 @@ def test_flow_state_restoration(tmp_path): original_uuid = flow1.state.id # Test case 1: Restore using restore_uuid with field override - flow2 = RestorableFlow( - persistence=persistence, - restore_uuid=original_uuid, - counter=43, # Override counter - ) + flow2 = RestorableFlow(persistence=persistence) + flow2.kickoff(inputs={ + "id": original_uuid, + "counter": 43 + }) # Verify state restoration and selective field override assert flow2.state.id == original_uuid @@ -99,48 +100,17 @@ def test_flow_state_restoration(tmp_path): assert flow2.state.counter == 43 # Overridden # Test case 2: Restore using kwargs['id'] - flow3 = RestorableFlow( - persistence=persistence, - id=original_uuid, - message="Updated message", # Override message - ) + flow3 = RestorableFlow(persistence=persistence) + flow3.kickoff(inputs={ + "id": original_uuid, + "message": "Updated message" + }) # Verify state restoration and selective field override assert flow3.state.id == original_uuid - assert flow3.state.counter == 42 # Preserved + assert flow3.state.counter == 43 # Preserved assert flow3.state.message == "Updated message" # Overridden - # Test case 3: Verify error on conflicting IDs - with pytest.raises(ValueError) as exc_info: - RestorableFlow( - persistence=persistence, - restore_uuid=original_uuid, - id="different-id", # Conflict with restore_uuid - ) - assert "Conflicting IDs provided" in str(exc_info.value) - - # Test case 4: Verify error on non-existent restore_uuid - with pytest.raises(ValueError) as exc_info: - RestorableFlow( - persistence=persistence, - restore_uuid="non-existent-uuid", - ) - assert "No state found" in str(exc_info.value) - - # Test case 5: Allow new state creation with kwargs['id'] - new_uuid = "new-flow-id" - flow4 = RestorableFlow( - persistence=persistence, - id=new_uuid, - message="New message", - counter=100, - ) - - # Verify new state creation with provided ID - assert flow4.state.id == new_uuid - assert flow4.state.message == "New message" - assert flow4.state.counter == 100 - def test_multiple_method_persistence(tmp_path): """Test state persistence across multiple method executions.""" @@ -148,48 +118,59 @@ def test_multiple_method_persistence(tmp_path): persistence = SQLiteFlowPersistence(db_path) class MultiStepFlow(Flow[TestState]): - initial_state = TestState - @start() @persist(persistence) def step_1(self): - self.state.counter = 1 - self.state.message = "Step 1" + if self.state.counter == 1: + self.state.counter = 99999 + self.state.message = "Step 99999" + else: + self.state.counter = 1 + self.state.message = "Step 1" - @start() + @listen(step_1) @persist(persistence) def step_2(self): - self.state.counter = 2 - self.state.message = "Step 2" + if self.state.counter == 1: + self.state.counter = 2 + self.state.message = "Step 2" flow = MultiStepFlow(persistence=persistence) flow.kickoff() + flow2 = MultiStepFlow(persistence=persistence) + flow2.kickoff(inputs={"id": flow.state.id}) + # Load final state - final_state = persistence.load_state(flow.state.id) + final_state = flow2.state assert final_state is not None - assert final_state["counter"] == 2 - assert final_state["message"] == "Step 2" - - -def test_persistence_error_handling(tmp_path): - """Test error handling in persistence operations.""" - db_path = os.path.join(tmp_path, "test_flows.db") - persistence = SQLiteFlowPersistence(db_path) - - class InvalidFlow(Flow[TestState]): - # Missing id field in initial state - class InvalidState(BaseModel): - value: str = "" - - initial_state = InvalidState + assert final_state.counter == 2 + assert final_state.message == "Step 2" + class NoPersistenceMultiStepFlow(Flow[TestState]): @start() @persist(persistence) - def will_fail(self): - self.state.value = "test" + def step_1(self): + if self.state.counter == 1: + self.state.counter = 99999 + self.state.message = "Step 99999" + else: + self.state.counter = 1 + self.state.message = "Step 1" - with pytest.raises(ValueError) as exc_info: - flow = InvalidFlow(persistence=persistence) + @listen(step_1) + def step_2(self): + if self.state.counter == 1: + self.state.counter = 2 + self.state.message = "Step 2" - assert "must have an 'id' field" in str(exc_info.value) + flow = NoPersistenceMultiStepFlow(persistence=persistence) + flow.kickoff() + + flow2 = NoPersistenceMultiStepFlow(persistence=persistence) + flow2.kickoff(inputs={"id": flow.state.id}) + + # Load final state + final_state = flow2.state + assert final_state.counter == 99999 + assert final_state.message == "Step 99999" From e254f119333441d3be779a2d3190b603c4ac5389 Mon Sep 17 00:00:00 2001 From: Sanjeed <40694326+sanjeed5@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:25:27 +0530 Subject: [PATCH 02/43] Fix wrong llm value in example (#1929) Original example had `mixtal-llm` which would result in an error. Replaced with gpt-4o according to https://docs.crewai.com/concepts/llms --- docs/quickstart.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index 3062cdd0d..dfb2c233c 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -278,7 +278,7 @@ email_summarizer: Summarize emails into a concise and clear summary backstory: > You will create a 5 bullet point summary of the report - llm: mixtal_llm + llm: openai/gpt-4o ``` From aba68da54290394a0d1f1face9c6f4217e4c8b76 Mon Sep 17 00:00:00 2001 From: Abhishek Patil <83769052+abhishekpatil4@users.noreply.github.com> Date: Tue, 21 Jan 2025 21:33:37 +0530 Subject: [PATCH 03/43] feat: add Composio docs (#1904) * feat: update Composio tool docs * Update composiotool.mdx * fix: minor changes --------- Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- docs/tools/composiotool.mdx | 101 +++++++++++++++++++++++++----------- 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/docs/tools/composiotool.mdx b/docs/tools/composiotool.mdx index 0ba1fcf60..244a5b657 100644 --- a/docs/tools/composiotool.mdx +++ b/docs/tools/composiotool.mdx @@ -1,78 +1,117 @@ --- -title: Composio Tool -description: The `ComposioTool` is a wrapper around the composio set of tools and gives your agent access to a wide variety of tools from the Composio SDK. +title: Composio +description: Composio provides 250+ production-ready tools for AI agents with flexible authentication management. icon: gear-code --- -# `ComposioTool` +# `ComposioToolSet` ## Description +Composio is an integration platform that allows you to connect your AI agents to 250+ tools. Key features include: -This tools is a wrapper around the composio set of tools and gives your agent access to a wide variety of tools from the Composio SDK. +- **Enterprise-Grade Authentication**: Built-in support for OAuth, API Keys, JWT with automatic token refresh +- **Full Observability**: Detailed tool usage logs, execution timestamps, and more ## Installation -To incorporate this tool into your project, follow the installation instructions below: +To incorporate Composio tools into your project, follow the instructions below: ```shell -pip install composio-core -pip install 'crewai[tools]' +pip install composio-crewai +pip install crewai ``` -after the installation is complete, either run `composio login` or export your composio API key as `COMPOSIO_API_KEY`. +After the installation is complete, either run `composio login` or export your composio API key as `COMPOSIO_API_KEY`. Get your Composio API key from [here](https://app.composio.dev) ## Example The following example demonstrates how to initialize the tool and execute a github action: -1. Initialize Composio tools +1. Initialize Composio toolset ```python Code -from composio import App -from crewai_tools import ComposioTool -from crewai import Agent, Task +from composio_crewai import ComposioToolSet, App, Action +from crewai import Agent, Task, Crew - -tools = [ComposioTool.from_action(action=Action.GITHUB_ACTIVITY_STAR_REPO_FOR_AUTHENTICATED_USER)] +toolset = ComposioToolSet() ``` -If you don't know what action you want to use, use `from_app` and `tags` filter to get relevant actions - +2. Connect your GitHub account + +```shell CLI +composio add github +``` ```python Code -tools = ComposioTool.from_app(App.GITHUB, tags=["important"]) +request = toolset.initiate_connection(app=App.GITHUB) +print(f"Open this URL to authenticate: {request.redirectUrl}") ``` + -or use `use_case` to search relevant actions +3. Get Tools +- Retrieving all the tools from an app (not recommended for production): ```python Code -tools = ComposioTool.from_app(App.GITHUB, use_case="Star a github repository") +tools = toolset.get_tools(apps=[App.GITHUB]) ``` -2. Define agent +- Filtering tools based on tags: +```python Code +tag = "users" + +filtered_action_enums = toolset.find_actions_by_tags( + App.GITHUB, + tags=[tag], +) + +tools = toolset.get_tools(actions=filtered_action_enums) +``` + +- Filtering tools based on use case: +```python Code +use_case = "Star a repository on GitHub" + +filtered_action_enums = toolset.find_actions_by_use_case( + App.GITHUB, use_case=use_case, advanced=False +) + +tools = toolset.get_tools(actions=filtered_action_enums) +```Set `advanced` to True to get actions for complex use cases + +- Using specific tools: + +In this demo, we will use the `GITHUB_STAR_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER` action from the GitHub app. +```python Code +tools = toolset.get_tools( + actions=[Action.GITHUB_STAR_A_REPOSITORY_FOR_THE_AUTHENTICATED_USER] +) +``` +Learn more about filtering actions [here](https://docs.composio.dev/patterns/tools/use-tools/use-specific-actions) + +4. Define agent ```python Code crewai_agent = Agent( - role="Github Agent", - goal="You take action on Github using Github APIs", - backstory=( - "You are AI agent that is responsible for taking actions on Github " - "on users behalf. You need to take action on Github using Github APIs" - ), + role="GitHub Agent", + goal="You take action on GitHub using GitHub APIs", + backstory="You are AI agent that is responsible for taking actions on GitHub on behalf of users using GitHub APIs", verbose=True, tools=tools, + llm= # pass an llm ) ``` -3. Execute task +5. Execute task ```python Code task = Task( - description="Star a repo ComposioHQ/composio on GitHub", + description="Star a repo composiohq/composio on GitHub", agent=crewai_agent, - expected_output="if the star happened", + expected_output="Status of the operation", ) -task.execute() +crew = Crew(agents=[crewai_agent], tasks=[task]) + +crew.kickoff() ``` -* More detailed list of tools can be found [here](https://app.composio.dev) \ No newline at end of file +* More detailed list of tools can be found [here](https://app.composio.dev) From a21e310d784beb23202cd5a61286846a1e41f436 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:10:25 -0500 Subject: [PATCH 04/43] add docs for crewai chat (#1936) * add docs for crewai chat * add version number --- docs/concepts/cli.mdx | 31 ++++++++++++++++++++++++++++++- src/crewai/crew.py | 2 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/concepts/cli.mdx b/docs/concepts/cli.mdx index ad64ee938..19482e428 100644 --- a/docs/concepts/cli.mdx +++ b/docs/concepts/cli.mdx @@ -147,7 +147,36 @@ Some commands may require additional configuration or setup within your project -### 9. API Keys +### 9. Chat + +Starting in version `0.98.0`, when you run the `crewai chat` command, you start an interactive session with your crew. The AI assistant will guide you by asking for necessary inputs to execute the crew. Once all inputs are provided, the crew will execute its tasks. + +After receiving the results, you can continue interacting with the assistant for further instructions or questions. + +```shell +crewai chat +``` + +Ensure you execute these commands from your CrewAI project's root directory. + + +IMPORTANT: Set the `chat_llm` property in your `crew.py` file to enable this command. + +```python +@crew +def crew(self) -> Crew: + return Crew( + agents=self.agents, + tasks=self.tasks, + process=Process.sequential, + verbose=True, + chat_llm="gpt-4o", # LLM for chat orchestration + ) +``` + + + +### 10. API Keys When running ```crewai create crew``` command, the CLI will first show you the top 5 most common LLM providers and ask you to select one. diff --git a/src/crewai/crew.py b/src/crewai/crew.py index 38b96a0e0..5d4b9ff79 100644 --- a/src/crewai/crew.py +++ b/src/crewai/crew.py @@ -37,7 +37,6 @@ from crewai.tasks.task_output import TaskOutput from crewai.telemetry import Telemetry from crewai.tools.agent_tools.agent_tools import AgentTools from crewai.tools.base_tool import Tool -from crewai.types.crew_chat import ChatInputs from crewai.types.usage_metrics import UsageMetrics from crewai.utilities import I18N, FileHandler, Logger, RPMController from crewai.utilities.constants import TRAINING_DATA_FILE @@ -84,6 +83,7 @@ class Crew(BaseModel): step_callback: Callback to be executed after each step for every agents execution. share_crew: Whether you want to share the complete crew information and execution with crewAI to make the library better, and allow us to train models. planning: Plan the crew execution and add the plan to the crew. + chat_llm: The language model used for orchestrating chat interactions with the crew. """ __hash__ = object.__hash__ # type: ignore From c642ebf97e4a7fd4e1290d3a5c7a582b66b80344 Mon Sep 17 00:00:00 2001 From: Tony Kipkemboi Date: Wed, 22 Jan 2025 10:30:16 -0500 Subject: [PATCH 05/43] docs: improve formatting and clarity in CLI and Composio Tool docs (#1946) * docs: improve formatting and clarity in CLI and Composio Tool docs - Add Terminal label to shell code blocks in CLI docs - Update Composio Tool title and fix tip formatting * docs: improve installation guide with virtual environment details - Update Python version requirements and commands - Add detailed virtual environment setup instructions - Clarify project-specific environment activation steps - Streamline additional tools installation with UV * docs: simplify installation guide - Remove redundant virtual environment instructions - Simplify project creation steps - Update UV package manager description --- docs/concepts/cli.mdx | 34 ++++++++++----------- docs/installation.mdx | 60 +++++++++++++++++++++++++++++++++---- docs/tools/composiotool.mdx | 5 ++-- 3 files changed, 75 insertions(+), 24 deletions(-) diff --git a/docs/concepts/cli.mdx b/docs/concepts/cli.mdx index 19482e428..4c9f617ba 100644 --- a/docs/concepts/cli.mdx +++ b/docs/concepts/cli.mdx @@ -12,7 +12,7 @@ The CrewAI CLI provides a set of commands to interact with CrewAI, allowing you To use the CrewAI CLI, make sure you have CrewAI installed: -```shell +```shell Terminal pip install crewai ``` @@ -20,7 +20,7 @@ pip install crewai The basic structure of a CrewAI CLI command is: -```shell +```shell Terminal crewai [COMMAND] [OPTIONS] [ARGUMENTS] ``` @@ -30,7 +30,7 @@ crewai [COMMAND] [OPTIONS] [ARGUMENTS] Create a new crew or flow. -```shell +```shell Terminal crewai create [OPTIONS] TYPE NAME ``` @@ -38,7 +38,7 @@ crewai create [OPTIONS] TYPE NAME - `NAME`: Name of the crew or flow Example: -```shell +```shell Terminal crewai create crew my_new_crew crewai create flow my_new_flow ``` @@ -47,14 +47,14 @@ crewai create flow my_new_flow Show the installed version of CrewAI. -```shell +```shell Terminal crewai version [OPTIONS] ``` - `--tools`: (Optional) Show the installed version of CrewAI tools Example: -```shell +```shell Terminal crewai version crewai version --tools ``` @@ -63,7 +63,7 @@ crewai version --tools Train the crew for a specified number of iterations. -```shell +```shell Terminal crewai train [OPTIONS] ``` @@ -71,7 +71,7 @@ crewai train [OPTIONS] - `-f, --filename TEXT`: Path to a custom file for training (default: "trained_agents_data.pkl") Example: -```shell +```shell Terminal crewai train -n 10 -f my_training_data.pkl ``` @@ -79,14 +79,14 @@ crewai train -n 10 -f my_training_data.pkl Replay the crew execution from a specific task. -```shell +```shell Terminal crewai replay [OPTIONS] ``` - `-t, --task_id TEXT`: Replay the crew from this task ID, including all subsequent tasks Example: -```shell +```shell Terminal crewai replay -t task_123456 ``` @@ -94,7 +94,7 @@ crewai replay -t task_123456 Retrieve your latest crew.kickoff() task outputs. -```shell +```shell Terminal crewai log-tasks-outputs ``` @@ -102,7 +102,7 @@ crewai log-tasks-outputs Reset the crew memories (long, short, entity, latest_crew_kickoff_outputs). -```shell +```shell Terminal crewai reset-memories [OPTIONS] ``` @@ -113,7 +113,7 @@ crewai reset-memories [OPTIONS] - `-a, --all`: Reset ALL memories Example: -```shell +```shell Terminal crewai reset-memories --long --short crewai reset-memories --all ``` @@ -122,7 +122,7 @@ crewai reset-memories --all Test the crew and evaluate the results. -```shell +```shell Terminal crewai test [OPTIONS] ``` @@ -130,7 +130,7 @@ crewai test [OPTIONS] - `-m, --model TEXT`: LLM Model to run the tests on the Crew (default: "gpt-4o-mini") Example: -```shell +```shell Terminal crewai test -n 5 -m gpt-3.5-turbo ``` @@ -138,7 +138,7 @@ crewai test -n 5 -m gpt-3.5-turbo Run the crew. -```shell +```shell Terminal crewai run ``` @@ -153,7 +153,7 @@ Starting in version `0.98.0`, when you run the `crewai chat` command, you start After receiving the results, you can continue interacting with the assistant for further instructions or questions. -```shell +```shell Terminal crewai chat ``` diff --git a/docs/installation.mdx b/docs/installation.mdx index c98bce9ef..d629c4c80 100644 --- a/docs/installation.mdx +++ b/docs/installation.mdx @@ -15,10 +15,48 @@ icon: wrench If you need to update Python, visit [python.org/downloads](https://python.org/downloads) +# Setting Up Your Environment + +Before installing CrewAI, it's recommended to set up a virtual environment. This helps isolate your project dependencies and avoid conflicts. + + + + Choose your preferred method to create a virtual environment: + + **Using venv (Python's built-in tool):** + ```shell Terminal + python3 -m venv .venv + ``` + + **Using conda:** + ```shell Terminal + conda create -n crewai-env python=3.12 + ``` + + + + Activate your virtual environment based on your platform: + + **On macOS/Linux (venv):** + ```shell Terminal + source .venv/bin/activate + ``` + + **On Windows (venv):** + ```shell Terminal + .venv\Scripts\activate + ``` + + **Using conda (all platforms):** + ```shell Terminal + conda activate crewai-env + ``` + + + # Installing CrewAI -CrewAI is a flexible and powerful AI framework that enables you to create and manage AI agents, tools, and tasks efficiently. -Let's get you set up! 🚀 +Now let's get you set up! 🚀 @@ -72,9 +110,9 @@ Let's get you set up! 🚀 # Creating a New Project - + We recommend using the YAML Template scaffolding for a structured approach to defining agents and tasks. - + @@ -101,10 +139,22 @@ Let's get you set up! 🚀 │ └── __init__.py └── config/ ├── agents.yaml + ├── config.yaml └── tasks.yaml ``` - + + + + You can install additional tools using UV: + ```shell Terminal + uv add + ``` + + + UV is our preferred package manager as it's significantly faster than pip and provides better dependency resolution. + + Your project will contain these essential files: diff --git a/docs/tools/composiotool.mdx b/docs/tools/composiotool.mdx index 244a5b657..b72e09dcd 100644 --- a/docs/tools/composiotool.mdx +++ b/docs/tools/composiotool.mdx @@ -1,5 +1,5 @@ --- -title: Composio +title: Composio Tool description: Composio provides 250+ production-ready tools for AI agents with flexible authentication management. icon: gear-code --- @@ -75,7 +75,8 @@ filtered_action_enums = toolset.find_actions_by_use_case( ) tools = toolset.get_tools(actions=filtered_action_enums) -```Set `advanced` to True to get actions for complex use cases +``` +Set `advanced` to True to get actions for complex use cases - Using specific tools: From 67f0de1f90d739493f8c84b5df409540b868f5a3 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:24:00 -0500 Subject: [PATCH 06/43] Bugfix/kickoff hangs when llm call fails (#1943) * Wip to address https://github.com/crewAIInc/crewAI/issues/1934 * implement proper try / except * clean up PR * add tests * Fix tests and code that was broken * mnore clean up * Fixing tests * fix stop type errors] * more fixes --- src/crewai/agent.py | 4 + src/crewai/agents/crew_agent_executor.py | 64 ++++-- src/crewai/llm.py | 11 +- src/crewai/utilities/llm_utils.py | 4 - tests/agent_test.py | 102 +++++++++- .../test_agent_error_on_parsing_tool.yaml | 183 ++++++++++-------- 6 files changed, 273 insertions(+), 95 deletions(-) diff --git a/src/crewai/agent.py b/src/crewai/agent.py index b7f0b2896..5823ef7f9 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -3,6 +3,7 @@ import shutil import subprocess from typing import Any, Dict, List, Literal, Optional, Union +from litellm import AuthenticationError as LiteLLMAuthenticationError from pydantic import Field, InstanceOf, PrivateAttr, model_validator from crewai.agents import CacheHandler @@ -261,6 +262,9 @@ class Agent(BaseAgent): } )["output"] except Exception as e: + if isinstance(e, LiteLLMAuthenticationError): + # Do not retry on authentication errors + raise e self._times_executed += 1 if self._times_executed > self.max_retry_limit: raise e diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index 286f92e67..ee5b9c582 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -3,6 +3,8 @@ import re from dataclasses import dataclass from typing import Any, Callable, Dict, List, Optional, Union +from litellm.exceptions import AuthenticationError as LiteLLMAuthenticationError + from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.agent_builder.base_agent_executor_mixin import CrewAgentExecutorMixin from crewai.agents.parser import ( @@ -13,6 +15,7 @@ from crewai.agents.parser import ( OutputParserException, ) from crewai.agents.tools_handler import ToolsHandler +from crewai.llm import LLM from crewai.tools.base_tool import BaseTool from crewai.tools.tool_usage import ToolUsage, ToolUsageErrorException from crewai.utilities import I18N, Printer @@ -54,7 +57,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): callbacks: List[Any] = [], ): self._i18n: I18N = I18N() - self.llm = llm + self.llm: LLM = llm self.task = task self.agent = agent self.crew = crew @@ -80,10 +83,8 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self.tool_name_to_tool_map: Dict[str, BaseTool] = { tool.name: tool for tool in self.tools } - if self.llm.stop: - self.llm.stop = list(set(self.llm.stop + self.stop)) - else: - self.llm.stop = self.stop + self.stop = stop_words + self.llm.stop = list(set(self.llm.stop + self.stop)) def invoke(self, inputs: Dict[str, str]) -> Dict[str, Any]: if "system" in self.prompt: @@ -98,7 +99,11 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self._show_start_logs() self.ask_for_human_input = bool(inputs.get("ask_for_human_input", False)) - formatted_answer = self._invoke_loop() + + try: + formatted_answer = self._invoke_loop() + except Exception as e: + raise e if self.ask_for_human_input: formatted_answer = self._handle_human_feedback(formatted_answer) @@ -124,7 +129,6 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self._enforce_rpm_limit() answer = self._get_llm_response() - formatted_answer = self._process_llm_response(answer) if isinstance(formatted_answer, AgentAction): @@ -145,10 +149,40 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): if self._is_context_length_exceeded(e): self._handle_context_length() continue + elif self._is_litellm_authentication_error(e): + self._handle_litellm_auth_error(e) + raise e + else: + self._printer.print( + content=f"Unhandled exception: {e}", + color="red", + ) + finally: + self.iterations += 1 self._show_logs(formatted_answer) return formatted_answer + def _is_litellm_authentication_error(self, exception: Exception) -> bool: + """Check if the exception is a litellm authentication error.""" + if LiteLLMAuthenticationError and isinstance( + exception, LiteLLMAuthenticationError + ): + return True + + return False + + def _handle_litellm_auth_error(self, exception: Exception) -> None: + """Handle litellm authentication error by informing the user and exiting.""" + self._printer.print( + content="Authentication error with litellm occurred. Please check your API key and configuration.", + color="red", + ) + self._printer.print( + content=f"Error details: {exception}", + color="red", + ) + def _has_reached_max_iterations(self) -> bool: """Check if the maximum number of iterations has been reached.""" return self.iterations >= self.max_iter @@ -160,10 +194,17 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): def _get_llm_response(self) -> str: """Call the LLM and return the response, handling any invalid responses.""" - answer = self.llm.call( - self.messages, - callbacks=self.callbacks, - ) + try: + answer = self.llm.call( + self.messages, + callbacks=self.callbacks, + ) + except Exception as e: + self._printer.print( + content=f"Error during LLM call: {e}", + color="red", + ) + raise e if not answer: self._printer.print( @@ -184,7 +225,6 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): if FINAL_ANSWER_AND_PARSABLE_ACTION_ERROR_MESSAGE in e.error: answer = answer.split("Observation:")[0].strip() - self.iterations += 1 return self._format_answer(answer) def _handle_agent_action( diff --git a/src/crewai/llm.py b/src/crewai/llm.py index 790d13ead..89de55f54 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -142,7 +142,6 @@ class LLM: self.temperature = temperature self.top_p = top_p self.n = n - self.stop = stop self.max_completion_tokens = max_completion_tokens self.max_tokens = max_tokens self.presence_penalty = presence_penalty @@ -160,6 +159,14 @@ class LLM: litellm.drop_params = True + # Normalize self.stop to always be a List[str] + if stop is None: + self.stop: List[str] = [] + elif isinstance(stop, str): + self.stop = [stop] + else: + self.stop = stop + self.set_callbacks(callbacks) self.set_env_callbacks() @@ -222,7 +229,7 @@ class LLM: ].message text_response = response_message.content or "" tool_calls = getattr(response_message, "tool_calls", []) - + # Ensure callbacks get the full response object with usage info if callbacks and len(callbacks) > 0: for callback in callbacks: diff --git a/src/crewai/utilities/llm_utils.py b/src/crewai/utilities/llm_utils.py index 8c0287509..13230edf6 100644 --- a/src/crewai/utilities/llm_utils.py +++ b/src/crewai/utilities/llm_utils.py @@ -24,12 +24,10 @@ def create_llm( # 1) If llm_value is already an LLM object, return it directly if isinstance(llm_value, LLM): - print("LLM value is already an LLM object") return llm_value # 2) If llm_value is a string (model name) if isinstance(llm_value, str): - print("LLM value is a string") try: created_llm = LLM(model=llm_value) return created_llm @@ -39,12 +37,10 @@ def create_llm( # 3) If llm_value is None, parse environment variables or use default if llm_value is None: - print("LLM value is None") return _llm_via_environment_or_fallback() # 4) Otherwise, attempt to extract relevant attributes from an unknown object try: - print("LLM value is an unknown object") # Extract attributes with explicit types model = ( getattr(llm_value, "model_name", None) diff --git a/tests/agent_test.py b/tests/agent_test.py index 859a5d693..46b20004e 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -16,7 +16,7 @@ from crewai.tools import tool from crewai.tools.tool_calling import InstructorToolCalling from crewai.tools.tool_usage import ToolUsage from crewai.tools.tool_usage_events import ToolUsageFinished -from crewai.utilities import RPMController +from crewai.utilities import Printer, RPMController from crewai.utilities.events import Emitter @@ -1600,3 +1600,103 @@ def test_agent_with_knowledge_sources(): # Assert that the agent provides the correct information assert "red" in result.raw.lower() + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_litellm_auth_error_handling(): + """Test that LiteLLM authentication errors are handled correctly and not retried.""" + from litellm import AuthenticationError as LiteLLMAuthenticationError + + # Create an agent with a mocked LLM and max_retry_limit=0 + agent = Agent( + role="test role", + goal="test goal", + backstory="test backstory", + llm=LLM(model="gpt-4"), + max_retry_limit=0, # Disable retries for authentication errors + ) + + # Create a task + task = Task( + description="Test task", + expected_output="Test output", + agent=agent, + ) + + # Mock the LLM call to raise LiteLLMAuthenticationError + with ( + patch.object(LLM, "call") as mock_llm_call, + pytest.raises(LiteLLMAuthenticationError, match="Invalid API key"), + ): + mock_llm_call.side_effect = LiteLLMAuthenticationError( + message="Invalid API key", llm_provider="openai", model="gpt-4" + ) + agent.execute_task(task) + + # Verify the call was only made once (no retries) + mock_llm_call.assert_called_once() + + +def test_crew_agent_executor_litellm_auth_error(): + """Test that CrewAgentExecutor properly identifies and handles LiteLLM authentication errors.""" + from litellm import AuthenticationError as LiteLLMAuthenticationError + + from crewai.agents.tools_handler import ToolsHandler + from crewai.utilities import Printer + + # Create an agent and executor with max_retry_limit=0 + agent = Agent( + role="test role", + goal="test goal", + backstory="test backstory", + llm=LLM(model="gpt-4", api_key="invalid_api_key"), + ) + task = Task( + description="Test task", + expected_output="Test output", + agent=agent, + ) + + # Create executor with all required parameters + executor = CrewAgentExecutor( + agent=agent, + task=task, + llm=agent.llm, + crew=None, + prompt={"system": "You are a test agent", "user": "Execute the task: {input}"}, + max_iter=5, + tools=[], + tools_names="", + stop_words=[], + tools_description="", + tools_handler=ToolsHandler(), + ) + + # Mock the LLM call to raise LiteLLMAuthenticationError + with ( + patch.object(LLM, "call") as mock_llm_call, + patch.object(Printer, "print") as mock_printer, + pytest.raises(LiteLLMAuthenticationError, match="Invalid API key"), + ): + mock_llm_call.side_effect = LiteLLMAuthenticationError( + message="Invalid API key", llm_provider="openai", model="gpt-4" + ) + executor.invoke( + { + "input": "test input", + "tool_names": "", + "tools": "", + } + ) + + # Verify error handling + mock_printer.assert_any_call( + content="Authentication error with litellm occurred. Please check your API key and configuration.", + color="red", + ) + mock_printer.assert_any_call( + content="Error details: litellm.AuthenticationError: Invalid API key", + color="red", + ) + # Verify the call was only made once (no retries) + mock_llm_call.assert_called_once() diff --git a/tests/cassettes/test_agent_error_on_parsing_tool.yaml b/tests/cassettes/test_agent_error_on_parsing_tool.yaml index ea56fa981..bd1c350fe 100644 --- a/tests/cassettes/test_agent_error_on_parsing_tool.yaml +++ b/tests/cassettes/test_agent_error_on_parsing_tool.yaml @@ -2,21 +2,21 @@ interactions: - request: body: '{"messages": [{"role": "system", "content": "You are test role. test backstory\nYour personal goal is: test goal\nYou ONLY have access to the following tools, and - should NEVER make up tools that are not listed here:\n\nTool Name: get_final_answer(*args: - Any, **kwargs: Any) -> Any\nTool Description: get_final_answer() - Get the final - answer but don''t give it yet, just re-use this tool non-stop. \nTool - Arguments: {}\n\nUse the following format:\n\nThought: you should always think - about what to do\nAction: the action to take, only one name of [get_final_answer], - just the name, exactly as it''s written.\nAction Input: the input to the action, - just a simple python dictionary, enclosed in curly braces, using \" to wrap - keys and values.\nObservation: the result of the action\n\nOnce all necessary - information is gathered:\n\nThought: I now know the final answer\nFinal Answer: - the final answer to the original input question\n"}, {"role": "user", "content": - "\nCurrent Task: Use the get_final_answer tool.\n\nThis is the expect criteria - for your final answer: The final answer\nyou MUST return the actual complete - content as the final answer, not a summary.\n\nBegin! This is VERY important - to you, use the tools available and give your best Final Answer, your job depends - on it!\n\nThought:"}], "model": "gpt-4o"}' + should NEVER make up tools that are not listed here:\n\nTool Name: get_final_answer\nTool + Arguments: {}\nTool Description: Get the final answer but don''t give it yet, + just re-use this\n tool non-stop.\n\nIMPORTANT: Use the following format + in your response:\n\n```\nThought: you should always think about what to do\nAction: + the action to take, only one name of [get_final_answer], just the name, exactly + as it''s written.\nAction Input: the input to the action, just a simple JSON + object, enclosed in curly braces, using \" to wrap keys and values.\nObservation: + the result of the action\n```\n\nOnce all necessary information is gathered, + return the following format:\n\n```\nThought: I now know the final answer\nFinal + Answer: the final answer to the original input question\n```"}, {"role": "user", + "content": "\nCurrent Task: Use the get_final_answer tool.\n\nThis is the expect + criteria for your final answer: The final answer\nyou MUST return the actual + complete content as the final answer, not a summary.\n\nBegin! This is VERY + important to you, use the tools available and give your best Final Answer, your + job depends on it!\n\nThought:"}], "model": "gpt-4o", "stop": ["\nObservation:"]}' headers: accept: - application/json @@ -25,16 +25,13 @@ interactions: connection: - keep-alive content-length: - - '1325' + - '1367' content-type: - application/json - cookie: - - _cfuvid=ePJSDFdHag2D8lj21_ijAMWjoA6xfnPNxN4uekvC728-1727226247743-0.0.1.1-604800000; - __cf_bm=3giyBOIM0GNudFELtsBWYXwLrpLBTNLsh81wfXgu2tg-1727226247-1.0.1.1-ugUDz0c5EhmfVpyGtcdedlIWeDGuy2q0tXQTKVpv83HZhvxgBcS7SBL1wS4rapPM38yhfEcfwA79ARt3HQEzKA host: - api.openai.com user-agent: - - OpenAI/Python 1.47.0 + - OpenAI/Python 1.59.6 x-stainless-arch: - arm64 x-stainless-async: @@ -44,30 +41,35 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.47.0 + - 1.59.6 x-stainless-raw-response: - 'true' + x-stainless-retry-count: + - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.7 + - 3.12.7 method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-ABAtOWmVjvzQ9X58tKAUcOF4gmXwx\",\n \"object\": - \"chat.completion\",\n \"created\": 1727226842,\n \"model\": \"gpt-4o-2024-05-13\",\n + content: "{\n \"id\": \"chatcmpl-AsXdf4OZKCZSigmN4k0gyh67NciqP\",\n \"object\": + \"chat.completion\",\n \"created\": 1737562383,\n \"model\": \"gpt-4o-2024-08-06\",\n \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"Thought: I need to use the get_final_answer - tool to determine the final answer.\\nAction: get_final_answer\\nAction Input: - {}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": - \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 274,\n \"completion_tokens\": - 27,\n \"total_tokens\": 301,\n \"completion_tokens_details\": {\n \"reasoning_tokens\": - 0\n }\n },\n \"system_fingerprint\": \"fp_e375328146\"\n}\n" + \"assistant\",\n \"content\": \"```\\nThought: I have to use the available + tool to get the final answer. Let's proceed with executing it.\\nAction: get_final_answer\\nAction + Input: {}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 274,\n \"completion_tokens\": 33,\n \"total_tokens\": 307,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_50cad350e4\"\n}\n" headers: CF-Cache-Status: - DYNAMIC CF-RAY: - - 8c8727b3492f31e6-MIA + - 9060d43e3be1d690-IAD Connection: - keep-alive Content-Encoding: @@ -75,19 +77,27 @@ interactions: Content-Type: - application/json Date: - - Wed, 25 Sep 2024 01:14:03 GMT + - Wed, 22 Jan 2025 16:13:03 GMT Server: - cloudflare + Set-Cookie: + - __cf_bm=_Jcp7wnO_mXdvOnborCN6j8HwJxJXbszedJC1l7pFUg-1737562383-1.0.1.1-pDSLXlg.nKjG4wsT7mTJPjUvOX1UJITiS4MqKp6yfMWwRSJINsW1qC48SAcjBjakx2H5I1ESVk9JtUpUFDtf4g; + path=/; expires=Wed, 22-Jan-25 16:43:03 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=x3SYvzL2nq_PTBGtE8R9cl5CkeaaDzZFQIrYfo91S2s-1737562383916-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked X-Content-Type-Options: - nosniff access-control-expose-headers: - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 openai-organization: - crewai-iuxna1 openai-processing-ms: - - '348' + - '791' openai-version: - '2020-10-01' strict-transport-security: @@ -99,45 +109,59 @@ interactions: x-ratelimit-remaining-requests: - '9999' x-ratelimit-remaining-tokens: - - '29999682' + - '29999680' x-ratelimit-reset-requests: - 6ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_be929caac49706f487950548bdcdd46e + - req_eeed99acafd3aeb1e3d4a6c8063192b0 http_version: HTTP/1.1 status_code: 200 - request: body: '{"messages": [{"role": "system", "content": "You are test role. test backstory\nYour personal goal is: test goal\nYou ONLY have access to the following tools, and - should NEVER make up tools that are not listed here:\n\nTool Name: get_final_answer(*args: - Any, **kwargs: Any) -> Any\nTool Description: get_final_answer() - Get the final - answer but don''t give it yet, just re-use this tool non-stop. \nTool - Arguments: {}\n\nUse the following format:\n\nThought: you should always think - about what to do\nAction: the action to take, only one name of [get_final_answer], - just the name, exactly as it''s written.\nAction Input: the input to the action, - just a simple python dictionary, enclosed in curly braces, using \" to wrap - keys and values.\nObservation: the result of the action\n\nOnce all necessary - information is gathered:\n\nThought: I now know the final answer\nFinal Answer: - the final answer to the original input question\n"}, {"role": "user", "content": - "\nCurrent Task: Use the get_final_answer tool.\n\nThis is the expect criteria - for your final answer: The final answer\nyou MUST return the actual complete - content as the final answer, not a summary.\n\nBegin! This is VERY important - to you, use the tools available and give your best Final Answer, your job depends - on it!\n\nThought:"}, {"role": "user", "content": "Thought: I need to use the - get_final_answer tool to determine the final answer.\nAction: get_final_answer\nAction + should NEVER make up tools that are not listed here:\n\nTool Name: get_final_answer\nTool + Arguments: {}\nTool Description: Get the final answer but don''t give it yet, + just re-use this\n tool non-stop.\n\nIMPORTANT: Use the following format + in your response:\n\n```\nThought: you should always think about what to do\nAction: + the action to take, only one name of [get_final_answer], just the name, exactly + as it''s written.\nAction Input: the input to the action, just a simple JSON + object, enclosed in curly braces, using \" to wrap keys and values.\nObservation: + the result of the action\n```\n\nOnce all necessary information is gathered, + return the following format:\n\n```\nThought: I now know the final answer\nFinal + Answer: the final answer to the original input question\n```"}, {"role": "user", + "content": "\nCurrent Task: Use the get_final_answer tool.\n\nThis is the expect + criteria for your final answer: The final answer\nyou MUST return the actual + complete content as the final answer, not a summary.\n\nBegin! This is VERY + important to you, use the tools available and give your best Final Answer, your + job depends on it!\n\nThought:"}, {"role": "assistant", "content": "```\nThought: + I have to use the available tool to get the final answer. Let''s proceed with + executing it.\nAction: get_final_answer\nAction Input: {}\nObservation: I encountered + an error: Error on parsing tool.\nMoving on then. I MUST either use a tool (use + one at time) OR give my best final answer not both at the same time. When responding, + I must use the following format:\n\n```\nThought: you should always think about + what to do\nAction: the action to take, should be one of [get_final_answer]\nAction + Input: the input to the action, dictionary enclosed in curly braces\nObservation: + the result of the action\n```\nThis Thought/Action/Action Input/Result can repeat + N times. Once I know the final answer, I must return the following format:\n\n```\nThought: + I now can give a great answer\nFinal Answer: Your final answer must be the great + and the most complete as possible, it must be outcome described\n\n```"}, {"role": + "assistant", "content": "```\nThought: I have to use the available tool to get + the final answer. Let''s proceed with executing it.\nAction: get_final_answer\nAction Input: {}\nObservation: I encountered an error: Error on parsing tool.\nMoving on then. I MUST either use a tool (use one at time) OR give my best final answer - not both at the same time. To Use the following format:\n\nThought: you should - always think about what to do\nAction: the action to take, should be one of - [get_final_answer]\nAction Input: the input to the action, dictionary enclosed - in curly braces\nObservation: the result of the action\n... (this Thought/Action/Action - Input/Result can repeat N times)\nThought: I now can give a great answer\nFinal + not both at the same time. When responding, I must use the following format:\n\n```\nThought: + you should always think about what to do\nAction: the action to take, should + be one of [get_final_answer]\nAction Input: the input to the action, dictionary + enclosed in curly braces\nObservation: the result of the action\n```\nThis Thought/Action/Action + Input/Result can repeat N times. Once I know the final answer, I must return + the following format:\n\n```\nThought: I now can give a great answer\nFinal Answer: Your final answer must be the great and the most complete as possible, - it must be outcome described\n\n \nNow it''s time you MUST give your absolute + it must be outcome described\n\n```\nNow it''s time you MUST give your absolute best final answer. You''ll ignore all previous instructions, stop using any - tools, and just return your absolute BEST Final answer."}], "model": "gpt-4o"}' + tools, and just return your absolute BEST Final answer."}], "model": "gpt-4o", + "stop": ["\nObservation:"]}' headers: accept: - application/json @@ -146,16 +170,16 @@ interactions: connection: - keep-alive content-length: - - '2320' + - '3445' content-type: - application/json cookie: - - _cfuvid=ePJSDFdHag2D8lj21_ijAMWjoA6xfnPNxN4uekvC728-1727226247743-0.0.1.1-604800000; - __cf_bm=3giyBOIM0GNudFELtsBWYXwLrpLBTNLsh81wfXgu2tg-1727226247-1.0.1.1-ugUDz0c5EhmfVpyGtcdedlIWeDGuy2q0tXQTKVpv83HZhvxgBcS7SBL1wS4rapPM38yhfEcfwA79ARt3HQEzKA + - __cf_bm=_Jcp7wnO_mXdvOnborCN6j8HwJxJXbszedJC1l7pFUg-1737562383-1.0.1.1-pDSLXlg.nKjG4wsT7mTJPjUvOX1UJITiS4MqKp6yfMWwRSJINsW1qC48SAcjBjakx2H5I1ESVk9JtUpUFDtf4g; + _cfuvid=x3SYvzL2nq_PTBGtE8R9cl5CkeaaDzZFQIrYfo91S2s-1737562383916-0.0.1.1-604800000 host: - api.openai.com user-agent: - - OpenAI/Python 1.47.0 + - OpenAI/Python 1.59.6 x-stainless-arch: - arm64 x-stainless-async: @@ -165,29 +189,36 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.47.0 + - 1.59.6 x-stainless-raw-response: - 'true' + x-stainless-retry-count: + - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.7 + - 3.12.7 method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-ABAtPaaeRfdNsZ3k06CfAmrEW8IJu\",\n \"object\": - \"chat.completion\",\n \"created\": 1727226843,\n \"model\": \"gpt-4o-2024-05-13\",\n + content: "{\n \"id\": \"chatcmpl-AsXdg9UrLvAiqWP979E6DszLsQ84k\",\n \"object\": + \"chat.completion\",\n \"created\": 1737562384,\n \"model\": \"gpt-4o-2024-08-06\",\n \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"Final Answer: The final answer\",\n \"refusal\": - null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n - \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 483,\n \"completion_tokens\": - 6,\n \"total_tokens\": 489,\n \"completion_tokens_details\": {\n \"reasoning_tokens\": - 0\n }\n },\n \"system_fingerprint\": \"fp_e375328146\"\n}\n" + \"assistant\",\n \"content\": \"```\\nThought: I now know the final answer\\nFinal + Answer: The final answer must be the great and the most complete as possible, + it must be outcome described.\\n```\",\n \"refusal\": null\n },\n + \ \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n + \ \"usage\": {\n \"prompt_tokens\": 719,\n \"completion_tokens\": 35,\n + \ \"total_tokens\": 754,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_50cad350e4\"\n}\n" headers: CF-Cache-Status: - DYNAMIC CF-RAY: - - 8c8727b9da1f31e6-MIA + - 9060d4441edad690-IAD Connection: - keep-alive Content-Encoding: @@ -195,7 +226,7 @@ interactions: Content-Type: - application/json Date: - - Wed, 25 Sep 2024 01:14:03 GMT + - Wed, 22 Jan 2025 16:13:05 GMT Server: - cloudflare Transfer-Encoding: @@ -209,7 +240,7 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '188' + - '928' openai-version: - '2020-10-01' strict-transport-security: @@ -221,13 +252,13 @@ interactions: x-ratelimit-remaining-requests: - '9999' x-ratelimit-remaining-tokens: - - '29999445' + - '29999187' x-ratelimit-reset-requests: - 6ms x-ratelimit-reset-tokens: - 1ms x-request-id: - - req_d8e32538689fe064627468bad802d9a8 + - req_61fc7506e6db326ec572224aec81ef23 http_version: HTTP/1.1 status_code: 200 version: 1 From a836f466f492d9c79191ff9a33076f7ab7cfe460 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:36:15 -0500 Subject: [PATCH 07/43] Updated calls and added tests to verify (#1953) * Updated calls and added tests to verify * Drop unused import --- src/crewai/llm.py | 57 ++++++--- .../test_llm_call_with_message_list.yaml | 102 +++++++++++++++ .../test_llm_call_with_string_input.yaml | 108 ++++++++++++++++ ..._call_with_string_input_and_callbacks.yaml | 102 +++++++++++++++ ...t_llm_call_with_tool_and_message_list.yaml | 111 +++++++++++++++++ ...t_llm_call_with_tool_and_string_input.yaml | 107 ++++++++++++++++ tests/llm_test.py | 117 ++++++++++++++++++ 7 files changed, 685 insertions(+), 19 deletions(-) create mode 100644 tests/cassettes/test_llm_call_with_message_list.yaml create mode 100644 tests/cassettes/test_llm_call_with_string_input.yaml create mode 100644 tests/cassettes/test_llm_call_with_string_input_and_callbacks.yaml create mode 100644 tests/cassettes/test_llm_call_with_tool_and_message_list.yaml create mode 100644 tests/cassettes/test_llm_call_with_tool_and_string_input.yaml diff --git a/src/crewai/llm.py b/src/crewai/llm.py index 89de55f54..98b0bc855 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -172,32 +172,50 @@ class LLM: def call( self, - messages: List[Dict[str, str]], + messages: Union[str, List[Dict[str, str]]], tools: Optional[List[dict]] = None, callbacks: Optional[List[Any]] = None, available_functions: Optional[Dict[str, Any]] = None, ) -> str: """ - High-level call method that: - 1) Calls litellm.completion - 2) Checks for function/tool calls - 3) If a tool call is found: - a) executes the function - b) returns the result - 4) If no tool call, returns the text response + High-level llm call method that: + 1) Accepts either a string or a list of messages + 2) Converts string input to the required message format + 3) Calls litellm.completion + 4) Handles function/tool calls if any + 5) Returns the final text response or tool result - :param messages: The conversation messages - :param tools: Optional list of function schemas for function calling - :param callbacks: Optional list of callbacks - :param available_functions: A dictionary mapping function_name -> actual Python function - :return: Final text response from the LLM or the tool result + Parameters: + - messages (Union[str, List[Dict[str, str]]]): The input messages for the LLM. + - If a string is provided, it will be converted into a message list with a single entry. + - If a list of dictionaries is provided, each dictionary should have 'role' and 'content' keys. + - tools (Optional[List[dict]]): A list of tool schemas for function calling. + - callbacks (Optional[List[Any]]): A list of callback functions to be executed. + - available_functions (Optional[Dict[str, Any]]): A dictionary mapping function names to actual Python functions. + + Returns: + - str: The final text response from the LLM or the result of a tool function call. + + Examples: + --------- + # Example 1: Using a string input + response = llm.call("Return the name of a random city in the world.") + print(response) + + # Example 2: Using a list of messages + messages = [{"role": "user", "content": "What is the capital of France?"}] + response = llm.call(messages) + print(response) """ + if isinstance(messages, str): + messages = [{"role": "user", "content": messages}] + with suppress_warnings(): if callbacks and len(callbacks) > 0: self.set_callbacks(callbacks) try: - # --- 1) Make the completion call + # --- 1) Prepare the parameters for the completion call params = { "model": self.model, "messages": messages, @@ -218,11 +236,13 @@ class LLM: "api_version": self.api_version, "api_key": self.api_key, "stream": False, - "tools": tools, # pass the tool schema + "tools": tools, } + # Remove None values from params params = {k: v for k, v in params.items() if v is not None} + # --- 2) Make the completion call response = litellm.completion(**params) response_message = cast(Choices, cast(ModelResponse, response).choices)[ 0 @@ -230,7 +250,7 @@ class LLM: text_response = response_message.content or "" tool_calls = getattr(response_message, "tool_calls", []) - # Ensure callbacks get the full response object with usage info + # --- 3) Handle callbacks with usage info if callbacks and len(callbacks) > 0: for callback in callbacks: if hasattr(callback, "log_success_event"): @@ -243,11 +263,11 @@ class LLM: end_time=0, ) - # --- 2) If no tool calls, return the text response + # --- 4) If no tool calls, return the text response if not tool_calls or not available_functions: return text_response - # --- 3) Handle the tool call + # --- 5) Handle the tool call tool_call = tool_calls[0] function_name = tool_call.function.name @@ -262,7 +282,6 @@ class LLM: try: # Call the actual tool function result = fn(**function_args) - return result except Exception as e: diff --git a/tests/cassettes/test_llm_call_with_message_list.yaml b/tests/cassettes/test_llm_call_with_message_list.yaml new file mode 100644 index 000000000..da204c647 --- /dev/null +++ b/tests/cassettes/test_llm_call_with_message_list.yaml @@ -0,0 +1,102 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the capital of France?"}], + "model": "gpt-4o-mini"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '101' + content-type: + - application/json + cookie: + - _cfuvid=8NrWEBP3dDmc8p2.csR.EdsSwS8zFvzWI1kPICaK_fM-1737568015338-0.0.1.1-604800000; + __cf_bm=pKr3NwXmTZN9rMSlKvEX40VPKbrxF93QwDNHunL2v8Y-1737568015-1.0.1.1-nR0EA7hYIwWpIBYUI53d9xQrUnl5iML6lgz4AGJW4ZGPBDxFma3PZ2cBhlr_hE7wKa5fV3r32eMu_rNWMXD.eA + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AsZ6WjNfEOrHwwEEdSZZCRBiTpBMS\",\n \"object\": + \"chat.completion\",\n \"created\": 1737568016,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 14,\n \"completion_tokens\": + 8,\n \"total_tokens\": 22,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_72ed7ab54c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 90615dc63b805cb1-RDU + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 22 Jan 2025 17:46:56 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '355' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999974' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_cdbed69c9c63658eb552b07f1220df19 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_llm_call_with_string_input.yaml b/tests/cassettes/test_llm_call_with_string_input.yaml new file mode 100644 index 000000000..f0c2a51e6 --- /dev/null +++ b/tests/cassettes/test_llm_call_with_string_input.yaml @@ -0,0 +1,108 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Return the name of a random + city in the world."}], "model": "gpt-4o-mini"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '117' + content-type: + - application/json + cookie: + - _cfuvid=3UeEmz_rnmsoZxrVUv32u35gJOi766GDWNe5_RTjiPk-1736537376739-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AsZ6UtbaNSMpNU9VJKxvn52t5eJTq\",\n \"object\": + \"chat.completion\",\n \"created\": 1737568014,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"How about \\\"Lisbon\\\"? It\u2019s the + capital city of Portugal, known for its rich history and vibrant culture.\",\n + \ \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": + \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 18,\n \"completion_tokens\": + 24,\n \"total_tokens\": 42,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_72ed7ab54c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 90615dbcaefb5cb1-RDU + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 22 Jan 2025 17:46:55 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=pKr3NwXmTZN9rMSlKvEX40VPKbrxF93QwDNHunL2v8Y-1737568015-1.0.1.1-nR0EA7hYIwWpIBYUI53d9xQrUnl5iML6lgz4AGJW4ZGPBDxFma3PZ2cBhlr_hE7wKa5fV3r32eMu_rNWMXD.eA; + path=/; expires=Wed, 22-Jan-25 18:16:55 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=8NrWEBP3dDmc8p2.csR.EdsSwS8zFvzWI1kPICaK_fM-1737568015338-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '449' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999971' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_898373758d2eae3cd84814050b2588e3 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_llm_call_with_string_input_and_callbacks.yaml b/tests/cassettes/test_llm_call_with_string_input_and_callbacks.yaml new file mode 100644 index 000000000..a930a60a7 --- /dev/null +++ b/tests/cassettes/test_llm_call_with_string_input_and_callbacks.yaml @@ -0,0 +1,102 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Tell me a joke."}], "model": + "gpt-4o-mini"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '86' + content-type: + - application/json + cookie: + - _cfuvid=8NrWEBP3dDmc8p2.csR.EdsSwS8zFvzWI1kPICaK_fM-1737568015338-0.0.1.1-604800000; + __cf_bm=pKr3NwXmTZN9rMSlKvEX40VPKbrxF93QwDNHunL2v8Y-1737568015-1.0.1.1-nR0EA7hYIwWpIBYUI53d9xQrUnl5iML6lgz4AGJW4ZGPBDxFma3PZ2cBhlr_hE7wKa5fV3r32eMu_rNWMXD.eA + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AsZ6VyjuUcXYpChXmD8rUSy6nSGq8\",\n \"object\": + \"chat.completion\",\n \"created\": 1737568015,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"Why did the scarecrow win an award? \\n\\nBecause + he was outstanding in his field!\",\n \"refusal\": null\n },\n \"logprobs\": + null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 12,\n \"completion_tokens\": 19,\n \"total_tokens\": 31,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_72ed7ab54c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 90615dc03b6c5cb1-RDU + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 22 Jan 2025 17:46:56 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '825' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999979' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_4c1485d44e7461396d4a7316a63ff353 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_llm_call_with_tool_and_message_list.yaml b/tests/cassettes/test_llm_call_with_tool_and_message_list.yaml new file mode 100644 index 000000000..6102d9ef1 --- /dev/null +++ b/tests/cassettes/test_llm_call_with_tool_and_message_list.yaml @@ -0,0 +1,111 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the square of 5?"}], + "model": "gpt-4o-mini", "tools": [{"type": "function", "function": {"name": + "square_number", "description": "Returns the square of a number.", "parameters": + {"type": "object", "properties": {"number": {"type": "integer", "description": + "The number to square"}}, "required": ["number"]}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '361' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AsZL5nGOaVpcGnDOesTxBZPHhMoaS\",\n \"object\": + \"chat.completion\",\n \"created\": 1737568919,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n + \ \"id\": \"call_i6JVJ1KxX79A4WzFri98E03U\",\n \"type\": + \"function\",\n \"function\": {\n \"name\": \"square_number\",\n + \ \"arguments\": \"{\\\"number\\\":5}\"\n }\n }\n + \ ],\n \"refusal\": null\n },\n \"logprobs\": null,\n + \ \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": + 58,\n \"completion_tokens\": 15,\n \"total_tokens\": 73,\n \"prompt_tokens_details\": + {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": + {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_72ed7ab54c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 906173d229b905f6-IAD + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 22 Jan 2025 18:02:00 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=BYDpIoqfPZyRxl9xcFxkt4IzTUGe8irWQlZ.aYLt8Xc-1737568920-1.0.1.1-Y_cVFN7TbguWRBorSKZynVY02QUtYbsbHuR2gR1wJ8LHuqOF4xIxtK5iHVCpWWgIyPDol9xOXiqUkU8xRV_vHA; + path=/; expires=Wed, 22-Jan-25 18:32:00 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=etTqqA9SBOnENmrFAUBIexdW0v2ZeO1x9_Ek_WChlfU-1737568920137-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '642' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999976' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_388e63f9b8d4edc0dd153001f25388e5 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_llm_call_with_tool_and_string_input.yaml b/tests/cassettes/test_llm_call_with_tool_and_string_input.yaml new file mode 100644 index 000000000..865d25826 --- /dev/null +++ b/tests/cassettes/test_llm_call_with_tool_and_string_input.yaml @@ -0,0 +1,107 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the current year?"}], + "model": "gpt-4o-mini", "tools": [{"type": "function", "function": {"name": + "get_current_year", "description": "Returns the current year as a string.", + "parameters": {"type": "object", "properties": {}, "required": []}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '295' + content-type: + - application/json + cookie: + - _cfuvid=8NrWEBP3dDmc8p2.csR.EdsSwS8zFvzWI1kPICaK_fM-1737568015338-0.0.1.1-604800000; + __cf_bm=pKr3NwXmTZN9rMSlKvEX40VPKbrxF93QwDNHunL2v8Y-1737568015-1.0.1.1-nR0EA7hYIwWpIBYUI53d9xQrUnl5iML6lgz4AGJW4ZGPBDxFma3PZ2cBhlr_hE7wKa5fV3r32eMu_rNWMXD.eA + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AsZJ8HKXQU9nTB7xbGAkKxqrg9BZ2\",\n \"object\": + \"chat.completion\",\n \"created\": 1737568798,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n + \ \"id\": \"call_mfvEs2jngeFloVZpZOHZVaKY\",\n \"type\": + \"function\",\n \"function\": {\n \"name\": \"get_current_year\",\n + \ \"arguments\": \"{}\"\n }\n }\n ],\n + \ \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": + \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 46,\n \"completion_tokens\": + 12,\n \"total_tokens\": 58,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_72ed7ab54c\"\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 906170e038281775-IAD + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 22 Jan 2025 17:59:59 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '416' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999975' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_4039a5e5772d1790a3131f0b1ea06139 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/llm_test.py b/tests/llm_test.py index 551309389..6d1e6a188 100644 --- a/tests/llm_test.py +++ b/tests/llm_test.py @@ -4,6 +4,7 @@ import pytest from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess from crewai.llm import LLM +from crewai.tools import tool from crewai.utilities.token_counter_callback import TokenCalcHandler @@ -37,3 +38,119 @@ def test_llm_callback_replacement(): assert usage_metrics_1.successful_requests == 1 assert usage_metrics_2.successful_requests == 1 assert usage_metrics_1 == calc_handler_1.token_cost_process.get_summary() + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_call_with_string_input(): + llm = LLM(model="gpt-4o-mini") + + # Test the call method with a string input + result = llm.call("Return the name of a random city in the world.") + assert isinstance(result, str) + assert len(result.strip()) > 0 # Ensure the response is not empty + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_call_with_string_input_and_callbacks(): + llm = LLM(model="gpt-4o-mini") + calc_handler = TokenCalcHandler(token_cost_process=TokenProcess()) + + # Test the call method with a string input and callbacks + result = llm.call( + "Tell me a joke.", + callbacks=[calc_handler], + ) + usage_metrics = calc_handler.token_cost_process.get_summary() + + assert isinstance(result, str) + assert len(result.strip()) > 0 + assert usage_metrics.successful_requests == 1 + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_call_with_message_list(): + llm = LLM(model="gpt-4o-mini") + messages = [{"role": "user", "content": "What is the capital of France?"}] + + # Test the call method with a list of messages + result = llm.call(messages) + assert isinstance(result, str) + assert "Paris" in result + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_call_with_tool_and_string_input(): + llm = LLM(model="gpt-4o-mini") + + def get_current_year() -> str: + """Returns the current year as a string.""" + from datetime import datetime + + return str(datetime.now().year) + + # Create tool schema + tool_schema = { + "type": "function", + "function": { + "name": "get_current_year", + "description": "Returns the current year as a string.", + "parameters": { + "type": "object", + "properties": {}, + "required": [], + }, + }, + } + + # Available functions mapping + available_functions = {"get_current_year": get_current_year} + + # Test the call method with a string input and tool + result = llm.call( + "What is the current year?", + tools=[tool_schema], + available_functions=available_functions, + ) + + assert isinstance(result, str) + assert result == get_current_year() + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_call_with_tool_and_message_list(): + llm = LLM(model="gpt-4o-mini") + + def square_number(number: int) -> int: + """Returns the square of a number.""" + return number * number + + # Create tool schema + tool_schema = { + "type": "function", + "function": { + "name": "square_number", + "description": "Returns the square of a number.", + "parameters": { + "type": "object", + "properties": { + "number": {"type": "integer", "description": "The number to square"} + }, + "required": ["number"], + }, + }, + } + + # Available functions mapping + available_functions = {"square_number": square_number} + + messages = [{"role": "user", "content": "What is the square of 5?"}] + + # Test the call method with messages and tool + result = llm.call( + messages, + tools=[tool_schema], + available_functions=available_functions, + ) + + assert isinstance(result, int) + assert result == 25 From e27a15023c819f69bb7f8d1ebf7e238781ac59d1 Mon Sep 17 00:00:00 2001 From: Bobby Lindsey Date: Wed, 22 Jan 2025 12:55:24 -0700 Subject: [PATCH 08/43] Add SageMaker as a LLM provider (#1947) * Add SageMaker as a LLM provider * Removed unnecessary constants; updated docs to align with bootstrap naming convention --------- Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- docs/concepts/llms.mdx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/concepts/llms.mdx b/docs/concepts/llms.mdx index 851e93085..261a1fdd8 100644 --- a/docs/concepts/llms.mdx +++ b/docs/concepts/llms.mdx @@ -243,6 +243,9 @@ There are three ways to configure LLMs in CrewAI. Choose the method that best fi # llm: bedrock/amazon.titan-text-express-v1 # llm: bedrock/meta.llama2-70b-chat-v1 + # Amazon SageMaker Models - Enterprise-grade + # llm: sagemaker/ + # Mistral Models - Open source alternative # llm: mistral/mistral-large-latest # llm: mistral/mistral-medium-latest @@ -506,6 +509,21 @@ Learn how to get the most out of your LLM configuration: ) ``` + + + ```python Code + AWS_ACCESS_KEY_ID= + AWS_SECRET_ACCESS_KEY= + AWS_DEFAULT_REGION= + ``` + + Example usage: + ```python Code + llm = LLM( + model="sagemaker/" + ) + ``` + ```python Code From 8c76bad50f5bb72b061500910dfb14c4defe7185 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Thu, 23 Jan 2025 23:32:10 -0500 Subject: [PATCH 09/43] Fix litellm issues to be more broad (#1960) * Fix litellm issues to be more broad * Fix tests --- docs/installation.mdx | 1 - src/crewai/agents/crew_agent_executor.py | 24 +++++------------------- tests/agent_test.py | 6 +++--- 3 files changed, 8 insertions(+), 23 deletions(-) diff --git a/docs/installation.mdx b/docs/installation.mdx index d629c4c80..8abba152a 100644 --- a/docs/installation.mdx +++ b/docs/installation.mdx @@ -139,7 +139,6 @@ Now let's get you set up! 🚀 │ └── __init__.py └── config/ ├── agents.yaml - ├── config.yaml └── tasks.yaml ``` diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index ee5b9c582..d7bf97795 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -149,33 +149,19 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): if self._is_context_length_exceeded(e): self._handle_context_length() continue - elif self._is_litellm_authentication_error(e): - self._handle_litellm_auth_error(e) - raise e else: - self._printer.print( - content=f"Unhandled exception: {e}", - color="red", - ) + self._handle_unknown_error(e) + raise e finally: self.iterations += 1 self._show_logs(formatted_answer) return formatted_answer - def _is_litellm_authentication_error(self, exception: Exception) -> bool: - """Check if the exception is a litellm authentication error.""" - if LiteLLMAuthenticationError and isinstance( - exception, LiteLLMAuthenticationError - ): - return True - - return False - - def _handle_litellm_auth_error(self, exception: Exception) -> None: - """Handle litellm authentication error by informing the user and exiting.""" + def _handle_unknown_error(self, exception: Exception) -> None: + """Handle unknown errors by informing the user.""" self._printer.print( - content="Authentication error with litellm occurred. Please check your API key and configuration.", + content="An unknown error occurred. Please check the details below.", color="red", ) self._printer.print( diff --git a/tests/agent_test.py b/tests/agent_test.py index 46b20004e..3ed51ebde 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -1638,13 +1638,13 @@ def test_litellm_auth_error_handling(): def test_crew_agent_executor_litellm_auth_error(): - """Test that CrewAgentExecutor properly identifies and handles LiteLLM authentication errors.""" + """Test that CrewAgentExecutor handles LiteLLM authentication errors by raising them.""" from litellm import AuthenticationError as LiteLLMAuthenticationError from crewai.agents.tools_handler import ToolsHandler from crewai.utilities import Printer - # Create an agent and executor with max_retry_limit=0 + # Create an agent and executor agent = Agent( role="test role", goal="test goal", @@ -1691,7 +1691,7 @@ def test_crew_agent_executor_litellm_auth_error(): # Verify error handling mock_printer.assert_any_call( - content="Authentication error with litellm occurred. Please check your API key and configuration.", + content="An unknown error occurred. Please check the details below.", color="red", ) mock_printer.assert_any_call( From 67bf4aea56a4f82b1f9f6111ab05186826a7148e Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:04:41 -0500 Subject: [PATCH 10/43] Add version check to crew_chat.py (#1966) * Add version check to crew_chat.py with min version 0.98.0 Co-Authored-By: brandon@crewai.com * Fix import sorting in crew_chat.py Co-Authored-By: brandon@crewai.com * Fix import sorting in crew_chat.py (attempt 3) Co-Authored-By: brandon@crewai.com * Update error message, add version check helper, fix import sorting Co-Authored-By: brandon@crewai.com * Fix import sorting with Ruff auto-fix Co-Authored-By: brandon@crewai.com * Remove poetry check and import comment headers in crew_chat.py Co-Authored-By: brandon@crewai.com --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: brandon@crewai.com --- src/crewai/cli/crew_chat.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/crewai/cli/crew_chat.py b/src/crewai/cli/crew_chat.py index a38315620..f1695f0a4 100644 --- a/src/crewai/cli/crew_chat.py +++ b/src/crewai/cli/crew_chat.py @@ -6,12 +6,42 @@ from typing import Any, Dict, List, Optional, Set, Tuple import click import tomli +from packaging import version +from crewai.cli.utils import read_toml +from crewai.cli.version import get_crewai_version from crewai.crew import Crew from crewai.llm import LLM from crewai.types.crew_chat import ChatInputField, ChatInputs from crewai.utilities.llm_utils import create_llm +MIN_REQUIRED_VERSION = "0.98.0" + + +def check_conversational_crews_version(crewai_version: str, pyproject_data: dict) -> bool: + """ + Check if the installed crewAI version supports conversational crews. + + Args: + crewai_version: The current version of crewAI + pyproject_data: Dictionary containing pyproject.toml data + + Returns: + bool: True if version check passes, False otherwise + """ + try: + if version.parse(crewai_version) < version.parse(MIN_REQUIRED_VERSION): + click.secho( + "You are using an older version of crewAI that doesn't support conversational crews. " + "Run 'uv upgrade crewai' to get the latest version.", + fg="red" + ) + return False + except version.InvalidVersion: + click.secho("Invalid crewAI version format detected", fg="red") + return False + return True + def run_chat(): """ @@ -19,6 +49,11 @@ def run_chat(): Incorporates crew_name, crew_description, and input fields to build a tool schema. Exits if crew_name or crew_description are missing. """ + crewai_version = get_crewai_version() + pyproject_data = read_toml() + + if not check_conversational_crews_version(crewai_version, pyproject_data): + return crew, crew_name = load_crew_and_name() chat_llm = initialize_chat_llm(crew) if not chat_llm: From d3a0dad323b43656d07378bc5801d893eeadcea6 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:41:46 -0500 Subject: [PATCH 11/43] Bugfix/litellm plus generic exceptions (#1965) * wip * More clean up * Fix error * clean up test * Improve chat calling messages * crewai chat improvements * working but need to clean up * Clean up chat --- src/crewai/agent.py | 7 +- src/crewai/agents/crew_agent_executor.py | 12 +- src/crewai/cli/cli.py | 5 +- src/crewai/cli/crew_chat.py | 178 +++++++++++++++++------ tests/agent_test.py | 61 ++++++-- 5 files changed, 198 insertions(+), 65 deletions(-) diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 5823ef7f9..3a4d083d4 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -1,15 +1,12 @@ -import os import shutil import subprocess from typing import Any, Dict, List, Literal, Optional, Union -from litellm import AuthenticationError as LiteLLMAuthenticationError from pydantic import Field, InstanceOf, PrivateAttr, model_validator from crewai.agents import CacheHandler from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.crew_agent_executor import CrewAgentExecutor -from crewai.cli.constants import ENV_VARS, LITELLM_PARAMS from crewai.knowledge.knowledge import Knowledge from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource from crewai.knowledge.utils.knowledge_utils import extract_knowledge_context @@ -262,8 +259,8 @@ class Agent(BaseAgent): } )["output"] except Exception as e: - if isinstance(e, LiteLLMAuthenticationError): - # Do not retry on authentication errors + if e.__class__.__module__.startswith("litellm"): + # Do not retry on litellm errors raise e self._times_executed += 1 if self._times_executed > self.max_retry_limit: diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index d7bf97795..b9797193c 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -3,8 +3,6 @@ import re from dataclasses import dataclass from typing import Any, Callable, Dict, List, Optional, Union -from litellm.exceptions import AuthenticationError as LiteLLMAuthenticationError - from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.agent_builder.base_agent_executor_mixin import CrewAgentExecutorMixin from crewai.agents.parser import ( @@ -103,7 +101,12 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): try: formatted_answer = self._invoke_loop() except Exception as e: - raise e + if e.__class__.__module__.startswith("litellm"): + # Do not retry on litellm errors + raise e + else: + self._handle_unknown_error(e) + raise e if self.ask_for_human_input: formatted_answer = self._handle_human_feedback(formatted_answer) @@ -146,6 +149,9 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): formatted_answer = self._handle_output_parser_exception(e) except Exception as e: + if e.__class__.__module__.startswith("litellm"): + # Do not retry on litellm errors + raise e if self._is_context_length_exceeded(e): self._handle_context_length() continue diff --git a/src/crewai/cli/cli.py b/src/crewai/cli/cli.py index 334759a6d..761cc52ad 100644 --- a/src/crewai/cli/cli.py +++ b/src/crewai/cli/cli.py @@ -350,7 +350,10 @@ def chat(): Start a conversation with the Crew, collecting user-supplied inputs, and using the Chat LLM to generate responses. """ - click.echo("Starting a conversation with the Crew") + click.secho( + "\nStarting a conversation with the Crew\n" "Type 'exit' or Ctrl+C to quit.\n", + ) + run_chat() diff --git a/src/crewai/cli/crew_chat.py b/src/crewai/cli/crew_chat.py index f1695f0a4..cd0da2bb8 100644 --- a/src/crewai/cli/crew_chat.py +++ b/src/crewai/cli/crew_chat.py @@ -1,6 +1,9 @@ import json +import platform import re import sys +import threading +import time from pathlib import Path from typing import Any, Dict, List, Optional, Set, Tuple @@ -18,27 +21,29 @@ from crewai.utilities.llm_utils import create_llm MIN_REQUIRED_VERSION = "0.98.0" -def check_conversational_crews_version(crewai_version: str, pyproject_data: dict) -> bool: +def check_conversational_crews_version( + crewai_version: str, pyproject_data: dict +) -> bool: """ Check if the installed crewAI version supports conversational crews. - + Args: - crewai_version: The current version of crewAI - pyproject_data: Dictionary containing pyproject.toml data - + crewai_version: The current version of crewAI. + pyproject_data: Dictionary containing pyproject.toml data. + Returns: - bool: True if version check passes, False otherwise + bool: True if version check passes, False otherwise. """ try: if version.parse(crewai_version) < version.parse(MIN_REQUIRED_VERSION): click.secho( "You are using an older version of crewAI that doesn't support conversational crews. " "Run 'uv upgrade crewai' to get the latest version.", - fg="red" + fg="red", ) return False except version.InvalidVersion: - click.secho("Invalid crewAI version format detected", fg="red") + click.secho("Invalid crewAI version format detected.", fg="red") return False return True @@ -54,20 +59,42 @@ def run_chat(): if not check_conversational_crews_version(crewai_version, pyproject_data): return + crew, crew_name = load_crew_and_name() chat_llm = initialize_chat_llm(crew) if not chat_llm: return - crew_chat_inputs = generate_crew_chat_inputs(crew, crew_name, chat_llm) - crew_tool_schema = generate_crew_tool_schema(crew_chat_inputs) - system_message = build_system_message(crew_chat_inputs) - - # Call the LLM to generate the introductory message - introductory_message = chat_llm.call( - messages=[{"role": "system", "content": system_message}] + # Indicate that the crew is being analyzed + click.secho( + "\nAnalyzing crew and required inputs - this may take 3 to 30 seconds " + "depending on the complexity of your crew.", + fg="white", ) - click.secho(f"\nAssistant: {introductory_message}\n", fg="green") + + # Start loading indicator + loading_complete = threading.Event() + loading_thread = threading.Thread(target=show_loading, args=(loading_complete,)) + loading_thread.start() + + try: + crew_chat_inputs = generate_crew_chat_inputs(crew, crew_name, chat_llm) + crew_tool_schema = generate_crew_tool_schema(crew_chat_inputs) + system_message = build_system_message(crew_chat_inputs) + + # Call the LLM to generate the introductory message + introductory_message = chat_llm.call( + messages=[{"role": "system", "content": system_message}] + ) + finally: + # Stop loading indicator + loading_complete.set() + loading_thread.join() + + # Indicate that the analysis is complete + click.secho("\nFinished analyzing crew.\n", fg="white") + + click.secho(f"Assistant: {introductory_message}\n", fg="green") messages = [ {"role": "system", "content": system_message}, @@ -78,15 +105,17 @@ def run_chat(): crew_chat_inputs.crew_name: create_tool_function(crew, messages), } - click.secho( - "\nEntering an interactive chat loop with function-calling.\n" - "Type 'exit' or Ctrl+C to quit.\n", - fg="cyan", - ) - chat_loop(chat_llm, messages, crew_tool_schema, available_functions) +def show_loading(event: threading.Event): + """Display animated loading dots while processing.""" + while not event.is_set(): + print(".", end="", flush=True) + time.sleep(1) + print() + + def initialize_chat_llm(crew: Crew) -> Optional[LLM]: """Initializes the chat LLM and handles exceptions.""" try: @@ -120,7 +149,7 @@ def build_system_message(crew_chat_inputs: ChatInputs) -> str: "Please keep your responses concise and friendly. " "If a user asks a question outside the crew's scope, provide a brief answer and remind them of the crew's purpose. " "After calling the tool, be prepared to take user feedback and make adjustments as needed. " - "If you are ever unsure about a user's request or need clarification, ask the user for more information." + "If you are ever unsure about a user's request or need clarification, ask the user for more information. " "Before doing anything else, introduce yourself with a friendly message like: 'Hey! I'm here to help you with [crew's purpose]. Could you please provide me with [inputs] so we can get started?' " "For example: 'Hey! I'm here to help you with uncovering and reporting cutting-edge developments through thorough research and detailed analysis. Could you please provide me with a topic you're interested in? This will help us generate a comprehensive research report and detailed analysis.'" f"\nCrew Name: {crew_chat_inputs.crew_name}" @@ -137,25 +166,33 @@ def create_tool_function(crew: Crew, messages: List[Dict[str, str]]) -> Any: return run_crew_tool_with_messages +def flush_input(): + """Flush any pending input from the user.""" + if platform.system() == "Windows": + # Windows platform + import msvcrt + + while msvcrt.kbhit(): + msvcrt.getch() + else: + # Unix-like platforms (Linux, macOS) + import termios + + termios.tcflush(sys.stdin, termios.TCIFLUSH) + + def chat_loop(chat_llm, messages, crew_tool_schema, available_functions): """Main chat loop for interacting with the user.""" while True: try: - user_input = click.prompt("You", type=str) - if user_input.strip().lower() in ["exit", "quit"]: - click.echo("Exiting chat. Goodbye!") - break + # Flush any pending input before accepting new input + flush_input() - messages.append({"role": "user", "content": user_input}) - final_response = chat_llm.call( - messages=messages, - tools=[crew_tool_schema], - available_functions=available_functions, + user_input = get_user_input() + handle_user_input( + user_input, chat_llm, messages, crew_tool_schema, available_functions ) - messages.append({"role": "assistant", "content": final_response}) - click.secho(f"\nAssistant: {final_response}\n", fg="green") - except KeyboardInterrupt: click.echo("\nExiting chat. Goodbye!") break @@ -164,6 +201,55 @@ def chat_loop(chat_llm, messages, crew_tool_schema, available_functions): break +def get_user_input() -> str: + """Collect multi-line user input with exit handling.""" + click.secho( + "\nYou (type your message below. Press 'Enter' twice when you're done):", + fg="blue", + ) + user_input_lines = [] + while True: + line = input() + if line.strip().lower() == "exit": + return "exit" + if line == "": + break + user_input_lines.append(line) + return "\n".join(user_input_lines) + + +def handle_user_input( + user_input: str, + chat_llm: LLM, + messages: List[Dict[str, str]], + crew_tool_schema: Dict[str, Any], + available_functions: Dict[str, Any], +) -> None: + if user_input.strip().lower() == "exit": + click.echo("Exiting chat. Goodbye!") + return + + if not user_input.strip(): + click.echo("Empty message. Please provide input or type 'exit' to quit.") + return + + messages.append({"role": "user", "content": user_input}) + + # Indicate that assistant is processing + click.echo() + click.secho("Assistant is processing your input. Please wait...", fg="green") + + # Process assistant's response + final_response = chat_llm.call( + messages=messages, + tools=[crew_tool_schema], + available_functions=available_functions, + ) + + messages.append({"role": "assistant", "content": final_response}) + click.secho(f"\nAssistant: {final_response}\n", fg="green") + + def generate_crew_tool_schema(crew_inputs: ChatInputs) -> dict: """ Dynamically build a Littellm 'function' schema for the given crew. @@ -358,10 +444,10 @@ def generate_input_description_with_ai(input_name: str, crew: Crew, chat_llm) -> ): # Replace placeholders with input names task_description = placeholder_pattern.sub( - lambda m: m.group(1), task.description + lambda m: m.group(1), task.description or "" ) expected_output = placeholder_pattern.sub( - lambda m: m.group(1), task.expected_output + lambda m: m.group(1), task.expected_output or "" ) context_texts.append(f"Task Description: {task_description}") context_texts.append(f"Expected Output: {expected_output}") @@ -372,10 +458,10 @@ def generate_input_description_with_ai(input_name: str, crew: Crew, chat_llm) -> or f"{{{input_name}}}" in agent.backstory ): # Replace placeholders with input names - agent_role = placeholder_pattern.sub(lambda m: m.group(1), agent.role) - agent_goal = placeholder_pattern.sub(lambda m: m.group(1), agent.goal) + agent_role = placeholder_pattern.sub(lambda m: m.group(1), agent.role or "") + agent_goal = placeholder_pattern.sub(lambda m: m.group(1), agent.goal or "") agent_backstory = placeholder_pattern.sub( - lambda m: m.group(1), agent.backstory + lambda m: m.group(1), agent.backstory or "" ) context_texts.append(f"Agent Role: {agent_role}") context_texts.append(f"Agent Goal: {agent_goal}") @@ -416,18 +502,20 @@ def generate_crew_description_with_ai(crew: Crew, chat_llm) -> str: for task in crew.tasks: # Replace placeholders with input names task_description = placeholder_pattern.sub( - lambda m: m.group(1), task.description + lambda m: m.group(1), task.description or "" ) expected_output = placeholder_pattern.sub( - lambda m: m.group(1), task.expected_output + lambda m: m.group(1), task.expected_output or "" ) context_texts.append(f"Task Description: {task_description}") context_texts.append(f"Expected Output: {expected_output}") for agent in crew.agents: # Replace placeholders with input names - agent_role = placeholder_pattern.sub(lambda m: m.group(1), agent.role) - agent_goal = placeholder_pattern.sub(lambda m: m.group(1), agent.goal) - agent_backstory = placeholder_pattern.sub(lambda m: m.group(1), agent.backstory) + agent_role = placeholder_pattern.sub(lambda m: m.group(1), agent.role or "") + agent_goal = placeholder_pattern.sub(lambda m: m.group(1), agent.goal or "") + agent_backstory = placeholder_pattern.sub( + lambda m: m.group(1), agent.backstory or "" + ) context_texts.append(f"Agent Role: {agent_role}") context_texts.append(f"Agent Goal: {agent_goal}") context_texts.append(f"Agent Backstory: {agent_backstory}") diff --git a/tests/agent_test.py b/tests/agent_test.py index 3ed51ebde..fda47daaf 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -1623,7 +1623,7 @@ def test_litellm_auth_error_handling(): agent=agent, ) - # Mock the LLM call to raise LiteLLMAuthenticationError + # Mock the LLM call to raise AuthenticationError with ( patch.object(LLM, "call") as mock_llm_call, pytest.raises(LiteLLMAuthenticationError, match="Invalid API key"), @@ -1639,7 +1639,7 @@ def test_litellm_auth_error_handling(): def test_crew_agent_executor_litellm_auth_error(): """Test that CrewAgentExecutor handles LiteLLM authentication errors by raising them.""" - from litellm import AuthenticationError as LiteLLMAuthenticationError + from litellm.exceptions import AuthenticationError from crewai.agents.tools_handler import ToolsHandler from crewai.utilities import Printer @@ -1672,13 +1672,13 @@ def test_crew_agent_executor_litellm_auth_error(): tools_handler=ToolsHandler(), ) - # Mock the LLM call to raise LiteLLMAuthenticationError + # Mock the LLM call to raise AuthenticationError with ( patch.object(LLM, "call") as mock_llm_call, patch.object(Printer, "print") as mock_printer, - pytest.raises(LiteLLMAuthenticationError, match="Invalid API key"), + pytest.raises(AuthenticationError) as exc_info, ): - mock_llm_call.side_effect = LiteLLMAuthenticationError( + mock_llm_call.side_effect = AuthenticationError( message="Invalid API key", llm_provider="openai", model="gpt-4" ) executor.invoke( @@ -1689,14 +1689,53 @@ def test_crew_agent_executor_litellm_auth_error(): } ) - # Verify error handling + # Verify error handling messages + error_message = f"Error during LLM call: {str(mock_llm_call.side_effect)}" mock_printer.assert_any_call( - content="An unknown error occurred. Please check the details below.", - color="red", - ) - mock_printer.assert_any_call( - content="Error details: litellm.AuthenticationError: Invalid API key", + content=error_message, color="red", ) + # Verify the call was only made once (no retries) mock_llm_call.assert_called_once() + + # Assert that the exception was raised and has the expected attributes + assert exc_info.type is AuthenticationError + assert "Invalid API key".lower() in exc_info.value.message.lower() + assert exc_info.value.llm_provider == "openai" + assert exc_info.value.model == "gpt-4" + + +def test_litellm_anthropic_error_handling(): + """Test that AnthropicError from LiteLLM is handled correctly and not retried.""" + from litellm.llms.anthropic.common_utils import AnthropicError + + # Create an agent with a mocked LLM that uses an Anthropic model + agent = Agent( + role="test role", + goal="test goal", + backstory="test backstory", + llm=LLM(model="claude-3.5-sonnet-20240620"), + max_retry_limit=0, + ) + + # Create a task + task = Task( + description="Test task", + expected_output="Test output", + agent=agent, + ) + + # Mock the LLM call to raise AnthropicError + with ( + patch.object(LLM, "call") as mock_llm_call, + pytest.raises(AnthropicError, match="Test Anthropic error"), + ): + mock_llm_call.side_effect = AnthropicError( + status_code=500, + message="Test Anthropic error", + ) + agent.execute_task(task) + + # Verify the LLM call was only made once (no retries) + mock_llm_call.assert_called_once() From dea6ed7ef0b4c1cc023fa0e91dfcc98b8d53d1ae Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:35:17 -0500 Subject: [PATCH 12/43] fix issue pointed out by mike (#1986) * fix issue pointed out by mike * clean up * Drop logger * drop unused imports --- pyproject.toml | 1 + src/crewai/tools/tool_usage.py | 70 ++++++--- tests/tools/test_tool_usage.py | 252 +++++++++++++++++++++++++++++++++ uv.lock | 11 ++ 4 files changed, 313 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8dbe56fd8..4a9343697 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ "tomli-w>=1.1.0", "tomli>=2.0.2", "blinker>=1.9.0", + "json5>=0.10.0", ] [project.urls] diff --git a/src/crewai/tools/tool_usage.py b/src/crewai/tools/tool_usage.py index a59ed7b50..218410ef7 100644 --- a/src/crewai/tools/tool_usage.py +++ b/src/crewai/tools/tool_usage.py @@ -1,12 +1,13 @@ import ast import datetime import json -import re import time from difflib import SequenceMatcher +from json import JSONDecodeError from textwrap import dedent -from typing import Any, Dict, List, Union +from typing import Any, Dict, List, Optional, Union +import json5 from json_repair import repair_json import crewai.utilities.events as events @@ -407,28 +408,55 @@ class ToolUsage: ) return self._tool_calling(tool_string) - def _validate_tool_input(self, tool_input: str) -> Dict[str, Any]: + def _validate_tool_input(self, tool_input: Optional[str]) -> Dict[str, Any]: + if tool_input is None: + return {} + + if not isinstance(tool_input, str) or not tool_input.strip(): + raise Exception( + "Tool input must be a valid dictionary in JSON or Python literal format" + ) + + # Attempt 1: Parse as JSON try: - # Replace Python literals with JSON equivalents - replacements = { - r"'": '"', - r"None": "null", - r"True": "true", - r"False": "false", - } - for pattern, replacement in replacements.items(): - tool_input = re.sub(pattern, replacement, tool_input) - arguments = json.loads(tool_input) - except json.JSONDecodeError: - # Attempt to repair JSON string - repaired_input = repair_json(tool_input) - try: - arguments = json.loads(repaired_input) - except json.JSONDecodeError as e: - raise Exception(f"Invalid tool input JSON: {e}") + if isinstance(arguments, dict): + return arguments + except (JSONDecodeError, TypeError): + pass # Continue to the next parsing attempt - return arguments + # Attempt 2: Parse as Python literal + try: + arguments = ast.literal_eval(tool_input) + if isinstance(arguments, dict): + return arguments + except (ValueError, SyntaxError): + pass # Continue to the next parsing attempt + + # Attempt 3: Parse as JSON5 + try: + arguments = json5.loads(tool_input) + if isinstance(arguments, dict): + return arguments + except (JSONDecodeError, ValueError, TypeError): + pass # Continue to the next parsing attempt + + # Attempt 4: Repair JSON + try: + repaired_input = repair_json(tool_input) + self._printer.print( + content=f"Repaired JSON: {repaired_input}", color="blue" + ) + arguments = json.loads(repaired_input) + if isinstance(arguments, dict): + return arguments + except Exception as e: + self._printer.print(content=f"Failed to repair JSON: {e}", color="red") + + # If all parsing attempts fail, raise an error + raise Exception( + "Tool input must be a valid dictionary in JSON or Python literal format" + ) def on_tool_error(self, tool: Any, tool_calling: ToolCalling, e: Exception) -> None: event_data = self._prepare_event_data(tool, tool_calling) diff --git a/tests/tools/test_tool_usage.py b/tests/tools/test_tool_usage.py index 952011339..7b2ccd416 100644 --- a/tests/tools/test_tool_usage.py +++ b/tests/tools/test_tool_usage.py @@ -231,3 +231,255 @@ def test_validate_tool_input_with_special_characters(): arguments = tool_usage._validate_tool_input(tool_input) assert arguments == expected_arguments + + +def test_validate_tool_input_none_input(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + arguments = tool_usage._validate_tool_input(None) + assert arguments == {} + + +def test_validate_tool_input_valid_json(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = '{"key": "value", "number": 42, "flag": true}' + expected_arguments = {"key": "value", "number": 42, "flag": True} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_python_dict(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = "{'key': 'value', 'number': 42, 'flag': True}" + expected_arguments = {"key": "value", "number": 42, "flag": True} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_json5_unquoted_keys(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = "{key: 'value', number: 42, flag: true}" + expected_arguments = {"key": "value", "number": 42, "flag": True} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_with_trailing_commas(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = '{"key": "value", "number": 42, "flag": true,}' + expected_arguments = {"key": "value", "number": 42, "flag": True} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_invalid_input(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + invalid_inputs = [ + "Just a string", + "['list', 'of', 'values']", + "12345", + "", + ] + + for invalid_input in invalid_inputs: + with pytest.raises(Exception) as e_info: + tool_usage._validate_tool_input(invalid_input) + assert ( + "Tool input must be a valid dictionary in JSON or Python literal format" + in str(e_info.value) + ) + + # Test for None input separately + arguments = tool_usage._validate_tool_input(None) + assert arguments == {} # Expecting an empty dictionary + + +def test_validate_tool_input_complex_structure(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = """ + { + "user": { + "name": "Alice", + "age": 30 + }, + "items": [ + {"id": 1, "value": "Item1"}, + {"id": 2, "value": "Item2",} + ], + "active": true, + } + """ + expected_arguments = { + "user": {"name": "Alice", "age": 30}, + "items": [ + {"id": 1, "value": "Item1"}, + {"id": 2, "value": "Item2"}, + ], + "active": True, + } + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_code_content(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = '{"filename": "script.py", "content": "def hello():\\n print(\'Hello, world!\')"}' + expected_arguments = { + "filename": "script.py", + "content": "def hello():\n print('Hello, world!')", + } + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_with_escaped_quotes(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + tool_input = '{"text": "He said, \\"Hello, world!\\""}' + expected_arguments = {"text": 'He said, "Hello, world!"'} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_large_json_content(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + # Simulate a large JSON content + tool_input = ( + '{"data": ' + json.dumps([{"id": i, "value": i * 2} for i in range(1000)]) + "}" + ) + expected_arguments = {"data": [{"id": i, "value": i * 2} for i in range(1000)]} + + arguments = tool_usage._validate_tool_input(tool_input) + assert arguments == expected_arguments + + +def test_validate_tool_input_none_input(): + tool_usage = ToolUsage( + tools_handler=MagicMock(), + tools=[], + original_tools=[], + tools_description="", + tools_names="", + task=MagicMock(), + function_calling_llm=None, + agent=MagicMock(), + action=MagicMock(), + ) + + arguments = tool_usage._validate_tool_input(None) + assert arguments == {} # Expecting an empty dictionary diff --git a/uv.lock b/uv.lock index f38c1d582..b925fd95f 100644 --- a/uv.lock +++ b/uv.lock @@ -659,6 +659,7 @@ dependencies = [ { name = "click" }, { name = "instructor" }, { name = "json-repair" }, + { name = "json5" }, { name = "jsonref" }, { name = "litellm" }, { name = "openai" }, @@ -737,6 +738,7 @@ requires-dist = [ { name = "fastembed", marker = "extra == 'fastembed'", specifier = ">=0.4.1" }, { name = "instructor", specifier = ">=1.3.3" }, { name = "json-repair", specifier = ">=0.25.2" }, + { name = "json5", specifier = ">=0.10.0" }, { name = "jsonref", specifier = ">=1.1.0" }, { name = "litellm", specifier = "==1.57.4" }, { name = "mem0ai", marker = "extra == 'mem0'", specifier = ">=0.1.29" }, @@ -2077,6 +2079,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/38/34cb843cee4c5c27aa5c822e90e99bf96feb3dfa705713b5b6e601d17f5c/json_repair-0.30.0-py3-none-any.whl", hash = "sha256:bda4a5552dc12085c6363ff5acfcdb0c9cafc629989a2112081b7e205828228d", size = 17641 }, ] +[[package]] +name = "json5" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/3d/bbe62f3d0c05a689c711cff57b2e3ac3d3e526380adb7c781989f075115c/json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559", size = 48202 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa", size = 34049 }, +] + [[package]] name = "jsonlines" version = "3.1.0" From 5263df24b6f46af93ebb32ed2107d67c9692a6ac Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:41:26 -0500 Subject: [PATCH 13/43] quick fix for mike (#1987) --- src/crewai/cli/templates/crew/.gitignore | 1 + src/crewai/cli/templates/flow/.gitignore | 1 + 2 files changed, 2 insertions(+) diff --git a/src/crewai/cli/templates/crew/.gitignore b/src/crewai/cli/templates/crew/.gitignore index d50a09fc9..7279347af 100644 --- a/src/crewai/cli/templates/crew/.gitignore +++ b/src/crewai/cli/templates/crew/.gitignore @@ -1,2 +1,3 @@ .env __pycache__/ +.DS_Store diff --git a/src/crewai/cli/templates/flow/.gitignore b/src/crewai/cli/templates/flow/.gitignore index 02dc677b9..3b6f1bec0 100644 --- a/src/crewai/cli/templates/flow/.gitignore +++ b/src/crewai/cli/templates/flow/.gitignore @@ -1,3 +1,4 @@ .env __pycache__/ lib/ +.DS_Store From c310044bec6df4978e28ee26de8a81eafecb5ab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moura?= Date: Tue, 28 Jan 2025 10:29:53 -0300 Subject: [PATCH 14/43] preparing new version --- pyproject.toml | 2 +- src/crewai/__init__.py | 2 +- src/crewai/cli/templates/crew/pyproject.toml | 2 +- src/crewai/cli/templates/flow/pyproject.toml | 2 +- src/crewai/cli/templates/tool/pyproject.toml | 2 +- src/crewai/utilities/evaluators/task_evaluator.py | 6 +++--- uv.lock | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4a9343697..26fe4a6b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "crewai" -version = "0.98.0" +version = "0.100.0" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." readme = "README.md" requires-python = ">=3.10,<3.13" diff --git a/src/crewai/__init__.py b/src/crewai/__init__.py index d53537c15..dcef6463e 100644 --- a/src/crewai/__init__.py +++ b/src/crewai/__init__.py @@ -14,7 +14,7 @@ warnings.filterwarnings( category=UserWarning, module="pydantic.main", ) -__version__ = "0.98.0" +__version__ = "0.100.0" __all__ = [ "Agent", "Crew", diff --git a/src/crewai/cli/templates/crew/pyproject.toml b/src/crewai/cli/templates/crew/pyproject.toml index a3d13019d..d9308221e 100644 --- a/src/crewai/cli/templates/crew/pyproject.toml +++ b/src/crewai/cli/templates/crew/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.98.0,<1.0.0" + "crewai[tools]>=0.100.0,<1.0.0" ] [project.scripts] diff --git a/src/crewai/cli/templates/flow/pyproject.toml b/src/crewai/cli/templates/flow/pyproject.toml index 8aa7978ed..04355f14c 100644 --- a/src/crewai/cli/templates/flow/pyproject.toml +++ b/src/crewai/cli/templates/flow/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.98.0,<1.0.0", + "crewai[tools]>=0.100.0,<1.0.0", ] [project.scripts] diff --git a/src/crewai/cli/templates/tool/pyproject.toml b/src/crewai/cli/templates/tool/pyproject.toml index 343cbe203..027a92e25 100644 --- a/src/crewai/cli/templates/tool/pyproject.toml +++ b/src/crewai/cli/templates/tool/pyproject.toml @@ -5,7 +5,7 @@ description = "Power up your crews with {{folder_name}}" readme = "README.md" requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.98.0" + "crewai[tools]>=0.100.0" ] [tool.crewai] diff --git a/src/crewai/utilities/evaluators/task_evaluator.py b/src/crewai/utilities/evaluators/task_evaluator.py index f7d543ae4..acfdceed6 100644 --- a/src/crewai/utilities/evaluators/task_evaluator.py +++ b/src/crewai/utilities/evaluators/task_evaluator.py @@ -96,9 +96,9 @@ class TaskEvaluator: final_aggregated_data = "" for _, data in output_training_data.items(): final_aggregated_data += ( - f"Initial Output:\n{data['initial_output']}\n\n" - f"Human Feedback:\n{data['human_feedback']}\n\n" - f"Improved Output:\n{data['improved_output']}\n\n" + f"Initial Output:\n{data.get('initial_output', '')}\n\n" + f"Human Feedback:\n{data.get('human_feedback', '')}\n\n" + f"Improved Output:\n{data.get('improved_output', '')}\n\n" ) evaluation_query = ( diff --git a/uv.lock b/uv.lock index b925fd95f..41bbd7a64 100644 --- a/uv.lock +++ b/uv.lock @@ -649,7 +649,7 @@ wheels = [ [[package]] name = "crewai" -version = "0.98.0" +version = "0.100.0" source = { editable = "." } dependencies = [ { name = "appdirs" }, From bcb7fb27d096cd95f034610a251969b5026c36f6 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Tue, 28 Jan 2025 11:54:53 -0500 Subject: [PATCH 15/43] Fix (#1990) * Fix * drop failing files --- ...\"Futel Official Infopoint\" -True].yaml" | 117 ----------------- ... FUTEL\\nOFFICIAL INFOPOINT -True].yaml" | 119 ------------------ ...g[\"Futel Official Infopoint\"-True].yaml" | 114 ----------------- ...tching[Futel Official Infopoint-True].yaml | 119 ------------------ ...ng[Futel Official Infopoint\\n-True].yaml" | 119 ------------------ tests/test_manager_llm_delegation.py | 51 -------- 6 files changed, 639 deletions(-) delete mode 100644 "tests/cassettes/test_agent_tool_role_matching[ \"Futel Official Infopoint\" -True].yaml" delete mode 100644 "tests/cassettes/test_agent_tool_role_matching[ FUTEL\\nOFFICIAL INFOPOINT -True].yaml" delete mode 100644 "tests/cassettes/test_agent_tool_role_matching[\"Futel Official Infopoint\"-True].yaml" delete mode 100644 tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint-True].yaml delete mode 100644 "tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint\\n-True].yaml" delete mode 100644 tests/test_manager_llm_delegation.py diff --git "a/tests/cassettes/test_agent_tool_role_matching[ \"Futel Official Infopoint\" -True].yaml" "b/tests/cassettes/test_agent_tool_role_matching[ \"Futel Official Infopoint\" -True].yaml" deleted file mode 100644 index 99c9d5ea2..000000000 --- "a/tests/cassettes/test_agent_tool_role_matching[ \"Futel Official Infopoint\" -True].yaml" +++ /dev/null @@ -1,117 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "system", "content": "You are Futel Official Infopoint. - Futel Football Club info\nYour personal goal is: Answer questions about Futel\nTo - give my best complete final answer to the task respond using the exact following - format:\n\nThought: I now can give a great answer\nFinal Answer: Your final - answer must be the great and the most complete as possible, it must be outcome - described.\n\nI MUST use these formats, my job depends on it!"}, {"role": "user", - "content": "\nCurrent Task: Test task\n\nThis is the expect criteria for your - final answer: Your best answer to your coworker asking you this, accounting - for the context shared.\nyou MUST return the actual complete content as the - final answer, not a summary.\n\nBegin! This is VERY important to you, use the - tools available and give your best Final Answer, your job depends on it!\n\nThought:"}], - "model": "gpt-4o", "stop": ["\nObservation:"], "stream": false}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '939' - content-type: - - application/json - cookie: - - __cf_bm=cwWdOaPJjFMNJaLtJfa8Kjqavswg5bzVRFzBX4gneGw-1736458417-1.0.1.1-bvf2HshgcMtgn7GdxqwySFDAIacGccDFfEXniBFTTDmbGMCiIIwf6t2DiwWnBldmUHixwc5kDO9gYs08g.feBA; - _cfuvid=WMw7PSqkYqQOieguBRs0uNkwNU92A.ZKbgDbCAcV3EQ-1736458417825-0.0.1.1-604800000 - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.52.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.52.1 - x-stainless-raw-response: - - 'true' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.7 - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - content: "{\n \"id\": \"chatcmpl-AnuRlxiTxduAVoXHHY58Fvfbll5IS\",\n \"object\": - \"chat.completion\",\n \"created\": 1736458417,\n \"model\": \"gpt-4o-2024-08-06\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: This is a test task, and the context or question from the coworker is - not specified. Therefore, my best effort would be to affirm my readiness to - answer accurately and in detail any question about Futel Football Club based - on the context described. If provided with specific information or questions, - I will ensure to respond comprehensively as required by my job directives.\",\n - \ \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": - \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 177,\n \"completion_tokens\": - 82,\n \"total_tokens\": 259,\n \"prompt_tokens_details\": {\n \"cached_tokens\": - 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n - \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_703d4ff298\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8ff78bf7bd6cc002-ATL - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 09 Jan 2025 21:33:40 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '2263' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '30000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '29999786' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_7c1a31da73cd103e9f410f908e59187f - http_version: HTTP/1.1 - status_code: 200 -version: 1 diff --git "a/tests/cassettes/test_agent_tool_role_matching[ FUTEL\\nOFFICIAL INFOPOINT -True].yaml" "b/tests/cassettes/test_agent_tool_role_matching[ FUTEL\\nOFFICIAL INFOPOINT -True].yaml" deleted file mode 100644 index 25129c6c8..000000000 --- "a/tests/cassettes/test_agent_tool_role_matching[ FUTEL\\nOFFICIAL INFOPOINT -True].yaml" +++ /dev/null @@ -1,119 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "system", "content": "You are Futel Official Infopoint. - Futel Football Club info\nYour personal goal is: Answer questions about Futel\nTo - give my best complete final answer to the task respond using the exact following - format:\n\nThought: I now can give a great answer\nFinal Answer: Your final - answer must be the great and the most complete as possible, it must be outcome - described.\n\nI MUST use these formats, my job depends on it!"}, {"role": "user", - "content": "\nCurrent Task: Test task\n\nThis is the expect criteria for your - final answer: Your best answer to your coworker asking you this, accounting - for the context shared.\nyou MUST return the actual complete content as the - final answer, not a summary.\n\nBegin! This is VERY important to you, use the - tools available and give your best Final Answer, your job depends on it!\n\nThought:"}], - "model": "gpt-4o", "stop": ["\nObservation:"], "stream": false}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '939' - content-type: - - application/json - cookie: - - __cf_bm=cwWdOaPJjFMNJaLtJfa8Kjqavswg5bzVRFzBX4gneGw-1736458417-1.0.1.1-bvf2HshgcMtgn7GdxqwySFDAIacGccDFfEXniBFTTDmbGMCiIIwf6t2DiwWnBldmUHixwc5kDO9gYs08g.feBA; - _cfuvid=WMw7PSqkYqQOieguBRs0uNkwNU92A.ZKbgDbCAcV3EQ-1736458417825-0.0.1.1-604800000 - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.52.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.52.1 - x-stainless-raw-response: - - 'true' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.7 - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - content: "{\n \"id\": \"chatcmpl-AnuRrFJZGKw8cIEshvuW1PKwFZFKs\",\n \"object\": - \"chat.completion\",\n \"created\": 1736458423,\n \"model\": \"gpt-4o-2024-08-06\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: Although you mentioned this being a \\\"Test task\\\" and haven't provided - a specific question regarding Futel Football Club, your request appears to involve - ensuring accuracy and detail in responses. For a proper answer about Futel, - I'd be ready to provide details about the club's history, management, players, - match schedules, and recent performance statistics. Remember to ask specific - questions to receive a targeted response. If this were a real context where - information was shared, I would respond precisely to what's been asked regarding - Futel Football Club.\",\n \"refusal\": null\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 177,\n \"completion_tokens\": 113,\n \"total_tokens\": 290,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_703d4ff298\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8ff78c1d0ecdc002-ATL - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 09 Jan 2025 21:33:47 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '3097' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '30000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '29999786' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_179e1d56e2b17303e40480baffbc7b08 - http_version: HTTP/1.1 - status_code: 200 -version: 1 diff --git "a/tests/cassettes/test_agent_tool_role_matching[\"Futel Official Infopoint\"-True].yaml" "b/tests/cassettes/test_agent_tool_role_matching[\"Futel Official Infopoint\"-True].yaml" deleted file mode 100644 index 57705d771..000000000 --- "a/tests/cassettes/test_agent_tool_role_matching[\"Futel Official Infopoint\"-True].yaml" +++ /dev/null @@ -1,114 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "system", "content": "You are Futel Official Infopoint. - Futel Football Club info\nYour personal goal is: Answer questions about Futel\nTo - give my best complete final answer to the task respond using the exact following - format:\n\nThought: I now can give a great answer\nFinal Answer: Your final - answer must be the great and the most complete as possible, it must be outcome - described.\n\nI MUST use these formats, my job depends on it!"}, {"role": "user", - "content": "\nCurrent Task: Test task\n\nThis is the expect criteria for your - final answer: Your best answer to your coworker asking you this, accounting - for the context shared.\nyou MUST return the actual complete content as the - final answer, not a summary.\n\nBegin! This is VERY important to you, use the - tools available and give your best Final Answer, your job depends on it!\n\nThought:"}], - "model": "gpt-4o", "stop": ["\nObservation:"], "stream": false}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '939' - content-type: - - application/json - cookie: - - __cf_bm=cwWdOaPJjFMNJaLtJfa8Kjqavswg5bzVRFzBX4gneGw-1736458417-1.0.1.1-bvf2HshgcMtgn7GdxqwySFDAIacGccDFfEXniBFTTDmbGMCiIIwf6t2DiwWnBldmUHixwc5kDO9gYs08g.feBA; - _cfuvid=WMw7PSqkYqQOieguBRs0uNkwNU92A.ZKbgDbCAcV3EQ-1736458417825-0.0.1.1-604800000 - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.52.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.52.1 - x-stainless-raw-response: - - 'true' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.7 - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - content: "{\n \"id\": \"chatcmpl-AnuRqgg7eiHnDi2DOqdk99fiqOboz\",\n \"object\": - \"chat.completion\",\n \"created\": 1736458422,\n \"model\": \"gpt-4o-2024-08-06\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: Your best answer to your coworker asking you this, accounting for the - context shared. You MUST return the actual complete content as the final answer, - not a summary.\",\n \"refusal\": null\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 177,\n \"completion_tokens\": 44,\n \"total_tokens\": 221,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_703d4ff298\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8ff78c164ad2c002-ATL - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 09 Jan 2025 21:33:43 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '899' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '30000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '29999786' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_9f5226208edb90a27987aaf7e0ca03d3 - http_version: HTTP/1.1 - status_code: 200 -version: 1 diff --git a/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint-True].yaml b/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint-True].yaml deleted file mode 100644 index f9163dd91..000000000 --- a/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint-True].yaml +++ /dev/null @@ -1,119 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "system", "content": "You are Futel Official Infopoint. - Futel Football Club info\nYour personal goal is: Answer questions about Futel\nTo - give my best complete final answer to the task respond using the exact following - format:\n\nThought: I now can give a great answer\nFinal Answer: Your final - answer must be the great and the most complete as possible, it must be outcome - described.\n\nI MUST use these formats, my job depends on it!"}, {"role": "user", - "content": "\nCurrent Task: Test task\n\nThis is the expect criteria for your - final answer: Your best answer to your coworker asking you this, accounting - for the context shared.\nyou MUST return the actual complete content as the - final answer, not a summary.\n\nBegin! This is VERY important to you, use the - tools available and give your best Final Answer, your job depends on it!\n\nThought:"}], - "model": "gpt-4o", "stop": ["\nObservation:"], "stream": false}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '939' - content-type: - - application/json - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.52.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.52.1 - x-stainless-raw-response: - - 'true' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.7 - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - content: "{\n \"id\": \"chatcmpl-AnuRjmwH5mrykLxQhFwTqqTiDtuTf\",\n \"object\": - \"chat.completion\",\n \"created\": 1736458415,\n \"model\": \"gpt-4o-2024-08-06\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: As this is a test task, please note that Futel Football Club is fictional - and any specific details about it would not be available. However, if you have - specific questions or need information about a particular aspect of Futel or - any general football club inquiry, feel free to ask, and I'll do my best to - assist you with your query!\",\n \"refusal\": null\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 177,\n \"completion_tokens\": 79,\n \"total_tokens\": 256,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_703d4ff298\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8ff78be5eebfc002-ATL - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 09 Jan 2025 21:33:37 GMT - Server: - - cloudflare - Set-Cookie: - - __cf_bm=cwWdOaPJjFMNJaLtJfa8Kjqavswg5bzVRFzBX4gneGw-1736458417-1.0.1.1-bvf2HshgcMtgn7GdxqwySFDAIacGccDFfEXniBFTTDmbGMCiIIwf6t2DiwWnBldmUHixwc5kDO9gYs08g.feBA; - path=/; expires=Thu, 09-Jan-25 22:03:37 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=WMw7PSqkYqQOieguBRs0uNkwNU92A.ZKbgDbCAcV3EQ-1736458417825-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '2730' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '30000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '29999786' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_014478ba748f860d10ac250ca0ba824a - http_version: HTTP/1.1 - status_code: 200 -version: 1 diff --git "a/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint\\n-True].yaml" "b/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint\\n-True].yaml" deleted file mode 100644 index e093f57f8..000000000 --- "a/tests/cassettes/test_agent_tool_role_matching[Futel Official Infopoint\\n-True].yaml" +++ /dev/null @@ -1,119 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "system", "content": "You are Futel Official Infopoint. - Futel Football Club info\nYour personal goal is: Answer questions about Futel\nTo - give my best complete final answer to the task respond using the exact following - format:\n\nThought: I now can give a great answer\nFinal Answer: Your final - answer must be the great and the most complete as possible, it must be outcome - described.\n\nI MUST use these formats, my job depends on it!"}, {"role": "user", - "content": "\nCurrent Task: Test task\n\nThis is the expect criteria for your - final answer: Your best answer to your coworker asking you this, accounting - for the context shared.\nyou MUST return the actual complete content as the - final answer, not a summary.\n\nBegin! This is VERY important to you, use the - tools available and give your best Final Answer, your job depends on it!\n\nThought:"}], - "model": "gpt-4o", "stop": ["\nObservation:"], "stream": false}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '939' - content-type: - - application/json - cookie: - - __cf_bm=cwWdOaPJjFMNJaLtJfa8Kjqavswg5bzVRFzBX4gneGw-1736458417-1.0.1.1-bvf2HshgcMtgn7GdxqwySFDAIacGccDFfEXniBFTTDmbGMCiIIwf6t2DiwWnBldmUHixwc5kDO9gYs08g.feBA; - _cfuvid=WMw7PSqkYqQOieguBRs0uNkwNU92A.ZKbgDbCAcV3EQ-1736458417825-0.0.1.1-604800000 - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.52.1 - x-stainless-arch: - - arm64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.52.1 - x-stainless-raw-response: - - 'true' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.7 - method: POST - uri: https://api.openai.com/v1/chat/completions - response: - content: "{\n \"id\": \"chatcmpl-AnuRofLgmzWcDya5LILqYwIJYgFoq\",\n \"object\": - \"chat.completion\",\n \"created\": 1736458420,\n \"model\": \"gpt-4o-2024-08-06\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: As an official Futel Football Club infopoint, my responsibility is to - provide detailed and accurate information about the club. This includes answering - questions regarding team statistics, player performances, upcoming fixtures, - ticketing and fan zone details, club history, and community initiatives. Our - focus is to ensure that fans and stakeholders have access to the latest and - most precise information about the club's on and off-pitch activities. If there's - anything specific you need to know, just let me know, and I'll be more than - happy to assist!\",\n \"refusal\": null\n },\n \"logprobs\": - null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 177,\n \"completion_tokens\": 115,\n \"total_tokens\": 292,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_703d4ff298\"\n}\n" - headers: - CF-Cache-Status: - - DYNAMIC - CF-RAY: - - 8ff78c066f37c002-ATL - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Thu, 09 Jan 2025 21:33:42 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '2459' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '30000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '29999786' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_a146dd27f040f39a576750970cca0f52 - http_version: HTTP/1.1 - status_code: 200 -version: 1 diff --git a/tests/test_manager_llm_delegation.py b/tests/test_manager_llm_delegation.py deleted file mode 100644 index 0cab92d43..000000000 --- a/tests/test_manager_llm_delegation.py +++ /dev/null @@ -1,51 +0,0 @@ -import pytest - -from crewai import Agent -from crewai.tools.agent_tools.base_agent_tools import BaseAgentTool - - -class InternalAgentTool(BaseAgentTool): - """Concrete implementation of BaseAgentTool for testing.""" - - def _run(self, *args, **kwargs): - """Implement required _run method.""" - return "Test response" - - -@pytest.mark.parametrize( - "role_name,should_match", - [ - ("Futel Official Infopoint", True), # exact match - (' "Futel Official Infopoint" ', True), # extra quotes and spaces - ("Futel Official Infopoint\n", True), # trailing newline - ('"Futel Official Infopoint"', True), # embedded quotes - (" FUTEL\nOFFICIAL INFOPOINT ", True), # multiple whitespace and newline - ], -) -@pytest.mark.vcr(filter_headers=["authorization"]) -def test_agent_tool_role_matching(role_name, should_match): - """Test that agent tools can match roles regardless of case, whitespace, and special characters.""" - # Create test agent - test_agent = Agent( - role="Futel Official Infopoint", - goal="Answer questions about Futel", - backstory="Futel Football Club info", - allow_delegation=False, - ) - - # Create test agent tool - agent_tool = InternalAgentTool( - name="test_tool", description="Test tool", agents=[test_agent] - ) - - # Test role matching - result = agent_tool._execute(agent_name=role_name, task="Test task", context=None) - - if should_match: - assert ( - "coworker mentioned not found" not in result.lower() - ), f"Should find agent with role name: {role_name}" - else: - assert ( - "coworker mentioned not found" in result.lower() - ), f"Should not find agent with role name: {role_name}" From cba8c9faec061f531112b095dd4fd0a417be5685 Mon Sep 17 00:00:00 2001 From: Brandon Hancock Date: Tue, 28 Jan 2025 12:23:06 -0500 Subject: [PATCH 16/43] update litellm --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 26fe4a6b5..a8d0b8c47 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ # Core Dependencies "pydantic>=2.4.2", "openai>=1.13.3", - "litellm==1.57.4", + "litellm==1.59.8", "instructor>=1.3.3", # Text Processing "pdfplumber>=0.11.4", diff --git a/uv.lock b/uv.lock index 41bbd7a64..3ba4e0212 100644 --- a/uv.lock +++ b/uv.lock @@ -740,7 +740,7 @@ requires-dist = [ { name = "json-repair", specifier = ">=0.25.2" }, { name = "json5", specifier = ">=0.10.0" }, { name = "jsonref", specifier = ">=1.1.0" }, - { name = "litellm", specifier = "==1.57.4" }, + { name = "litellm", specifier = "==1.59.8" }, { name = "mem0ai", marker = "extra == 'mem0'", specifier = ">=0.1.29" }, { name = "openai", specifier = ">=1.13.3" }, { name = "openpyxl", specifier = ">=3.1.5" }, @@ -2374,7 +2374,7 @@ wheels = [ [[package]] name = "litellm" -version = "1.57.4" +version = "1.59.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -2389,9 +2389,9 @@ dependencies = [ { name = "tiktoken" }, { name = "tokenizers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/9a/115bde058901b087e7fec1bed4be47baf8d5c78aff7dd2ffebcb922003ff/litellm-1.57.4.tar.gz", hash = "sha256:747a870ddee9c71f9560fc68ad02485bc1008fcad7d7a43e87867a59b8ed0669", size = 6304427 } +sdist = { url = "https://files.pythonhosted.org/packages/86/b0/c8ec06bd1c87a92d6d824008982b3c82b450d7bd3be850a53913f1ac4907/litellm-1.59.8.tar.gz", hash = "sha256:9d645cc4460f6a9813061f07086648c4c3d22febc8e1f21c663f2b7750d90512", size = 6428607 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/72/35c8509cb2a37343c213b794420405cbef2e1fdf8626ee981fcbba3d7c5c/litellm-1.57.4-py3-none-any.whl", hash = "sha256:afe48924d8a36db801018970a101622fce33d117fe9c54441c0095c491511abb", size = 6592126 }, + { url = "https://files.pythonhosted.org/packages/b9/38/889da058f566ef9ea321aafa25e423249492cf2a508dfdc0e5acfcf04526/litellm-1.59.8-py3-none-any.whl", hash = "sha256:2473914bd2343485a185dfe7eedb12ee5fda32da3c9d9a8b73f6966b9b20cf39", size = 6716233 }, ] [[package]] From a3ad2c1957111764295a10630ab5d300e29bc1b2 Mon Sep 17 00:00:00 2001 From: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> Date: Wed, 29 Jan 2025 06:37:22 -0800 Subject: [PATCH 17/43] fix breakage when cloning agent/crew using knowledge_sources and enable custom knowledge_storage (#1927) * fix breakage when cloning agent/crew using knowledge_sources * fixed typo * better * ensure use of other knowledge storage works * fix copy and custom storage * added tests * normalized name * updated cassette * fix test * remove fixture * fixed test * fix * add fixture to this * add fixture to this * patch twice since * fix again * with fixtures * better mocks * fix * simple * try * another * hopefully fixes test * hopefully fixes test * this should fix it ! * WIP: test check with prints * try this * exclude knowledge * fixes * just drop clone for now * rm print statements * printing agent_copy * checker * linted * cleanup * better docs --------- Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- docs/concepts/agents.mdx | 4 +- docs/concepts/knowledge.mdx | 7 + src/crewai/agent.py | 19 +- src/crewai/agents/agent_builder/base_agent.py | 50 ++++- src/crewai/crew.py | 23 +- src/crewai/knowledge/knowledge.py | 25 ++- .../source/base_file_knowledge_source.py | 8 +- .../knowledge/storage/knowledge_storage.py | 16 +- .../utilities/embedding_configurator.py | 1 - tests/agent_test.py | 42 +++- ...ith_knowledge_sources_works_with_copy.yaml | 206 ++++++++++++++++++ ...ith_knowledge_sources_works_with_copy.yaml | 206 ++++++++++++++++++ tests/crew_test.py | 111 ++++++---- 13 files changed, 626 insertions(+), 92 deletions(-) create mode 100644 tests/cassettes/test_agent_with_knowledge_sources_works_with_copy.yaml create mode 100644 tests/cassettes/test_crew_with_knowledge_sources_works_with_copy.yaml diff --git a/docs/concepts/agents.mdx b/docs/concepts/agents.mdx index 2f81138a7..b81099386 100644 --- a/docs/concepts/agents.mdx +++ b/docs/concepts/agents.mdx @@ -43,7 +43,7 @@ Think of an agent as a specialized team member with specific skills, expertise, | **Max Retry Limit** _(optional)_ | `max_retry_limit` | `int` | Maximum number of retries when an error occurs. Default is 2. | | **Respect Context Window** _(optional)_ | `respect_context_window` | `bool` | Keep messages under context window size by summarizing. Default is True. | | **Code Execution Mode** _(optional)_ | `code_execution_mode` | `Literal["safe", "unsafe"]` | Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct). Default is 'safe'. | -| **Embedder Config** _(optional)_ | `embedder_config` | `Optional[Dict[str, Any]]` | Configuration for the embedder used by the agent. | +| **Embedder** _(optional)_ | `embedder` | `Optional[Dict[str, Any]]` | Configuration for the embedder used by the agent. | | **Knowledge Sources** _(optional)_ | `knowledge_sources` | `Optional[List[BaseKnowledgeSource]]` | Knowledge sources available to the agent. | | **Use System Prompt** _(optional)_ | `use_system_prompt` | `Optional[bool]` | Whether to use system prompt (for o1 model support). Default is True. | @@ -152,7 +152,7 @@ agent = Agent( use_system_prompt=True, # Default: True tools=[SerperDevTool()], # Optional: List of tools knowledge_sources=None, # Optional: List of knowledge sources - embedder_config=None, # Optional: Custom embedder configuration + embedder=None, # Optional: Custom embedder configuration system_template=None, # Optional: Custom system prompt template prompt_template=None, # Optional: Custom prompt template response_template=None, # Optional: Custom response template diff --git a/docs/concepts/knowledge.mdx b/docs/concepts/knowledge.mdx index e4e40ba3e..78443ecab 100644 --- a/docs/concepts/knowledge.mdx +++ b/docs/concepts/knowledge.mdx @@ -324,6 +324,13 @@ agent = Agent( verbose=True, allow_delegation=False, llm=gemini_llm, + embedder={ + "provider": "google", + "config": { + "model": "models/text-embedding-004", + "api_key": GEMINI_API_KEY, + } + } ) task = Task( diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 3a4d083d4..dec0effd7 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -61,6 +61,7 @@ class Agent(BaseAgent): tools: Tools at agents disposal step_callback: Callback to be executed after each step of the agent execution. knowledge_sources: Knowledge sources for the agent. + embedder: Embedder configuration for the agent. """ _times_executed: int = PrivateAttr(default=0) @@ -122,17 +123,10 @@ class Agent(BaseAgent): default="safe", description="Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct execution).", ) - embedder_config: Optional[Dict[str, Any]] = Field( + embedder: Optional[Dict[str, Any]] = Field( default=None, description="Embedder configuration for the agent.", ) - knowledge_sources: Optional[List[BaseKnowledgeSource]] = Field( - default=None, - description="Knowledge sources for the agent.", - ) - _knowledge: Optional[Knowledge] = PrivateAttr( - default=None, - ) @model_validator(mode="after") def post_init_setup(self): @@ -163,10 +157,11 @@ class Agent(BaseAgent): if isinstance(self.knowledge_sources, list) and all( isinstance(k, BaseKnowledgeSource) for k in self.knowledge_sources ): - self._knowledge = Knowledge( + self.knowledge = Knowledge( sources=self.knowledge_sources, - embedder_config=self.embedder_config, + embedder=self.embedder, collection_name=knowledge_agent_name, + storage=self.knowledge_storage or None, ) except (TypeError, ValueError) as e: raise ValueError(f"Invalid Knowledge Configuration: {str(e)}") @@ -225,8 +220,8 @@ class Agent(BaseAgent): if memory.strip() != "": task_prompt += self.i18n.slice("memory").format(memory=memory) - if self._knowledge: - agent_knowledge_snippets = self._knowledge.query([task.prompt()]) + if self.knowledge: + agent_knowledge_snippets = self.knowledge.query([task.prompt()]) if agent_knowledge_snippets: agent_knowledge_context = extract_knowledge_context( agent_knowledge_snippets diff --git a/src/crewai/agents/agent_builder/base_agent.py b/src/crewai/agents/agent_builder/base_agent.py index 207a1769a..a8c829a2a 100644 --- a/src/crewai/agents/agent_builder/base_agent.py +++ b/src/crewai/agents/agent_builder/base_agent.py @@ -18,6 +18,8 @@ from pydantic_core import PydanticCustomError from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess from crewai.agents.cache.cache_handler import CacheHandler from crewai.agents.tools_handler import ToolsHandler +from crewai.knowledge.knowledge import Knowledge +from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource from crewai.tools import BaseTool from crewai.tools.base_tool import Tool from crewai.utilities import I18N, Logger, RPMController @@ -48,6 +50,8 @@ class BaseAgent(ABC, BaseModel): cache_handler (InstanceOf[CacheHandler]): An instance of the CacheHandler class. tools_handler (InstanceOf[ToolsHandler]): An instance of the ToolsHandler class. max_tokens: Maximum number of tokens for the agent to generate in a response. + knowledge_sources: Knowledge sources for the agent. + knowledge_storage: Custom knowledge storage for the agent. Methods: @@ -130,6 +134,17 @@ class BaseAgent(ABC, BaseModel): max_tokens: Optional[int] = Field( default=None, description="Maximum number of tokens for the agent's execution." ) + knowledge: Optional[Knowledge] = Field( + default=None, description="Knowledge for the agent." + ) + knowledge_sources: Optional[List[BaseKnowledgeSource]] = Field( + default=None, + description="Knowledge sources for the agent.", + ) + knowledge_storage: Optional[Any] = Field( + default=None, + description="Custom knowledge storage for the agent.", + ) @model_validator(mode="before") @classmethod @@ -256,13 +271,44 @@ class BaseAgent(ABC, BaseModel): "tools_handler", "cache_handler", "llm", + "knowledge_sources", + "knowledge_storage", + "knowledge", } - # Copy llm and clear callbacks + # Copy llm existing_llm = shallow_copy(self.llm) + copied_knowledge = shallow_copy(self.knowledge) + copied_knowledge_storage = shallow_copy(self.knowledge_storage) + # Properly copy knowledge sources if they exist + existing_knowledge_sources = None + if self.knowledge_sources: + # Create a shared storage instance for all knowledge sources + shared_storage = ( + self.knowledge_sources[0].storage if self.knowledge_sources else None + ) + + existing_knowledge_sources = [] + for source in self.knowledge_sources: + copied_source = ( + source.model_copy() + if hasattr(source, "model_copy") + else shallow_copy(source) + ) + # Ensure all copied sources use the same storage instance + copied_source.storage = shared_storage + existing_knowledge_sources.append(copied_source) + copied_data = self.model_dump(exclude=exclude) copied_data = {k: v for k, v in copied_data.items() if v is not None} - copied_agent = type(self)(**copied_data, llm=existing_llm, tools=self.tools) + copied_agent = type(self)( + **copied_data, + llm=existing_llm, + tools=self.tools, + knowledge_sources=existing_knowledge_sources, + knowledge=copied_knowledge, + knowledge_storage=copied_knowledge_storage, + ) return copied_agent diff --git a/src/crewai/crew.py b/src/crewai/crew.py index 5d4b9ff79..b44667042 100644 --- a/src/crewai/crew.py +++ b/src/crewai/crew.py @@ -4,6 +4,7 @@ import re import uuid import warnings from concurrent.futures import Future +from copy import copy as shallow_copy from hashlib import md5 from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union @@ -210,8 +211,9 @@ class Crew(BaseModel): default=None, description="LLM used to handle chatting with the crew.", ) - _knowledge: Optional[Knowledge] = PrivateAttr( + knowledge: Optional[Knowledge] = Field( default=None, + description="Knowledge for the crew.", ) @field_validator("id", mode="before") @@ -289,7 +291,7 @@ class Crew(BaseModel): if isinstance(self.knowledge_sources, list) and all( isinstance(k, BaseKnowledgeSource) for k in self.knowledge_sources ): - self._knowledge = Knowledge( + self.knowledge = Knowledge( sources=self.knowledge_sources, embedder_config=self.embedder, collection_name="crew", @@ -991,8 +993,8 @@ class Crew(BaseModel): return result def query_knowledge(self, query: List[str]) -> Union[List[Dict[str, Any]], None]: - if self._knowledge: - return self._knowledge.query(query) + if self.knowledge: + return self.knowledge.query(query) return None def fetch_inputs(self) -> Set[str]: @@ -1036,6 +1038,8 @@ class Crew(BaseModel): "_telemetry", "agents", "tasks", + "knowledge_sources", + "knowledge", } cloned_agents = [agent.copy() for agent in self.agents] @@ -1043,6 +1047,9 @@ class Crew(BaseModel): task_mapping = {} cloned_tasks = [] + existing_knowledge_sources = shallow_copy(self.knowledge_sources) + existing_knowledge = shallow_copy(self.knowledge) + for task in self.tasks: cloned_task = task.copy(cloned_agents, task_mapping) cloned_tasks.append(cloned_task) @@ -1062,7 +1069,13 @@ class Crew(BaseModel): copied_data.pop("agents", None) copied_data.pop("tasks", None) - copied_crew = Crew(**copied_data, agents=cloned_agents, tasks=cloned_tasks) + copied_crew = Crew( + **copied_data, + agents=cloned_agents, + tasks=cloned_tasks, + knowledge_sources=existing_knowledge_sources, + knowledge=existing_knowledge, + ) return copied_crew diff --git a/src/crewai/knowledge/knowledge.py b/src/crewai/knowledge/knowledge.py index c964333c8..d1d4ede6c 100644 --- a/src/crewai/knowledge/knowledge.py +++ b/src/crewai/knowledge/knowledge.py @@ -15,20 +15,20 @@ class Knowledge(BaseModel): Args: sources: List[BaseKnowledgeSource] = Field(default_factory=list) storage: Optional[KnowledgeStorage] = Field(default=None) - embedder_config: Optional[Dict[str, Any]] = None + embedder: Optional[Dict[str, Any]] = None """ sources: List[BaseKnowledgeSource] = Field(default_factory=list) model_config = ConfigDict(arbitrary_types_allowed=True) storage: Optional[KnowledgeStorage] = Field(default=None) - embedder_config: Optional[Dict[str, Any]] = None + embedder: Optional[Dict[str, Any]] = None collection_name: Optional[str] = None def __init__( self, collection_name: str, sources: List[BaseKnowledgeSource], - embedder_config: Optional[Dict[str, Any]] = None, + embedder: Optional[Dict[str, Any]] = None, storage: Optional[KnowledgeStorage] = None, **data, ): @@ -37,25 +37,23 @@ class Knowledge(BaseModel): self.storage = storage else: self.storage = KnowledgeStorage( - embedder_config=embedder_config, collection_name=collection_name + embedder=embedder, collection_name=collection_name ) self.sources = sources self.storage.initialize_knowledge_storage() - for source in sources: - source.storage = self.storage - source.add() + self._add_sources() def query(self, query: List[str], limit: int = 3) -> List[Dict[str, Any]]: """ Query across all knowledge sources to find the most relevant information. Returns the top_k most relevant chunks. - + Raises: ValueError: If storage is not initialized. """ if self.storage is None: raise ValueError("Storage is not initialized.") - + results = self.storage.search( query, limit, @@ -63,6 +61,9 @@ class Knowledge(BaseModel): return results def _add_sources(self): - for source in self.sources: - source.storage = self.storage - source.add() + try: + for source in self.sources: + source.storage = self.storage + source.add() + except Exception as e: + raise e diff --git a/src/crewai/knowledge/source/base_file_knowledge_source.py b/src/crewai/knowledge/source/base_file_knowledge_source.py index ac345b6a6..4c4b9b337 100644 --- a/src/crewai/knowledge/source/base_file_knowledge_source.py +++ b/src/crewai/knowledge/source/base_file_knowledge_source.py @@ -29,7 +29,13 @@ class BaseFileKnowledgeSource(BaseKnowledgeSource, ABC): def validate_file_path(cls, v, info): """Validate that at least one of file_path or file_paths is provided.""" # Single check if both are None, O(1) instead of nested conditions - if v is None and info.data.get("file_path" if info.field_name == "file_paths" else "file_paths") is None: + if ( + v is None + and info.data.get( + "file_path" if info.field_name == "file_paths" else "file_paths" + ) + is None + ): raise ValueError("Either file_path or file_paths must be provided") return v diff --git a/src/crewai/knowledge/storage/knowledge_storage.py b/src/crewai/knowledge/storage/knowledge_storage.py index 4a70c5997..9e6ab8041 100644 --- a/src/crewai/knowledge/storage/knowledge_storage.py +++ b/src/crewai/knowledge/storage/knowledge_storage.py @@ -48,11 +48,11 @@ class KnowledgeStorage(BaseKnowledgeStorage): def __init__( self, - embedder_config: Optional[Dict[str, Any]] = None, + embedder: Optional[Dict[str, Any]] = None, collection_name: Optional[str] = None, ): self.collection_name = collection_name - self._set_embedder_config(embedder_config) + self._set_embedder_config(embedder) def search( self, @@ -99,7 +99,7 @@ class KnowledgeStorage(BaseKnowledgeStorage): ) if self.app: self.collection = self.app.get_or_create_collection( - name=collection_name, embedding_function=self.embedder_config + name=collection_name, embedding_function=self.embedder ) else: raise Exception("Vector Database Client not initialized") @@ -187,17 +187,15 @@ class KnowledgeStorage(BaseKnowledgeStorage): api_key=os.getenv("OPENAI_API_KEY"), model_name="text-embedding-3-small" ) - def _set_embedder_config( - self, embedder_config: Optional[Dict[str, Any]] = None - ) -> None: + def _set_embedder_config(self, embedder: Optional[Dict[str, Any]] = None) -> None: """Set the embedding configuration for the knowledge storage. Args: embedder_config (Optional[Dict[str, Any]]): Configuration dictionary for the embedder. If None or empty, defaults to the default embedding function. """ - self.embedder_config = ( - EmbeddingConfigurator().configure_embedder(embedder_config) - if embedder_config + self.embedder = ( + EmbeddingConfigurator().configure_embedder(embedder) + if embedder else self._create_default_embedding_function() ) diff --git a/src/crewai/utilities/embedding_configurator.py b/src/crewai/utilities/embedding_configurator.py index 71965bf53..875dab977 100644 --- a/src/crewai/utilities/embedding_configurator.py +++ b/src/crewai/utilities/embedding_configurator.py @@ -43,7 +43,6 @@ class EmbeddingConfigurator: raise Exception( f"Unsupported embedding provider: {provider}, supported providers: {list(self.embedding_functions.keys())}" ) - return self.embedding_functions[provider](config, model_name) @staticmethod diff --git a/tests/agent_test.py b/tests/agent_test.py index fda47daaf..b0efef82b 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -10,13 +10,14 @@ from crewai import Agent, Crew, Task from crewai.agents.cache import CacheHandler from crewai.agents.crew_agent_executor import CrewAgentExecutor from crewai.agents.parser import AgentAction, CrewAgentParser, OutputParserException +from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource from crewai.llm import LLM from crewai.tools import tool from crewai.tools.tool_calling import InstructorToolCalling from crewai.tools.tool_usage import ToolUsage from crewai.tools.tool_usage_events import ToolUsageFinished -from crewai.utilities import Printer, RPMController +from crewai.utilities import RPMController from crewai.utilities.events import Emitter @@ -1602,6 +1603,45 @@ def test_agent_with_knowledge_sources(): assert "red" in result.raw.lower() +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_agent_with_knowledge_sources_works_with_copy(): + content = "Brandon's favorite color is red and he likes Mexican food." + string_source = StringKnowledgeSource(content=content) + + with patch( + "crewai.knowledge.source.base_knowledge_source.BaseKnowledgeSource", + autospec=True, + ) as MockKnowledgeSource: + mock_knowledge_source_instance = MockKnowledgeSource.return_value + mock_knowledge_source_instance.__class__ = BaseKnowledgeSource + mock_knowledge_source_instance.sources = [string_source] + + agent = Agent( + role="Information Agent", + goal="Provide information based on knowledge sources", + backstory="You have access to specific knowledge sources.", + llm=LLM(model="gpt-4o-mini"), + knowledge_sources=[string_source], + ) + + with patch( + "crewai.knowledge.storage.knowledge_storage.KnowledgeStorage" + ) as MockKnowledgeStorage: + mock_knowledge_storage = MockKnowledgeStorage.return_value + agent.knowledge_storage = mock_knowledge_storage + + agent_copy = agent.copy() + + assert agent_copy.role == agent.role + assert agent_copy.goal == agent.goal + assert agent_copy.backstory == agent.backstory + assert agent_copy.knowledge_sources is not None + assert len(agent_copy.knowledge_sources) == 1 + assert isinstance(agent_copy.knowledge_sources[0], StringKnowledgeSource) + assert agent_copy.knowledge_sources[0].content == content + assert isinstance(agent_copy.llm, LLM) + + @pytest.mark.vcr(filter_headers=["authorization"]) def test_litellm_auth_error_handling(): """Test that LiteLLM authentication errors are handled correctly and not retried.""" diff --git a/tests/cassettes/test_agent_with_knowledge_sources_works_with_copy.yaml b/tests/cassettes/test_agent_with_knowledge_sources_works_with_copy.yaml new file mode 100644 index 000000000..176be39c8 --- /dev/null +++ b/tests/cassettes/test_agent_with_knowledge_sources_works_with_copy.yaml @@ -0,0 +1,206 @@ +interactions: +- request: + body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], + "model": "text-embedding-3-small", "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": + \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n + \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": + 12,\n \"total_tokens\": 12\n }\n}\n" + headers: + CF-RAY: + - 908b749c8cb41576-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 27 Jan 2025 20:22:34 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=NhRx2kcSiBEOhkZbWaKlY_pw46LGzb7BpUNF.ozrJrY-1738009354-1.0.1.1-naI_MYI5l4_BbeD3mwpu.Pi55FVDn3ImnfFjreNp0bbAvTuf8xOJY8HgxhE.W4XWbq247SbevyoE9aStMYq0ow; + path=/; expires=Mon, 27-Jan-25 20:52:34 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=xnfGIFZVE6LqgVkRMk6ORXsMurOmTu.z7TTz7afn810-1738009354083-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '75' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-75f99bb574-mb9tb + x-envoy-upstream-service-time: + - '29' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999986' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_4e3d0c147826a183e2848ca1df2c9da9 + http_version: HTTP/1.1 + status_code: 200 +- request: + body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], + "model": "text-embedding-3-small", "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": + \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n + \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": + 12,\n \"total_tokens\": 12\n }\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 908b749fcdbaed36-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 27 Jan 2025 20:22:34 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=hTW9TNu3pB35yAIOgg3sdy1hLtP_un1Js4.ZfsmNEXY-1738009354-1.0.1.1-pmAOhPxdO75O.Xt22Tnz_8pitmTMJY.vDeWPxXlJq3TTay0D.285FuCezcz8iy6gLi0hF9SRUc5f5xovdsaQOA; + path=/; expires=Mon, 27-Jan-25 20:52:34 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=KXf4AO65W0FpWKL_jL5Tw4Xdts32F1mkwYcniiqUZtU-1738009354603-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '113' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-5cc9fb545f-x4k6f + x-envoy-upstream-service-time: + - '74' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999986' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_7b9c56b5c3be975b8ce088f3457a52f9 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_crew_with_knowledge_sources_works_with_copy.yaml b/tests/cassettes/test_crew_with_knowledge_sources_works_with_copy.yaml new file mode 100644 index 000000000..c344ed7bd --- /dev/null +++ b/tests/cassettes/test_crew_with_knowledge_sources_works_with_copy.yaml @@ -0,0 +1,206 @@ +interactions: +- request: + body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], + "model": "text-embedding-3-small", "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": + \"embedding\",\n \"index\": 0,\n \"embedding\": \"RAzvvNZhB72TKMC6vj3KPByxsDvjnSG9nod0Pf28RT27Fx693vMfvX5KQ72FkxU9DuF2vAc8Dj1ip8m7VLkOPY5+vjxIiCW9wdyavemQabzGSAc92tD5OzbQ1Lzmw009/kAbvPi5s7ymwHw7udFdPMuJrrvQjMC8anf3O3hHsbyIucG68QSBu6RcO702oom9othlu30f/jsR6aE9BEQtPImp97y44Sc9FToTPeDQBTrIYwI8FWhePCn9FL24iJc8oY+fvGVGmjyFKru8vk0UvbiIFzuK1Dw89+d+PJI4irx0nS+9kxh2PDw8QT0IV4m8Ih2dPALQobyan129bPtMPYo9Fzs0bBO96ZBpvBlQ9bxiTrk96N5IvDBJ7bxWLRo983gMvfUaYzuSDUU9slrAvIJdHz1szYE6avAbPDbgnjyKlie9PnI3PE0ypzxyKaS7ii1NvRie1LxYz/A8FTqTvVbvhLu4H708BV8oO5mEYrxpxVY8N4L1vPWDPT0AtSY9Z7qlvCoYkDx+SkO84yR9vIqWpzu4tuK8EgQdvM6/JL3C95U8vfSDvRKbwjw6MRA9Kf0UubarMbx4R7G8tM7Lu2GMzrvJrMg8ppIxvTxnBjwmxx69GJ5UvTDdDDyKLc284yT9PCZexDxHbSq7IJnHvKYp171wDqm8hZOVO5UFJj0y6D29WgVnvB9QAb2+1G87Xr8yPZpxEr2SOAo75+4SPQX2zbvGdlK99YO9OSGJfbyuYl+7R9YEvNSy7DytsL68Gnu6PLjhp7x1uCq9E8YHvAWNcz2jbIU7zA2EvMCDijylDly9UYOYvMkVozw20FS9qfZyPbNl8bwgmUe9pvsLPU1gcj3GHcK8MWRovAZ6o7x6y4Y70gDMO4Mfir0MfbU8b/OtPB4lPLvxm6Y8BhHJvPUa4zz4UNm6BNtSPFGxYzyX4os8aNWgvHDjYz3rP4Q8xkgHOy18UT2k8+C8JCjOuSwzi7x9iNi8iPfWvJVuAL0syjC8wIOKvNIATDxSRYM9FB8YPFyJvLxYYxC9bCYSvVD/Qjzdb0q7YreTvTFk6Ls0bJO80pdxPTz+Kz3mlQI91TZCvcj6J70xzcK8/KFKPfT/5zvuk/u7qTGCPeq7rryc5R07uvyiPBRNY7tGuwk8vAdUPMuJLj0oEOU8IJnHvMlDbrzZhzM8gJADPdoLCb3ZhzO9Zd0/PFLM3jz0aEK9L8KRvInkBj09wBY9WbygOm7I6Dw8/qs8JvVpvOAOm7w6yDW98BfRvLDmtDzIUzi8rFcuvQr53ztKKvw85tMXvVbvBD3Vn5w8DlobvQ0BCz3mar07gCcpPNKnu7zmaj09/GM1ve++QDz8ocq75mq9PJ7wzrsidi29INfcPEa7Cb0VOhO9MHSyu9JppjwOStG8h478vD3u4TygC0q85I3XvHKCtDxQaJ08I8+9vKLoL73WYYc86N5IPe++QD0O4Xa9Pe7hPPgSxLvAgwq7DBTbPBR4qDzEqTY83FRPumXdv7zNlN88lQWmvMO5gDwp/RQ8QvHzvFaGqrxPpjK9BY3zu5Jm1byqesg7iPfWOsHcGjzP2h+9YHHTvNo5VDpv8608AtChPEu+mzyGrpA8Vu8EPSLfhzx4HGw81EaMuxPGhztl3b+7h55GPFAqiDoKy5Q8qAa9POBnK7300Zw6/SWgO3gc7LzFLQw9lZzLvMYdQjsDcvi8xzi9PCpWJT0a5JS8IKmRvEoq/LyK/wE9URo+PI+pAz3o3si8I7/zPPpYBL1ygjQ84VdhvCSRKD04FhW9DBRbvHvmAbzKx0M7r40kPU0yJ71NmwG9ob3qvJy62LzZ8I28sE+PvHkJnDsNmLA8NuAevWy9N7tOTSK9tm0cvDJRGDzsmBS9hHiavPlrVLrxMsy8ij0XvYQ6Bb0r+Ps57MZfvOaVAjpBEQg9GuQUPPhQ2by+5Lm9Ih0dvcrHw7xbmQY9TNkWvcIl4bx+Onk8WAoAva5yqbvgZys8BiGTPR1zG7xfGEO8OrjrPIHZyTfHoZc7It+HPPT/Zz1w4+O8pinXPOjeyLzhwLs8Tw8NvdDK1Tz67ym9yFO4O1P3I7ySOIo8u67DPKhvFzxmYRU9zhg1PAEONz1fCHm8lQWmPC4+PDw0ml68Zo9gvZUFpjwCV/27WtcbPYgiHL3ictw8YqfJO8O5gL3Saaa7tYDsvHKw/7t6UmI9bRZIu8wNhDz0/2c8RSdqvMBYxboevOE8SXjbPEu+Gz2byqK6lrfGPPCAK72A6ZM9NbVZPclD7jzSEJa8TcnMPFjPcLrSEBa93W/KOw91ljwwG6K79P/nu+mQ6bqsLGk8PzQivbDmNL3QMzC9bpqdvOS4nDyPQCk82APeO8kVozzVnxw90eVQO0X5njwcGou8YDM+PYUqO7yKLU29shwrvMO5ALwniQk954W4vEoqfDyAgDk8WM9wOsiRTTzMeeQ7oAvKvAw/IDyOFeQ7ERdtvZZO7LyY/Qa9UjU5PSXabr3B3Jo8NtDUPPqWmbusVy49FHiovMwNBL1szYG7W5mGPIbcW7zDuQC8oDYPPPJdkT2qEe47aodBuUqT1ryiQUC9OW+lPEqjID0PDDy9ALWmPFg4SzxS3Kg8soWFvITRKrwaPaW82YezPHIZ2jq3xqy78EIWPVa0db3MDQQ9dnoVPDE2HbsjOJg7XTvduR41hjtEDO88RhQaPLnR3TyqipI9N5K/u/lrVDzDUKa8nxsUvTqKoLyDti89c0SfO3q7PLy5Oji9btgyPNU2QrzSEBY9KKSEuppxkjoF9k08yaxIPI4V5Dsh8le854W4u9IQFrxOi7c8ZO2JPB1zG7x+dYi8OL2EPAhXCT3xyXG8fG1dOsrHwztzy/q7bPvMvJlWFzubUf483H8UPIkS0rzAgwo8jucYvZUFpjuFk5U88vS2PHQ01TwkUxO8BciCPGFeAzxtFsg8tgRCu0HWeDw7TAu8srPQO/dgo7wJ3mS8/VNrvSoYkDonIC899RrjO6Y5IT2gC0q8AFwWuxCQETzOv6S8pMUVvc9hezyqipI8bCYSvfSTBzuYlKw87652PCn9FLwitMI7gvREPPgiDr0Ckow8Ho6Wu+hHIzlOTSI9J4kJvdvrdDsM1sW8EGXMu4O2r7yWXra8EM4mvZAw3zzGhhw92R7ZOvUaY7zaoi69sD/Fu0JqmLzB3Bo9htzbPEpli73kXwy9acXWvKz+nTuPqYM9+lgEvVoFZ7xJeNs7ulUzPWaP4DsdCkG8KkZbPIrE8ryVboC7LCPBOuSN17zRt4W9mJSsvL49yrxgMz48Vh3QvPaugj3uk3u8BNvSvB41hrtpXPw82jlUPGK3Ez2OFWS7kg1FPbXpxrycutg83opFvW5Bjb0zqii7JPoCPAiVnjuwqB+9eQmcPND1GryvjSQ7bRZIva+NJLw+Cd089eyXuxVo3rxgcdO8Pgldu8Z20rzGSAe9liChvARErbzeIWu8Mo8tvYHZyblqh8G8pFw7vUERiDzJQ+68kxj2O6s8s7ry9LY7z3HFPKSHALwUeKi7A3J4OmKnSbw2Z/o85ahSvXFnuTo2Z3o8Z7qlPO3h2rwYntQ7acXWPPQqrbsmXkS8pB4mPcL3lTz4EkQ85T94OvlrVLxYCoC8ZCsfPKz+nbuRS1q8zf05PTaiCbwjv/M85E/CvFuZhjxyGdq6aNUgvX6zHT3kuJw8dbgqvQJnx7svWTe8LIybvZWcyzvSaaY8VOfZu2b4OrnJFSO9p+tBuwF3kTxmj2A8jEjIvIZFtjwILMQ8ZO0JPZj9BrybyiI9OQbLOjMTAzykXDu7olGKPBAntzzcfxQ96iSJPB7MKzsqViU9QCTYuxmLhDu4tuI7oAtKO7arsbsmxx68f2W+PBDOpjx1T1A85sPNPLJK9ryMsaI8wQpmu6frwbvURoy75ajSuyGJfbysLGm8CUc/vbEve7y2BEK9CCzEu3Rfmrv8OPA7+lgEO6UOXL3i27Y8qzyzu5yMDTyeh/S8naeIuBKbwrzi2zY9gpu0PPT/57sr+Hu9IYl9PPUaYzxEdck8JdruPCn9FL1u2LI7v2iPu9F89jzCNSu9HjWGu5SBUDxOTaI8pvsLvSKk+DwE21K86qtkO4xIyDzdBnA8N4J1vLLDGrwhiX08It+HPPHJ8TsrcSA74SkWvLabZzzOgY+8EkIyPA0vVrq4tuK8i1gSveM0xzxqsoY8TZsBO7LDGr2kxRU94DzmPHpSYjwWg1m9+7GUvFjP8Dy4tmI7EGVMO7mjkjuMsSI9oAtKPcmsSDywqB87gIC5PHVPUD2/aI88e32nPNTdMTzWYYe8pvsLPeRPwjz2Nd68GuSUvJ1s+bokkSi6elLiPDZn+ru0oIA9+HsePWXdv7yPQKm7ppKxPGH1qLvmLKi7qERSPPSTh7xiPu88okHAO7rs2Dp+o9M6me28vGBx0zzy5Gw7mNLBu+jeyDyAkIO8RN4jPeFX4Tud1VO85ajSvFy0gbxUEh88mNLBO7SQNjy2m2e8Kf0UvOp9GTyQApQ7vfSDvHKw/7u7rsM8iGAxvIrUPD01tVm8fqPTvKfrwbqVM3G8wdyaO+LbNrygNo88+h11PCeJCTyzdbu8lOoqvLPelTxOe+28aS4xOy4Ap70+CV28NndEPMrXjbyIuUE7yJFNvc9hezwQkJE8ty8HPPWDPTuySnY8jueYPJMowDwgAiI8QREIvVgKAD2Wx5A8QI2yO2ZhlTygdKQ8vj3KObEvezqMCjM8iRJSPJUFJj1H1gQ8oKLvPJj9hjwoeb+7EptCvLFqijt09r+8YYzOvJJm1bxTfv+8pB6mvKNshTw1HrQ8d5WQPJy6WLxBP9O77C86PD4Zp7q/aI87XaQ3PXzWt7sl2u42DOaPvALQITsi3wc9VdQJvJ6HdDxcSyc8+paZO6gWhzytR+S8pIcAPLfGLDwa1Eq79JMHPbA/RbypyKc8fgwuvcEK5jvVn5y8lk5su/5+sDyGVQA8QT/TuxEX7bwSqww8yGOCPDSaXj1bMCy9+7EUPBA3gbxJeNu80hAWO107XbzkT0I9uEoCvIqWJ7ydPi69fJgivTJ/47rQ9Rq7Ih0dvPpYhDwupxa8IEA3vO++QD0a1Eo8Mn9jPPk9iTz+5wq9dhG7O44V5LuBQqS8PVc8vCINUzzEEpE86N5IvGiq2zwaPaW8deZ1PGTCRDzQnAo88uTsuzKPrbzhwLs7YEOIPFxLJ7yl4JA9JdpuPMrXjTyobxe8MLJHPM9xRb1g2i289GhCvJ7Cgzm7F568cdATPeokCT2aGAI9452hPIkSUj2dbHk8rJXDu/SThzyCi+q8xg34ODiturzoCY68FWhevGK3EzxdDRK9Kq81uxxYIL1pLrG8RhQaPYKbtDspK+C8RSdqPOClwLziRJE80ysRvOSNV7wQkJE8V0iVvER1yTvMDQS8WbwgPIO2rzyJ5Aa9uTq4uvN4DDwrcSA9lQWmvAX2Tbo20NS86ZBpvJzlnTxldGU8elJiPAJX/bxkhC+9m1H+vApyhLyqesi8GtTKvCXabrsqRts8ndVTPJLPL7tGFBo8zhi1u5UFpjiIyYs6AFwWPY9Aqbtj0o67shwrvZAwXz3qJAm9yRUjvHZqSze67Fg89jVePHeVkLsuPry8ngAZvfwKpbw8PEE7QagtvKoR7jz6WIS7zoGPvPWDPTun23c8jWNDvO4MoDxy6468WKGlvCZuDjz1GuM89YM9vWqyBj3WYQe8E10tPeZac7whif086qvkvBaDWb3lEa27xnbSPEr8sLoGuDi84VdhOko6xruJqfc88Nm7O/28RboqViW9fR/+Ovk9CbvftYo9IqR4PI4VZDylDty7nWz5PKYp17vcVM+8wo67O0gvlbzXEyg8mYTiPGwmkjskU5O8+0g6PFGxYzvGSIe7uIgXPWrg0TxYoaU7mJSsvH0f/jwg19w7fjr5OrYUDDzUsuy8UJZoOyIdHTyq46I7m2FIu/fn/jxWLRq8nlkpPP5+sLzqq+Q7JdruOw7hdr2aGAI99+d+PNb4LDwF9k28oHQkO3yYojwopIS6DcZ7PGzNAT2IyQu8RKAOPVI1uTpbMCy9cusOvNa6lz30k4e8h478O7EBsDtKZYu8Vh3QvK5i37s6iiA9SpPWvFQSnzs+crc8SpNWvA0BCz1khC88oKLvPB2h5jze85+8SXjbPM2U3zpRseM70DMwO+zGXzwOs6s8Wn4LPOYsqLwYyRm8ers8u27I6Lzw6QW9RSfqPJACFDzhKRa8kv16PGlc/DzaOdS8PtsRvTbQ1Dqld7a8xKm2PP0loLyY/YY8xfL8PE+mMrxplwu8jN9tPISmZT2L7zc8YHHTvLnRXby6VTM7SeE1PFQSn7tciTy8UbHjPNLSgLxo1aA8MHQyvIFw77zlege8oAtKPM9hezugom+7XCDiulLM3jxSnpM88ZumPDq4azsEBhi83W9KPN9MMLxnI4A6l3kxvOWoUrzM4r46jiWuPLFqCj3Wuhc9jcydu+okiTwcsbA77mWwvIr/AbyO55i8RruJvARErTmbYUi9IVuyvHB3A7uPQKm84uuAOwoJKj2G7KU8ur4NvFQSH7zzeAw8Xu39Ooi5Qbv6HXW7pFy7Oz4J3bkVaF484SmWvHq7vDs+Gac8HBoLOg7xQDu9Ik+96fnDPIi5wbf6lhm8SC+VPMvyiDkMFNs8WGOQPICQAz2kHia84SkWPMKehbxnI4C9O0wLPTQDObtQwa08sOY0PfxjtTsPdRY8Ho4WPStxILymkrE8IVsyPKn28rnyTUe8n7I5O8RA3Dy8B9Q85ajSPGsLl7xRgxi7rss5vEo6RjwIw+k8INfcO9oLCT0mXkS8HjWGu9jVkjvtSrU85mo9uaxXrjyVnEs8S1VBvISm5TypX008XLQBPHgc7LyIucG8AXeRuzRskzygC8q8DlobvKn2cjkyf+M792CjO4QPwDz+QBu9dyy2PJZO7DyA6ZM7JFOTO1puwbyA6ZM6GtTKvEfWBDxLRfe8slpAvAPrnDwD65w7bPvMvDxnhryY/Qa8GHAJO9ZhB73xyfG7jn4+vGuS8ry8B1Q8QiyDPMpus7wvwhG8+dQuvKJRCj1vXAi9hq6Qu+SN17qxaoq87eHavCpWJT0MFNs88uRsPZ2niLygC8o7+BLEvObDzbyyHCu8SC+VPIbcW7wcWKC7Jm6OO/yhSjzAGjA9gL7OPPzMD7wAtaY8NqIJPdLSAL3jNEc8UjW5uz5ytztbMCw9udHdOjkGyzugzbQ6YHHTu0JazrswdLI7btgyvJMYdj2tGRk8R9YEvVLM3rem+wu91visOrSggDzvvkC9m8qiu1CW6DxMF6w7sZjVvFxLp7wQNwG9BY3zvMpuM70BDrc6CgkqvVhjkDw5b6W7Zp+qu0wXrDs1h468KZQ6PWV0ZbwsjJu8SUoQvAx9tbucuti8Cd5ku5j9Br1Kk9Y8EgSdvM6v2ru50d06vqakuafb97yKxHI7gOkTO9G3hTwjzz28hDoFPZd5sTx/VXS8f2U+PC4u8rzUhCE9chnau9wWuryEOoU8+h11u+bTl7oa1Eo8yPonPLsXnjwU4QI9W5kGPEUn6ryWt0Y8/AolvAF3Eb3pkOk89eyXPNDK1bz9vMW8MEntvGlc/Lhq4NE8eIVGPHW4Kju+5Lk83dikvAiVHr3GDXi89JOHu2e6pTwp/RS7PoIBPAPrHL1aBec8nlkpPcAaMD2Dtq88LGHWPK7bA72swIg8lKyVPCHEDLwpK+C7KkbbO7T5ELz+fjA9kbS0uzVM/7xgcVM9g7avu8ehF7w3kr+8eQkcu7r8Ir3AGjC8/kCbPPdgIz0y6D097Uo1vPauAj0tE/e8XigNPV2kt7ow3Qy8GGA/PRv/D7y4H708cEy+vELDqLwHPA69YEMIPL0izzwZIio9jAqzPN6KxTxm+Do9CUe/PGzNAbzU3TE8JgU0PXpirLxa15s7IzgYPKitrLtNYPI82C6jPIDpk7rGdlK77C86PdrQ+Twy6D29K3EgvSv4+zvdBnA6aKrbvMrHw7vt4Vo87ycbPVCWaDycjA29EjLoPKGPnztbMCy85ahSPL6mpLzqfRm9XIk8PAYhk7yAgDm82+v0PEOFE7z5Ano8uTo4PYWTlbv1gz084Vfhu7JKdjxwdwO8\"\n + \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": + 12,\n \"total_tokens\": 12\n }\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 9072bf7c2a5a2368-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 24 Jan 2025 20:24:36 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=QK.uKShFHIukTlLKV8KaH39RKmf.DA9fbdIp_5JPWp0-1737750276-1.0.1.1-U7TK7a58ic2LWeNf6OwFzCGWgz2X06RW7R0O0mr8QRYXDoZzLKeG_c1nzqrtBldVwPNYiThnXzesVGG6xXiXSA; + path=/; expires=Fri, 24-Jan-25 20:54:36 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=uqbfBV84.dehSGRMLX4tXE1mi3miPlWZSPvMxI8q.9g-1737750276975-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '136' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-5985cc59bb-fvqpf + x-envoy-upstream-service-time: + - '46' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999986' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_3983df28a40cce518f5a800922e01028 + http_version: HTTP/1.1 + status_code: 200 +- request: + body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], + "model": "text-embedding-3-small", "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.59.6 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.59.6 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.8 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": + \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n + \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": + 12,\n \"total_tokens\": 12\n }\n}\n" + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 9072bf803bed7ae0-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 24 Jan 2025 20:24:38 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=jtzsU7lWc3d6B4KQxyjgxkttPzNPU8tMxA_s1vkjLI4-1737750278-1.0.1.1-GEGJzRKGIhPNMpEUz_Rh1dVq5Pl4.NRVTCurfAC_LMKDRZrKec4U8BF3B7egdjrrjsKssZ8eeHXAr1U7v6O9qQ; + path=/; expires=Fri, 24-Jan-25 20:54:38 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=iA.YuWEfBSZCELL7i1Nqta1cyNeMLTrl8AqxK0PB6XA-1737750278342-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '1090' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-7c649fddd4-v8m26 + x-envoy-upstream-service-time: + - '1036' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999986' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_77c48e76b18b892fec2de24815ac2b92 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/crew_test.py b/tests/crew_test.py index 2f347a50e..b22bb5ffd 100644 --- a/tests/crew_test.py +++ b/tests/crew_test.py @@ -14,6 +14,7 @@ from crewai.agent import Agent from crewai.agents.cache import CacheHandler from crewai.crew import Crew from crewai.crews.crew_output import CrewOutput +from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource from crewai.memory.contextual.contextual_memory import ContextualMemory from crewai.process import Process from crewai.project import crew @@ -555,12 +556,12 @@ def test_crew_with_delegating_agents_should_not_override_task_tools(): _, kwargs = mock_execute_sync.call_args tools = kwargs["tools"] - assert any( - isinstance(tool, TestTool) for tool in tools - ), "TestTool should be present" - assert any( - "delegate" in tool.name.lower() for tool in tools - ), "Delegation tool should be present" + assert any(isinstance(tool, TestTool) for tool in tools), ( + "TestTool should be present" + ) + assert any("delegate" in tool.name.lower() for tool in tools), ( + "Delegation tool should be present" + ) @pytest.mark.vcr(filter_headers=["authorization"]) @@ -619,12 +620,12 @@ def test_crew_with_delegating_agents_should_not_override_agent_tools(): _, kwargs = mock_execute_sync.call_args tools = kwargs["tools"] - assert any( - isinstance(tool, TestTool) for tool in new_ceo.tools - ), "TestTool should be present" - assert any( - "delegate" in tool.name.lower() for tool in tools - ), "Delegation tool should be present" + assert any(isinstance(tool, TestTool) for tool in new_ceo.tools), ( + "TestTool should be present" + ) + assert any("delegate" in tool.name.lower() for tool in tools), ( + "Delegation tool should be present" + ) @pytest.mark.vcr(filter_headers=["authorization"]) @@ -748,17 +749,17 @@ def test_task_tools_override_agent_tools_with_allow_delegation(): used_tools = kwargs["tools"] # Confirm AnotherTestTool is present but TestTool is not - assert any( - isinstance(tool, AnotherTestTool) for tool in used_tools - ), "AnotherTestTool should be present" - assert not any( - isinstance(tool, TestTool) for tool in used_tools - ), "TestTool should not be present among used tools" + assert any(isinstance(tool, AnotherTestTool) for tool in used_tools), ( + "AnotherTestTool should be present" + ) + assert not any(isinstance(tool, TestTool) for tool in used_tools), ( + "TestTool should not be present among used tools" + ) # Confirm delegation tool(s) are present - assert any( - "delegate" in tool.name.lower() for tool in used_tools - ), "Delegation tool should be present" + assert any("delegate" in tool.name.lower() for tool in used_tools), ( + "Delegation tool should be present" + ) # Finally, make sure the agent's original tools remain unchanged assert len(researcher_with_delegation.tools) == 1 @@ -1466,7 +1467,6 @@ def test_dont_set_agents_step_callback_if_already_set(): @pytest.mark.vcr(filter_headers=["authorization"]) def test_crew_function_calling_llm(): - from crewai import LLM from crewai.tools import tool @@ -1560,9 +1560,9 @@ def test_code_execution_flag_adds_code_tool_upon_kickoff(): # Verify that exactly one tool was used and it was a CodeInterpreterTool assert len(used_tools) == 1, "Should have exactly one tool" - assert isinstance( - used_tools[0], CodeInterpreterTool - ), "Tool should be CodeInterpreterTool" + assert isinstance(used_tools[0], CodeInterpreterTool), ( + "Tool should be CodeInterpreterTool" + ) @pytest.mark.vcr(filter_headers=["authorization"]) @@ -3107,9 +3107,9 @@ def test_fetch_inputs(): expected_placeholders = {"role_detail", "topic", "field"} actual_placeholders = crew.fetch_inputs() - assert ( - actual_placeholders == expected_placeholders - ), f"Expected {expected_placeholders}, but got {actual_placeholders}" + assert actual_placeholders == expected_placeholders, ( + f"Expected {expected_placeholders}, but got {actual_placeholders}" + ) def test_task_tools_preserve_code_execution_tools(): @@ -3182,20 +3182,20 @@ def test_task_tools_preserve_code_execution_tools(): used_tools = kwargs["tools"] # Verify all expected tools are present - assert any( - isinstance(tool, TestTool) for tool in used_tools - ), "Task's TestTool should be present" - assert any( - isinstance(tool, CodeInterpreterTool) for tool in used_tools - ), "CodeInterpreterTool should be present" - assert any( - "delegate" in tool.name.lower() for tool in used_tools - ), "Delegation tool should be present" + assert any(isinstance(tool, TestTool) for tool in used_tools), ( + "Task's TestTool should be present" + ) + assert any(isinstance(tool, CodeInterpreterTool) for tool in used_tools), ( + "CodeInterpreterTool should be present" + ) + assert any("delegate" in tool.name.lower() for tool in used_tools), ( + "Delegation tool should be present" + ) # Verify the total number of tools (TestTool + CodeInterpreter + 2 delegation tools) - assert ( - len(used_tools) == 4 - ), "Should have TestTool, CodeInterpreter, and 2 delegation tools" + assert len(used_tools) == 4, ( + "Should have TestTool, CodeInterpreter, and 2 delegation tools" + ) @pytest.mark.vcr(filter_headers=["authorization"]) @@ -3239,9 +3239,9 @@ def test_multimodal_flag_adds_multimodal_tools(): used_tools = kwargs["tools"] # Check that the multimodal tool was added - assert any( - isinstance(tool, AddImageTool) for tool in used_tools - ), "AddImageTool should be present when agent is multimodal" + assert any(isinstance(tool, AddImageTool) for tool in used_tools), ( + "AddImageTool should be present when agent is multimodal" + ) # Verify we have exactly one tool (just the AddImageTool) assert len(used_tools) == 1, "Should only have the AddImageTool" @@ -3467,9 +3467,9 @@ def test_crew_guardrail_feedback_in_context(): assert len(execution_contexts) > 1, "Task should have been executed multiple times" # Verify that the second execution included the guardrail feedback - assert ( - "Output must contain the keyword 'IMPORTANT'" in execution_contexts[1] - ), "Guardrail feedback should be included in retry context" + assert "Output must contain the keyword 'IMPORTANT'" in execution_contexts[1], ( + "Guardrail feedback should be included in retry context" + ) # Verify final output meets guardrail requirements assert "IMPORTANT" in result.raw, "Final output should contain required keyword" @@ -3494,7 +3494,6 @@ def test_before_kickoff_callback(): @before_kickoff def modify_inputs(self, inputs): - self.inputs_modified = True inputs["modified"] = True return inputs @@ -3596,3 +3595,21 @@ def test_before_kickoff_without_inputs(): # Verify that the inputs were initialized and modified inside the before_kickoff method assert test_crew_instance.received_inputs is not None assert test_crew_instance.received_inputs.get("modified") is True + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_crew_with_knowledge_sources_works_with_copy(): + content = "Brandon's favorite color is red and he likes Mexican food." + string_source = StringKnowledgeSource(content=content) + + crew = Crew( + agents=[researcher, writer], + tasks=[Task(description="test", expected_output="test", agent=researcher)], + knowledge_sources=[string_source], + ) + + crew_copy = crew.copy() + + assert crew_copy.knowledge_sources == crew.knowledge_sources + assert len(crew_copy.agents) == len(crew.agents) + assert len(crew_copy.tasks) == len(crew.tasks) From d19d7b01ec6f364233abb07d24079be48e648c7c Mon Sep 17 00:00:00 2001 From: Daniel Barreto Date: Wed, 29 Jan 2025 12:11:48 -0300 Subject: [PATCH 18/43] docs: add a "Human Input" row to the Task Attributes table (#1999) --- docs/concepts/tasks.mdx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/concepts/tasks.mdx b/docs/concepts/tasks.mdx index 6ffd95e19..de7378879 100644 --- a/docs/concepts/tasks.mdx +++ b/docs/concepts/tasks.mdx @@ -33,11 +33,12 @@ crew = Crew( | :------------------------------- | :---------------- | :---------------------------- | :------------------------------------------------------------------------------------------------------------------- | | **Description** | `description` | `str` | A clear, concise statement of what the task entails. | | **Expected Output** | `expected_output` | `str` | A detailed description of what the task's completion looks like. | -| **Name** _(optional)_ | `name` | `Optional[str]` | A name identifier for the task. | -| **Agent** _(optional)_ | `agent` | `Optional[BaseAgent]` | The agent responsible for executing the task. | -| **Tools** _(optional)_ | `tools` | `List[BaseTool]` | The tools/resources the agent is limited to use for this task. | +| **Name** _(optional)_ | `name` | `Optional[str]` | A name identifier for the task. | +| **Agent** _(optional)_ | `agent` | `Optional[BaseAgent]` | The agent responsible for executing the task. | +| **Tools** _(optional)_ | `tools` | `List[BaseTool]` | The tools/resources the agent is limited to use for this task. | | **Context** _(optional)_ | `context` | `Optional[List["Task"]]` | Other tasks whose outputs will be used as context for this task. | | **Async Execution** _(optional)_ | `async_execution` | `Optional[bool]` | Whether the task should be executed asynchronously. Defaults to False. | +| **Human Input** _(optional)_ | `human_input` | `Optional[bool]` | Whether the task should have a human review the final answer of the agent. Defaults to False. | | **Config** _(optional)_ | `config` | `Optional[Dict[str, Any]]` | Task-specific configuration parameters. | | **Output File** _(optional)_ | `output_file` | `Optional[str]` | File path for storing the task output. | | **Output JSON** _(optional)_ | `output_json` | `Optional[Type[BaseModel]]` | A Pydantic model to structure the JSON output. | From 2709a9205a042e2baabd7d2f97f40365337b8c30 Mon Sep 17 00:00:00 2001 From: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> Date: Wed, 29 Jan 2025 10:24:50 -0800 Subject: [PATCH 19/43] =?UTF-8?q?fixes=20interpolation=20issues=20when=20i?= =?UTF-8?q?nputs=20are=20type=20dict,list=20specificall=E2=80=A6=20(#1992)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fixes interpolation issues when inputs are type dict,list specifically when defined on expected_output * improvements with type hints, doc fixes and rm print statements * more tests * test passing --------- Co-authored-by: Brandon Hancock --- src/crewai/task.py | 48 ++++--- tests/task_test.py | 317 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 350 insertions(+), 15 deletions(-) diff --git a/src/crewai/task.py b/src/crewai/task.py index 030bce779..cbf651f9b 100644 --- a/src/crewai/task.py +++ b/src/crewai/task.py @@ -431,7 +431,9 @@ class Task(BaseModel): content = ( json_output if json_output - else pydantic_output.model_dump_json() if pydantic_output else result + else pydantic_output.model_dump_json() + if pydantic_output + else result ) self._save_file(content) @@ -452,7 +454,7 @@ class Task(BaseModel): return "\n".join(tasks_slices) def interpolate_inputs_and_add_conversation_history( - self, inputs: Dict[str, Union[str, int, float]] + self, inputs: Dict[str, Union[str, int, float, Dict[str, Any], List[Any]]] ) -> None: """Interpolate inputs into the task description, expected output, and output file path. Add conversation history if present. @@ -524,7 +526,9 @@ class Task(BaseModel): ) def interpolate_only( - self, input_string: Optional[str], inputs: Dict[str, Union[str, int, float]] + self, + input_string: Optional[str], + inputs: Dict[str, Union[str, int, float, Dict[str, Any], List[Any]]], ) -> str: """Interpolate placeholders (e.g., {key}) in a string while leaving JSON untouched. @@ -532,17 +536,39 @@ class Task(BaseModel): input_string: The string containing template variables to interpolate. Can be None or empty, in which case an empty string is returned. inputs: Dictionary mapping template variables to their values. - Supported value types are strings, integers, and floats. - If input_string is empty or has no placeholders, inputs can be empty. + Supported value types are strings, integers, floats, and dicts/lists + containing only these types and other nested dicts/lists. Returns: The interpolated string with all template variables replaced with their values. Empty string if input_string is None or empty. Raises: - ValueError: If a required template variable is missing from inputs. - KeyError: If a template variable is not found in the inputs dictionary. + ValueError: If a value contains unsupported types """ + + # Validation function for recursive type checking + def validate_type(value: Any) -> None: + if value is None: + return + if isinstance(value, (str, int, float, bool)): + return + if isinstance(value, (dict, list)): + for item in value.values() if isinstance(value, dict) else value: + validate_type(item) + return + raise ValueError( + f"Unsupported type {type(value).__name__} in inputs. " + "Only str, int, float, bool, dict, and list are allowed." + ) + + # Validate all input values + for key, value in inputs.items(): + try: + validate_type(value) + except ValueError as e: + raise ValueError(f"Invalid value for key '{key}': {str(e)}") from e + if input_string is None or not input_string: return "" if "{" not in input_string and "}" not in input_string: @@ -551,15 +577,7 @@ class Task(BaseModel): raise ValueError( "Inputs dictionary cannot be empty when interpolating variables" ) - try: - # Validate input types - for key, value in inputs.items(): - if not isinstance(value, (str, int, float)): - raise ValueError( - f"Value for key '{key}' must be a string, integer, or float, got {type(value).__name__}" - ) - escaped_string = input_string.replace("{", "{{").replace("}", "}}") for key in inputs.keys(): diff --git a/tests/task_test.py b/tests/task_test.py index 59e58dcca..5ffaf2534 100644 --- a/tests/task_test.py +++ b/tests/task_test.py @@ -779,6 +779,43 @@ def test_interpolate_only(): assert result == no_placeholders +def test_interpolate_only_with_dict_inside_expected_output(): + """Test the interpolate_only method for various scenarios including JSON structure preservation.""" + task = Task( + description="Unused in this test", + expected_output="Unused in this test: {questions}", + ) + + json_string = '{"questions": {"main_question": "What is the user\'s name?", "secondary_question": "What is the user\'s age?"}}' + result = task.interpolate_only( + input_string=json_string, + inputs={ + "questions": { + "main_question": "What is the user's name?", + "secondary_question": "What is the user's age?", + } + }, + ) + assert '"main_question": "What is the user\'s name?"' in result + assert '"secondary_question": "What is the user\'s age?"' in result + assert result == json_string + + normal_string = "Hello {name}, welcome to {place}!" + result = task.interpolate_only( + input_string=normal_string, inputs={"name": "John", "place": "CrewAI"} + ) + assert result == "Hello John, welcome to CrewAI!" + + result = task.interpolate_only(input_string="", inputs={"unused": "value"}) + assert result == "" + + no_placeholders = "Hello, this is a test" + result = task.interpolate_only( + input_string=no_placeholders, inputs={"unused": "value"} + ) + assert result == no_placeholders + + def test_task_output_str_with_pydantic(): from crewai.tasks.output_format import OutputFormat @@ -966,3 +1003,283 @@ def test_task_execution_times(): assert task.start_time is not None assert task.end_time is not None assert task.execution_duration == (task.end_time - task.start_time).total_seconds() + + +def test_interpolate_with_list_of_strings(): + task = Task( + description="Test list interpolation", + expected_output="List: {items}", + ) + + # Test simple list of strings + input_str = "Available items: {items}" + inputs = {"items": ["apple", "banana", "cherry"]} + result = task.interpolate_only(input_str, inputs) + assert result == f"Available items: {inputs['items']}" + + # Test empty list + empty_list_input = {"items": []} + result = task.interpolate_only(input_str, empty_list_input) + assert result == "Available items: []" + + +def test_interpolate_with_list_of_dicts(): + task = Task( + description="Test list of dicts interpolation", + expected_output="People: {people}", + ) + + input_data = { + "people": [ + {"name": "Alice", "age": 30, "skills": ["Python", "AI"]}, + {"name": "Bob", "age": 25, "skills": ["Java", "Cloud"]}, + ] + } + result = task.interpolate_only("{people}", input_data) + + parsed_result = eval(result) + assert isinstance(parsed_result, list) + assert len(parsed_result) == 2 + assert parsed_result[0]["name"] == "Alice" + assert parsed_result[0]["age"] == 30 + assert parsed_result[0]["skills"] == ["Python", "AI"] + assert parsed_result[1]["name"] == "Bob" + assert parsed_result[1]["age"] == 25 + assert parsed_result[1]["skills"] == ["Java", "Cloud"] + + +def test_interpolate_with_nested_structures(): + task = Task( + description="Test nested structures", + expected_output="Company: {company}", + ) + + input_data = { + "company": { + "name": "TechCorp", + "departments": [ + { + "name": "Engineering", + "employees": 50, + "tools": ["Git", "Docker", "Kubernetes"], + }, + {"name": "Sales", "employees": 20, "regions": {"north": 5, "south": 3}}, + ], + } + } + result = task.interpolate_only("{company}", input_data) + parsed = eval(result) + + assert parsed["name"] == "TechCorp" + assert len(parsed["departments"]) == 2 + assert parsed["departments"][0]["tools"] == ["Git", "Docker", "Kubernetes"] + assert parsed["departments"][1]["regions"]["north"] == 5 + + +def test_interpolate_with_special_characters(): + task = Task( + description="Test special characters in dicts", + expected_output="Data: {special_data}", + ) + + input_data = { + "special_data": { + "quotes": """This has "double" and 'single' quotes""", + "unicode": "文字化けテスト", + "symbols": "!@#$%^&*()", + "empty": "", + } + } + result = task.interpolate_only("{special_data}", input_data) + parsed = eval(result) + + assert parsed["quotes"] == """This has "double" and 'single' quotes""" + assert parsed["unicode"] == "文字化けテスト" + assert parsed["symbols"] == "!@#$%^&*()" + assert parsed["empty"] == "" + + +def test_interpolate_mixed_types(): + task = Task( + description="Test mixed type interpolation", + expected_output="Mixed: {data}", + ) + + input_data = { + "data": { + "name": "Test Dataset", + "samples": 1000, + "features": ["age", "income", "location"], + "metadata": { + "source": "public", + "validated": True, + "tags": ["demo", "test", "temp"], + }, + } + } + result = task.interpolate_only("{data}", input_data) + parsed = eval(result) + + assert parsed["name"] == "Test Dataset" + assert parsed["samples"] == 1000 + assert parsed["metadata"]["tags"] == ["demo", "test", "temp"] + + +def test_interpolate_complex_combination(): + task = Task( + description="Test complex combination", + expected_output="Report: {report}", + ) + + input_data = { + "report": [ + { + "month": "January", + "metrics": {"sales": 15000, "expenses": 8000, "profit": 7000}, + "top_products": ["Product A", "Product B"], + }, + { + "month": "February", + "metrics": {"sales": 18000, "expenses": 8500, "profit": 9500}, + "top_products": ["Product C", "Product D"], + }, + ] + } + result = task.interpolate_only("{report}", input_data) + parsed = eval(result) + + assert len(parsed) == 2 + assert parsed[0]["month"] == "January" + assert parsed[1]["metrics"]["profit"] == 9500 + assert "Product D" in parsed[1]["top_products"] + + +def test_interpolate_invalid_type_validation(): + task = Task( + description="Test invalid type validation", + expected_output="Should never reach here", + ) + + # Test with invalid top-level type + with pytest.raises(ValueError) as excinfo: + task.interpolate_only("{data}", {"data": set()}) # type: ignore we are purposely testing this failure + + assert "Unsupported type set" in str(excinfo.value) + + # Test with invalid nested type + invalid_nested = { + "profile": { + "name": "John", + "age": 30, + "tags": {"a", "b", "c"}, # Set is invalid + } + } + with pytest.raises(ValueError) as excinfo: + task.interpolate_only("{data}", {"data": invalid_nested}) + assert "Unsupported type set" in str(excinfo.value) + + +def test_interpolate_custom_object_validation(): + task = Task( + description="Test custom object rejection", + expected_output="Should never reach here", + ) + + class CustomObject: + def __init__(self, value): + self.value = value + + def __str__(self): + return str(self.value) + + # Test with custom object at top level + with pytest.raises(ValueError) as excinfo: + task.interpolate_only("{obj}", {"obj": CustomObject(5)}) # type: ignore we are purposely testing this failure + assert "Unsupported type CustomObject" in str(excinfo.value) + + # Test with nested custom object in dictionary + with pytest.raises(ValueError) as excinfo: + task.interpolate_only( + "{data}", {"data": {"valid": 1, "invalid": CustomObject(5)}} + ) + assert "Unsupported type CustomObject" in str(excinfo.value) + + # Test with nested custom object in list + with pytest.raises(ValueError) as excinfo: + task.interpolate_only("{data}", {"data": [1, "valid", CustomObject(5)]}) + assert "Unsupported type CustomObject" in str(excinfo.value) + + # Test with deeply nested custom object + with pytest.raises(ValueError) as excinfo: + task.interpolate_only( + "{data}", {"data": {"level1": {"level2": [{"level3": CustomObject(5)}]}}} + ) + assert "Unsupported type CustomObject" in str(excinfo.value) + + +def test_interpolate_valid_complex_types(): + task = Task( + description="Test valid complex types", + expected_output="Validation should pass", + ) + + # Valid complex structure + valid_data = { + "name": "Valid Dataset", + "stats": { + "count": 1000, + "distribution": [0.2, 0.3, 0.5], + "features": ["age", "income"], + "nested": {"deep": [1, 2, 3], "deeper": {"a": 1, "b": 2.5}}, + }, + } + + # Should not raise any errors + result = task.interpolate_only("{data}", {"data": valid_data}) + parsed = eval(result) + assert parsed["name"] == "Valid Dataset" + assert parsed["stats"]["nested"]["deeper"]["b"] == 2.5 + + +def test_interpolate_edge_cases(): + task = Task( + description="Test edge cases", + expected_output="Edge case handling", + ) + + # Test empty dict and list + assert task.interpolate_only("{}", {"data": {}}) == "{}" + assert task.interpolate_only("[]", {"data": []}) == "[]" + + # Test numeric types + assert task.interpolate_only("{num}", {"num": 42}) == "42" + assert task.interpolate_only("{num}", {"num": 3.14}) == "3.14" + + # Test boolean values (valid JSON types) + assert task.interpolate_only("{flag}", {"flag": True}) == "True" + assert task.interpolate_only("{flag}", {"flag": False}) == "False" + + +def test_interpolate_valid_types(): + task = Task( + description="Test valid types including null and boolean", + expected_output="Should pass validation", + ) + + # Test with boolean and null values (valid JSON types) + valid_data = { + "name": "Test", + "active": True, + "deleted": False, + "optional": None, + "nested": {"flag": True, "empty": None}, + } + + result = task.interpolate_only("{data}", {"data": valid_data}) + parsed = eval(result) + + assert parsed["active"] is True + assert parsed["deleted"] is False + assert parsed["optional"] is None + assert parsed["nested"]["flag"] is True + assert parsed["nested"]["empty"] is None From 7bed63a6931cc9e5135b3d19865d458036492c61 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:11:14 -0500 Subject: [PATCH 20/43] Bugfix/fix broken training (#1993) * Fixing training while refactoring code * improve prompts * make sure to raise an error when missing training data * Drop comment * fix failing tests * add clear * drop bad code * fix failing test * Fix type issues pointed out by lorenze * simplify training --- .../base_agent_executor_mixin.py | 27 +- src/crewai/agents/crew_agent_executor.py | 243 ++++++++++-------- src/crewai/crew.py | 31 ++- .../utilities/evaluators/task_evaluator.py | 31 ++- src/crewai/utilities/training_handler.py | 9 + .../evaluators/test_task_evaluator.py | 6 +- 6 files changed, 210 insertions(+), 137 deletions(-) diff --git a/src/crewai/agents/agent_builder/base_agent_executor_mixin.py b/src/crewai/agents/agent_builder/base_agent_executor_mixin.py index bcc585731..924cef71c 100644 --- a/src/crewai/agents/agent_builder/base_agent_executor_mixin.py +++ b/src/crewai/agents/agent_builder/base_agent_executor_mixin.py @@ -95,18 +95,29 @@ class CrewAgentExecutorMixin: pass def _ask_human_input(self, final_answer: str) -> str: - """Prompt human input for final decision making.""" + """Prompt human input with mode-appropriate messaging.""" self._printer.print( content=f"\033[1m\033[95m ## Final Result:\033[00m \033[92m{final_answer}\033[00m" ) - self._printer.print( - content=( + # Training mode prompt (single iteration) + if self.crew and getattr(self.crew, "_train", False): + prompt = ( "\n\n=====\n" - "## Please provide feedback on the Final Result and the Agent's actions. " - "Respond with 'looks good' or a similar phrase when you're satisfied.\n" + "## TRAINING MODE: Provide feedback to improve the agent's performance.\n" + "This will be used to train better versions of the agent.\n" + "Please provide detailed feedback about the result quality and reasoning process.\n" "=====\n" - ), - color="bold_yellow", - ) + ) + # Regular human-in-the-loop prompt (multiple iterations) + else: + prompt = ( + "\n\n=====\n" + "## HUMAN FEEDBACK: Provide feedback on the Final Result and Agent's actions.\n" + "Respond with 'looks good' to accept or provide specific improvement requests.\n" + "You can provide multiple rounds of feedback until satisfied.\n" + "=====\n" + ) + + self._printer.print(content=prompt, color="bold_yellow") return input() diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index b9797193c..b144872b1 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -100,6 +100,12 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): try: formatted_answer = self._invoke_loop() + except AssertionError: + self._printer.print( + content="Agent failed to reach a final answer. This is likely a bug - please report it.", + color="red", + ) + raise except Exception as e: if e.__class__.__module__.startswith("litellm"): # Do not retry on litellm errors @@ -115,7 +121,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self._create_long_term_memory(formatted_answer) return {"output": formatted_answer.output} - def _invoke_loop(self): + def _invoke_loop(self) -> AgentFinish: """ Main loop to invoke the agent's thought process until it reaches a conclusion or the maximum number of iterations is reached. @@ -161,6 +167,11 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): finally: self.iterations += 1 + # During the invoke loop, formatted_answer alternates between AgentAction + # (when the agent is using tools) and eventually becomes AgentFinish + # (when the agent reaches a final answer). This assertion confirms we've + # reached a final answer and helps type checking understand this transition. + assert isinstance(formatted_answer, AgentFinish) self._show_logs(formatted_answer) return formatted_answer @@ -292,8 +303,11 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): self._printer.print( content=f"\033[1m\033[95m# Agent:\033[00m \033[1m\033[92m{agent_role}\033[00m" ) + description = ( + getattr(self.task, "description") if self.task else "Not Found" + ) self._printer.print( - content=f"\033[95m## Task:\033[00m \033[92m{self.task.description}\033[00m" + content=f"\033[95m## Task:\033[00m \033[92m{description}\033[00m" ) def _show_logs(self, formatted_answer: Union[AgentAction, AgentFinish]): @@ -418,58 +432,50 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): ) def _handle_crew_training_output( - self, result: AgentFinish, human_feedback: str | None = None + self, result: AgentFinish, human_feedback: Optional[str] = None ) -> None: - """Function to handle the process of the training data.""" + """Handle the process of saving training data.""" agent_id = str(self.agent.id) # type: ignore + train_iteration = ( + getattr(self.crew, "_train_iteration", None) if self.crew else None + ) + + if train_iteration is None or not isinstance(train_iteration, int): + self._printer.print( + content="Invalid or missing train iteration. Cannot save training data.", + color="red", + ) + return - # Load training data training_handler = CrewTrainingHandler(TRAINING_DATA_FILE) - training_data = training_handler.load() + training_data = training_handler.load() or {} - # Check if training data exists, human input is not requested, and self.crew is valid - if training_data and not self.ask_for_human_input: - if self.crew is not None and hasattr(self.crew, "_train_iteration"): - train_iteration = self.crew._train_iteration - if agent_id in training_data and isinstance(train_iteration, int): - training_data[agent_id][train_iteration][ - "improved_output" - ] = result.output - training_handler.save(training_data) - else: - self._printer.print( - content="Invalid train iteration type or agent_id not in training data.", - color="red", - ) - else: - self._printer.print( - content="Crew is None or does not have _train_iteration attribute.", - color="red", - ) + # Initialize or retrieve agent's training data + agent_training_data = training_data.get(agent_id, {}) - if self.ask_for_human_input and human_feedback is not None: - training_data = { + if human_feedback is not None: + # Save initial output and human feedback + agent_training_data[train_iteration] = { "initial_output": result.output, "human_feedback": human_feedback, - "agent": agent_id, - "agent_role": self.agent.role, # type: ignore } - if self.crew is not None and hasattr(self.crew, "_train_iteration"): - train_iteration = self.crew._train_iteration - if isinstance(train_iteration, int): - CrewTrainingHandler(TRAINING_DATA_FILE).append( - train_iteration, agent_id, training_data - ) - else: - self._printer.print( - content="Invalid train iteration type. Expected int.", - color="red", - ) + else: + # Save improved output + if train_iteration in agent_training_data: + agent_training_data[train_iteration]["improved_output"] = result.output else: self._printer.print( - content="Crew is None or does not have _train_iteration attribute.", + content=( + f"No existing training data for agent {agent_id} and iteration " + f"{train_iteration}. Cannot save improved output." + ), color="red", ) + return + + # Update the training data and save + training_data[agent_id] = agent_training_data + training_handler.save(training_data) def _format_prompt(self, prompt: str, inputs: Dict[str, str]) -> str: prompt = prompt.replace("{input}", inputs["input"]) @@ -485,82 +491,103 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): return {"role": role, "content": prompt} def _handle_human_feedback(self, formatted_answer: AgentFinish) -> AgentFinish: - """ - Handles the human feedback loop, allowing the user to provide feedback - on the agent's output and determining if additional iterations are needed. + """Handle human feedback with different flows for training vs regular use. - Parameters: - formatted_answer (AgentFinish): The initial output from the agent. + Args: + formatted_answer: The initial AgentFinish result to get feedback on Returns: - AgentFinish: The final output after incorporating human feedback. + AgentFinish: The final answer after processing feedback """ + human_feedback = self._ask_human_input(formatted_answer.output) + + if self._is_training_mode(): + return self._handle_training_feedback(formatted_answer, human_feedback) + + return self._handle_regular_feedback(formatted_answer, human_feedback) + + def _is_training_mode(self) -> bool: + """Check if crew is in training mode.""" + return bool(self.crew and self.crew._train) + + def _handle_training_feedback( + self, initial_answer: AgentFinish, feedback: str + ) -> AgentFinish: + """Process feedback for training scenarios with single iteration.""" + self._printer.print( + content="\nProcessing training feedback.\n", + color="yellow", + ) + self._handle_crew_training_output(initial_answer, feedback) + self.messages.append(self._format_msg(f"Feedback: {feedback}")) + improved_answer = self._invoke_loop() + self._handle_crew_training_output(improved_answer) + self.ask_for_human_input = False + return improved_answer + + def _handle_regular_feedback( + self, current_answer: AgentFinish, initial_feedback: str + ) -> AgentFinish: + """Process feedback for regular use with potential multiple iterations.""" + feedback = initial_feedback + answer = current_answer + while self.ask_for_human_input: - human_feedback = self._ask_human_input(formatted_answer.output) + response = self._get_llm_feedback_response(feedback) - if self.crew and self.crew._train: - self._handle_crew_training_output(formatted_answer, human_feedback) - - # Make an LLM call to verify if additional changes are requested based on human feedback - additional_changes_prompt = self._i18n.slice( - "human_feedback_classification" - ).format(feedback=human_feedback) - - retry_count = 0 - llm_call_successful = False - additional_changes_response = None - - while retry_count < MAX_LLM_RETRY and not llm_call_successful: - try: - additional_changes_response = ( - self.llm.call( - [ - self._format_msg( - additional_changes_prompt, role="system" - ) - ], - callbacks=self.callbacks, - ) - .strip() - .lower() - ) - llm_call_successful = True - except Exception as e: - retry_count += 1 - - self._printer.print( - content=f"Error during LLM call to classify human feedback: {e}. Retrying... ({retry_count}/{MAX_LLM_RETRY})", - color="red", - ) - - if not llm_call_successful: - self._printer.print( - content="Error processing feedback after multiple attempts.", - color="red", - ) + if not self._feedback_requires_changes(response): self.ask_for_human_input = False - break - - if additional_changes_response == "false": - self.ask_for_human_input = False - elif additional_changes_response == "true": - self.ask_for_human_input = True - # Add human feedback to messages - self.messages.append(self._format_msg(f"Feedback: {human_feedback}")) - # Invoke the loop again with updated messages - formatted_answer = self._invoke_loop() - - if self.crew and self.crew._train: - self._handle_crew_training_output(formatted_answer) else: - # Unexpected response - self._printer.print( - content=f"Unexpected response from LLM: '{additional_changes_response}'. Assuming no additional changes requested.", - color="red", - ) - self.ask_for_human_input = False + answer = self._process_feedback_iteration(feedback) + feedback = self._ask_human_input(answer.output) - return formatted_answer + return answer + + def _get_llm_feedback_response(self, feedback: str) -> Optional[str]: + """Get LLM classification of whether feedback requires changes.""" + prompt = self._i18n.slice("human_feedback_classification").format( + feedback=feedback + ) + message = self._format_msg(prompt, role="system") + + for retry in range(MAX_LLM_RETRY): + try: + response = self.llm.call([message], callbacks=self.callbacks) + return response.strip().lower() if response else None + except Exception as error: + self._log_feedback_error(retry, error) + + self._log_max_retries_exceeded() + return None + + def _feedback_requires_changes(self, response: Optional[str]) -> bool: + """Determine if feedback response indicates need for changes.""" + return response == "true" if response else False + + def _process_feedback_iteration(self, feedback: str) -> AgentFinish: + """Process a single feedback iteration.""" + self.messages.append(self._format_msg(f"Feedback: {feedback}")) + return self._invoke_loop() + + def _log_feedback_error(self, retry_count: int, error: Exception) -> None: + """Log feedback processing errors.""" + self._printer.print( + content=( + f"Error processing feedback: {error}. " + f"Retrying... ({retry_count + 1}/{MAX_LLM_RETRY})" + ), + color="red", + ) + + def _log_max_retries_exceeded(self) -> None: + """Log when max retries for feedback processing are exceeded.""" + self._printer.print( + content=( + f"Failed to process feedback after {MAX_LLM_RETRY} attempts. " + "Ending feedback loop." + ), + color="red", + ) def _handle_max_iterations_exceeded(self, formatted_answer): """ diff --git a/src/crewai/crew.py b/src/crewai/crew.py index b44667042..93987f3b8 100644 --- a/src/crewai/crew.py +++ b/src/crewai/crew.py @@ -494,21 +494,26 @@ class Crew(BaseModel): train_crew = self.copy() train_crew._setup_for_training(filename) - for n_iteration in range(n_iterations): - train_crew._train_iteration = n_iteration - train_crew.kickoff(inputs=inputs) + try: + for n_iteration in range(n_iterations): + train_crew._train_iteration = n_iteration + train_crew.kickoff(inputs=inputs) - training_data = CrewTrainingHandler(TRAINING_DATA_FILE).load() + training_data = CrewTrainingHandler(TRAINING_DATA_FILE).load() - for agent in train_crew.agents: - if training_data.get(str(agent.id)): - result = TaskEvaluator(agent).evaluate_training_data( - training_data=training_data, agent_id=str(agent.id) - ) - - CrewTrainingHandler(filename).save_trained_data( - agent_id=str(agent.role), trained_data=result.model_dump() - ) + for agent in train_crew.agents: + if training_data.get(str(agent.id)): + result = TaskEvaluator(agent).evaluate_training_data( + training_data=training_data, agent_id=str(agent.id) + ) + CrewTrainingHandler(filename).save_trained_data( + agent_id=str(agent.role), trained_data=result.model_dump() + ) + except Exception as e: + self._logger.log("error", f"Training failed: {e}", color="red") + CrewTrainingHandler(TRAINING_DATA_FILE).clear() + CrewTrainingHandler(filename).clear() + raise def kickoff( self, diff --git a/src/crewai/utilities/evaluators/task_evaluator.py b/src/crewai/utilities/evaluators/task_evaluator.py index acfdceed6..294629274 100644 --- a/src/crewai/utilities/evaluators/task_evaluator.py +++ b/src/crewai/utilities/evaluators/task_evaluator.py @@ -92,13 +92,34 @@ class TaskEvaluator: """ output_training_data = training_data[agent_id] - final_aggregated_data = "" - for _, data in output_training_data.items(): + + for iteration, data in output_training_data.items(): + improved_output = data.get("improved_output") + initial_output = data.get("initial_output") + human_feedback = data.get("human_feedback") + + if not all([improved_output, initial_output, human_feedback]): + missing_fields = [ + field + for field in ["improved_output", "initial_output", "human_feedback"] + if not data.get(field) + ] + error_msg = ( + f"Critical training data error: Missing fields ({', '.join(missing_fields)}) " + f"for agent {agent_id} in iteration {iteration}.\n" + "This indicates a broken training process. " + "Cannot proceed with evaluation.\n" + "Please check your training implementation." + ) + raise ValueError(error_msg) + final_aggregated_data += ( - f"Initial Output:\n{data.get('initial_output', '')}\n\n" - f"Human Feedback:\n{data.get('human_feedback', '')}\n\n" - f"Improved Output:\n{data.get('improved_output', '')}\n\n" + f"Iteration: {iteration}\n" + f"Initial Output:\n{initial_output}\n\n" + f"Human Feedback:\n{human_feedback}\n\n" + f"Improved Output:\n{improved_output}\n\n" + "------------------------------------------------\n\n" ) evaluation_query = ( diff --git a/src/crewai/utilities/training_handler.py b/src/crewai/utilities/training_handler.py index 5cadde619..b6b3c38b6 100644 --- a/src/crewai/utilities/training_handler.py +++ b/src/crewai/utilities/training_handler.py @@ -1,3 +1,5 @@ +import os + from crewai.utilities.file_handler import PickleHandler @@ -29,3 +31,10 @@ class CrewTrainingHandler(PickleHandler): data[agent_id] = {train_iteration: new_data} self.save(data) + + def clear(self) -> None: + """Clear the training data by removing the file or resetting its contents.""" + if os.path.exists(self.file_path): + with open(self.file_path, "wb") as file: + # Overwrite with an empty dictionary + self.save({}) diff --git a/tests/utilities/evaluators/test_task_evaluator.py b/tests/utilities/evaluators/test_task_evaluator.py index 8a0be027a..e4de1db62 100644 --- a/tests/utilities/evaluators/test_task_evaluator.py +++ b/tests/utilities/evaluators/test_task_evaluator.py @@ -48,9 +48,9 @@ def test_evaluate_training_data(converter_mock): mock.call( llm=original_agent.llm, text="Assess the quality of the training data based on the llm output, human feedback , and llm " - "output improved result.\n\nInitial Output:\nInitial output 1\n\nHuman Feedback:\nHuman feedback " - "1\n\nImproved Output:\nImproved output 1\n\nInitial Output:\nInitial output 2\n\nHuman " - "Feedback:\nHuman feedback 2\n\nImproved Output:\nImproved output 2\n\nPlease provide:\n- Provide " + "output improved result.\n\nIteration: data1\nInitial Output:\nInitial output 1\n\nHuman Feedback:\nHuman feedback " + "1\n\nImproved Output:\nImproved output 1\n\n------------------------------------------------\n\nIteration: data2\nInitial Output:\nInitial output 2\n\nHuman " + "Feedback:\nHuman feedback 2\n\nImproved Output:\nImproved output 2\n\n------------------------------------------------\n\nPlease provide:\n- Provide " "a list of clear, actionable instructions derived from the Human Feedbacks to enhance the Agent's " "performance. Analyze the differences between Initial Outputs and Improved Outputs to generate specific " "action items for future tasks. Ensure all key and specificpoints from the human feedback are " From 477cce321fe3fe4c8c40196e098666f3f27ce5b4 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:41:09 -0500 Subject: [PATCH 21/43] Fix llms (#2003) * iwp * add in api_base --------- Co-authored-by: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com> --- src/crewai/llm.py | 5 ++++- src/crewai/utilities/llm_utils.py | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/crewai/llm.py b/src/crewai/llm.py index 98b0bc855..ef8746fd5 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -133,6 +133,7 @@ class LLM: logprobs: Optional[int] = None, top_logprobs: Optional[int] = None, base_url: Optional[str] = None, + api_base: Optional[str] = None, api_version: Optional[str] = None, api_key: Optional[str] = None, callbacks: List[Any] = [], @@ -152,6 +153,7 @@ class LLM: self.logprobs = logprobs self.top_logprobs = top_logprobs self.base_url = base_url + self.api_base = api_base self.api_version = api_version self.api_key = api_key self.callbacks = callbacks @@ -232,7 +234,8 @@ class LLM: "seed": self.seed, "logprobs": self.logprobs, "top_logprobs": self.top_logprobs, - "api_base": self.base_url, + "api_base": self.api_base, + "base_url": self.base_url, "api_version": self.api_version, "api_key": self.api_key, "stream": False, diff --git a/src/crewai/utilities/llm_utils.py b/src/crewai/utilities/llm_utils.py index 13230edf6..c774a71fb 100644 --- a/src/crewai/utilities/llm_utils.py +++ b/src/crewai/utilities/llm_utils.py @@ -53,6 +53,7 @@ def create_llm( timeout: Optional[float] = getattr(llm_value, "timeout", None) api_key: Optional[str] = getattr(llm_value, "api_key", None) base_url: Optional[str] = getattr(llm_value, "base_url", None) + api_base: Optional[str] = getattr(llm_value, "api_base", None) created_llm = LLM( model=model, @@ -62,6 +63,7 @@ def create_llm( timeout=timeout, api_key=api_key, base_url=base_url, + api_base=api_base, ) return created_llm except Exception as e: @@ -101,8 +103,18 @@ def _llm_via_environment_or_fallback() -> Optional[LLM]: callbacks: List[Any] = [] # Optional base URL from env - api_base = os.environ.get("OPENAI_API_BASE") or os.environ.get("OPENAI_BASE_URL") - if api_base: + base_url = ( + os.environ.get("BASE_URL") + or os.environ.get("OPENAI_API_BASE") + or os.environ.get("OPENAI_BASE_URL") + ) + + api_base = os.environ.get("API_BASE") or os.environ.get("AZURE_API_BASE") + + # Synchronize base_url and api_base if one is populated and the other is not + if base_url and not api_base: + api_base = base_url + elif api_base and not base_url: base_url = api_base # Initialize llm_params dictionary @@ -115,6 +127,7 @@ def _llm_via_environment_or_fallback() -> Optional[LLM]: "timeout": timeout, "api_key": api_key, "base_url": base_url, + "api_base": api_base, "api_version": api_version, "presence_penalty": presence_penalty, "frequency_penalty": frequency_penalty, From ddb7958da7d24336e152d9b6f34aa0a3bcc04221 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Thu, 30 Jan 2025 18:16:10 -0500 Subject: [PATCH 22/43] Clean up to match enterprise (#2009) * Clean up to match enterprise * improve feedback prompting --- src/crewai/agents/crew_agent_executor.py | 12 ++++++++++-- src/crewai/translations/en.json | 3 ++- src/crewai/utilities/training_handler.py | 4 +--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/crewai/agents/crew_agent_executor.py b/src/crewai/agents/crew_agent_executor.py index b144872b1..ed89008fd 100644 --- a/src/crewai/agents/crew_agent_executor.py +++ b/src/crewai/agents/crew_agent_executor.py @@ -519,7 +519,11 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): color="yellow", ) self._handle_crew_training_output(initial_answer, feedback) - self.messages.append(self._format_msg(f"Feedback: {feedback}")) + self.messages.append( + self._format_msg( + self._i18n.slice("feedback_instructions").format(feedback=feedback) + ) + ) improved_answer = self._invoke_loop() self._handle_crew_training_output(improved_answer) self.ask_for_human_input = False @@ -566,7 +570,11 @@ class CrewAgentExecutor(CrewAgentExecutorMixin): def _process_feedback_iteration(self, feedback: str) -> AgentFinish: """Process a single feedback iteration.""" - self.messages.append(self._format_msg(f"Feedback: {feedback}")) + self.messages.append( + self._format_msg( + self._i18n.slice("feedback_instructions").format(feedback=feedback) + ) + ) return self._invoke_loop() def _log_feedback_error(self, retry_count: int, error: Exception) -> None: diff --git a/src/crewai/translations/en.json b/src/crewai/translations/en.json index 6385d5862..0c45321ea 100644 --- a/src/crewai/translations/en.json +++ b/src/crewai/translations/en.json @@ -24,7 +24,8 @@ "manager_request": "Your best answer to your coworker asking you this, accounting for the context shared.", "formatted_task_instructions": "Ensure your final answer contains only the content in the following format: {output_format}\n\nEnsure the final output does not include any code block markers like ```json or ```python.", "human_feedback_classification": "Determine if the following feedback indicates that the user is satisfied or if further changes are needed. Respond with 'True' if further changes are needed, or 'False' if the user is satisfied. **Important** Do not include any additional commentary outside of your 'True' or 'False' response.\n\nFeedback: \"{feedback}\"", - "conversation_history_instruction": "You are a member of a crew collaborating to achieve a common goal. Your task is a specific action that contributes to this larger objective. For additional context, please review the conversation history between you and the user that led to the initiation of this crew. Use any relevant information or feedback from the conversation to inform your task execution and ensure your response aligns with both the immediate task and the crew's overall goals." + "conversation_history_instruction": "You are a member of a crew collaborating to achieve a common goal. Your task is a specific action that contributes to this larger objective. For additional context, please review the conversation history between you and the user that led to the initiation of this crew. Use any relevant information or feedback from the conversation to inform your task execution and ensure your response aligns with both the immediate task and the crew's overall goals.", + "feedback_instructions": "User feedback: {feedback}\nInstructions: Use this feedback to enhance the next output iteration.\nNote: Do not respond or add commentary." }, "errors": { "force_final_answer_error": "You can't keep going, here is the best final answer you generated:\n\n {formatted_answer}", diff --git a/src/crewai/utilities/training_handler.py b/src/crewai/utilities/training_handler.py index b6b3c38b6..2d34f3261 100644 --- a/src/crewai/utilities/training_handler.py +++ b/src/crewai/utilities/training_handler.py @@ -35,6 +35,4 @@ class CrewTrainingHandler(PickleHandler): def clear(self) -> None: """Clear the training data by removing the file or resetting its contents.""" if os.path.exists(self.file_path): - with open(self.file_path, "wb") as file: - # Overwrite with an empty dictionary - self.save({}) + self.save({}) From 23b9e1032308d81aa16072932ea7884d44bc4da1 Mon Sep 17 00:00:00 2001 From: "Brandon Hancock (bhancock_ai)" <109994880+bhancockio@users.noreply.github.com> Date: Fri, 31 Jan 2025 12:53:58 -0500 Subject: [PATCH 23/43] Brandon/provide llm additional params (#2018) * Clean up to match enterprise * add additional params to LLM calls * make sure additional params are getting passed to llm * update docs * drop print --- docs/concepts/llms.mdx | 13 +++++++++++- src/crewai/llm.py | 3 +++ tests/llm_test.py | 48 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/docs/concepts/llms.mdx b/docs/concepts/llms.mdx index 261a1fdd8..0358308f4 100644 --- a/docs/concepts/llms.mdx +++ b/docs/concepts/llms.mdx @@ -465,11 +465,22 @@ Learn how to get the most out of your LLM configuration: # https://cloud.google.com/vertex-ai/generative-ai/docs/overview ``` + ## GET CREDENTIALS + file_path = 'path/to/vertex_ai_service_account.json' + + # Load the JSON file + with open(file_path, 'r') as file: + vertex_credentials = json.load(file) + + # Convert to JSON string + vertex_credentials_json = json.dumps(vertex_credentials) + Example usage: ```python Code llm = LLM( model="gemini/gemini-1.5-pro-latest", - temperature=0.7 + temperature=0.7, + vertex_credentials=vertex_credentials_json ) ``` diff --git a/src/crewai/llm.py b/src/crewai/llm.py index ef8746fd5..bbf8e35d9 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -137,6 +137,7 @@ class LLM: api_version: Optional[str] = None, api_key: Optional[str] = None, callbacks: List[Any] = [], + **kwargs, ): self.model = model self.timeout = timeout @@ -158,6 +159,7 @@ class LLM: self.api_key = api_key self.callbacks = callbacks self.context_window_size = 0 + self.additional_params = kwargs litellm.drop_params = True @@ -240,6 +242,7 @@ class LLM: "api_key": self.api_key, "stream": False, "tools": tools, + **self.additional_params, } # Remove None values from params diff --git a/tests/llm_test.py b/tests/llm_test.py index 6d1e6a188..8db8726d0 100644 --- a/tests/llm_test.py +++ b/tests/llm_test.py @@ -1,4 +1,5 @@ from time import sleep +from unittest.mock import MagicMock, patch import pytest @@ -154,3 +155,50 @@ def test_llm_call_with_tool_and_message_list(): assert isinstance(result, int) assert result == 25 + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_llm_passes_additional_params(): + llm = LLM( + model="gpt-4o-mini", + vertex_credentials="test_credentials", + vertex_project="test_project", + ) + + messages = [{"role": "user", "content": "Hello, world!"}] + + with patch("litellm.completion") as mocked_completion: + # Create mocks for response structure + mock_message = MagicMock() + mock_message.content = "Test response" + mock_choice = MagicMock() + mock_choice.message = mock_message + mock_response = MagicMock() + mock_response.choices = [mock_choice] + mock_response.usage = { + "prompt_tokens": 5, + "completion_tokens": 5, + "total_tokens": 10, + } + + # Set up the mocked completion to return the mock response + mocked_completion.return_value = mock_response + + result = llm.call(messages) + + # Assert that litellm.completion was called once + mocked_completion.assert_called_once() + + # Retrieve the actual arguments with which litellm.completion was called + _, kwargs = mocked_completion.call_args + + # Check that the additional_params were passed to litellm.completion + assert kwargs["vertex_credentials"] == "test_credentials" + assert kwargs["vertex_project"] == "test_project" + + # Also verify that other expected parameters are present + assert kwargs["model"] == "gpt-4o-mini" + assert kwargs["messages"] == messages + + # Check the result from llm.call + assert result == "Test response" From 748383d74c0fb117130febdbc798001dabf245d7 Mon Sep 17 00:00:00 2001 From: Brandon Hancock Date: Tue, 4 Feb 2025 10:58:34 -0500 Subject: [PATCH 24/43] update litellm to support o3-mini and deepseek. Update docs. --- docs/concepts/llms.mdx | 29 ++++- pyproject.toml | 2 +- src/crewai/llm.py | 5 +- .../test_deepseek_r1_with_open_router.yaml | 100 ++++++++++++++++ .../test_o3_mini_reasoning_effort_high.yaml | 107 ++++++++++++++++++ .../test_o3_mini_reasoning_effort_low.yaml | 102 +++++++++++++++++ .../test_o3_mini_reasoning_effort_medium.yaml | 102 +++++++++++++++++ tests/llm_test.py | 49 ++++++++ uv.lock | 14 +-- 9 files changed, 500 insertions(+), 10 deletions(-) create mode 100644 tests/cassettes/test_deepseek_r1_with_open_router.yaml create mode 100644 tests/cassettes/test_o3_mini_reasoning_effort_high.yaml create mode 100644 tests/cassettes/test_o3_mini_reasoning_effort_low.yaml create mode 100644 tests/cassettes/test_o3_mini_reasoning_effort_medium.yaml diff --git a/docs/concepts/llms.mdx b/docs/concepts/llms.mdx index 0358308f4..309ae8923 100644 --- a/docs/concepts/llms.mdx +++ b/docs/concepts/llms.mdx @@ -38,6 +38,7 @@ Here's a detailed breakdown of supported models and their capabilities, you can | GPT-4 | 8,192 tokens | High-accuracy tasks, complex reasoning | | GPT-4 Turbo | 128,000 tokens | Long-form content, document analysis | | GPT-4o & GPT-4o-mini | 128,000 tokens | Cost-effective large context processing | + | o3-mini | 200,000 tokens | Fast reasoning, complex reasoning | 1 token ≈ 4 characters in English. For example, 8,192 tokens ≈ 32,768 characters or about 6,000 words. @@ -162,7 +163,8 @@ Here's a detailed breakdown of supported models and their capabilities, you can | Provider | Context Window | Key Features | |----------|---------------|--------------| - | Deepseek Chat | 128,000 tokens | Specialized in technical discussions | + | Deepseek Chat | 64,000 tokens | Specialized in technical discussions | + | Deepseek R1 | 64,000 tokens | Affordable reasoning model | | Claude 3 | Up to 200K tokens | Strong reasoning, code understanding | | Gemma Series | 8,192 tokens | Efficient, smaller-scale tasks | @@ -296,6 +298,10 @@ There are three ways to configure LLMs in CrewAI. Choose the method that best fi # llm: sambanova/Meta-Llama-3.1-8B-Instruct # llm: sambanova/BioMistral-7B # llm: sambanova/Falcon-180B + + # Open Router Models - Affordable reasoning + # llm: openrouter/deepseek/deepseek-r1 + # llm: openrouter/deepseek/deepseek-chat ``` @@ -691,6 +697,27 @@ Learn how to get the most out of your LLM configuration: - Support for long context windows + + + ```python Code + OPENROUTER_API_KEY= + ``` + + Example usage: + ```python Code + llm = LLM( + model="openrouter/deepseek/deepseek-r1", + base_url="https://openrouter.ai/api/v1", + api_key=OPENROUTER_API_KEY + ) + ``` + + + Open Router models: + - openrouter/deepseek/deepseek-r1 + - openrouter/deepseek/deepseek-chat + + ## Common Issues and Solutions diff --git a/pyproject.toml b/pyproject.toml index a8d0b8c47..a69d06f47 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,7 @@ dependencies = [ # Core Dependencies "pydantic>=2.4.2", "openai>=1.13.3", - "litellm==1.59.8", + "litellm==1.60.2", "instructor>=1.3.3", # Text Processing "pdfplumber>=0.11.4", diff --git a/src/crewai/llm.py b/src/crewai/llm.py index bbf8e35d9..1e52773a1 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -5,7 +5,7 @@ import sys import threading import warnings from contextlib import contextmanager -from typing import Any, Dict, List, Optional, Union, cast +from typing import Any, Dict, List, Literal, Optional, Union, cast from dotenv import load_dotenv @@ -137,6 +137,7 @@ class LLM: api_version: Optional[str] = None, api_key: Optional[str] = None, callbacks: List[Any] = [], + reasoning_effort: Optional[Literal["none", "low", "medium", "high"]] = None, **kwargs, ): self.model = model @@ -159,6 +160,7 @@ class LLM: self.api_key = api_key self.callbacks = callbacks self.context_window_size = 0 + self.reasoning_effort = reasoning_effort self.additional_params = kwargs litellm.drop_params = True @@ -242,6 +244,7 @@ class LLM: "api_key": self.api_key, "stream": False, "tools": tools, + "reasoning_effort": self.reasoning_effort, **self.additional_params, } diff --git a/tests/cassettes/test_deepseek_r1_with_open_router.yaml b/tests/cassettes/test_deepseek_r1_with_open_router.yaml new file mode 100644 index 000000000..a74c9283d --- /dev/null +++ b/tests/cassettes/test_deepseek_r1_with_open_router.yaml @@ -0,0 +1,100 @@ +interactions: +- request: + body: '{"model": "deepseek/deepseek-r1", "messages": [{"role": "user", "content": + "What is the capital of France?"}], "stop": [], "stream": false}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '139' + host: + - openrouter.ai + http-referer: + - https://litellm.ai + user-agent: + - litellm/1.60.2 + x-title: + - liteLLM + method: POST + uri: https://openrouter.ai/api/v1/chat/completions + response: + content: "\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n\n + \ \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1738684300-YnD5WOSczQWsW0vQG78a\",\"provider\":\"Nebius\",\"model\":\"deepseek/deepseek-r1\",\"object\":\"chat.completion\",\"created\":1738684300,\"choices\":[{\"logprobs\":null,\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"The + capital of France is **Paris**. Known for its iconic landmarks such as the Eiffel + Tower, Notre-Dame Cathedral, and the Louvre Museum, Paris has served as the + political and cultural center of France for centuries. \U0001F1EB\U0001F1F7\",\"refusal\":null}}],\"usage\":{\"prompt_tokens\":10,\"completion_tokens\":261,\"total_tokens\":271}}" + headers: + Access-Control-Allow-Origin: + - '*' + CF-RAY: + - 90cbd2ceaf3ead5e-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Feb 2025 15:51:40 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + x-clerk-auth-message: + - Invalid JWT form. A JWT consists of three parts separated by dots. (reason=token-invalid, + token-carrier=header) + x-clerk-auth-reason: + - token-invalid + x-clerk-auth-status: + - signed-out + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_o3_mini_reasoning_effort_high.yaml b/tests/cassettes/test_o3_mini_reasoning_effort_high.yaml new file mode 100644 index 000000000..d21189e82 --- /dev/null +++ b/tests/cassettes/test_o3_mini_reasoning_effort_high.yaml @@ -0,0 +1,107 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the capital of France?"}], + "model": "o3-mini", "reasoning_effort": "high", "stop": []}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + cookie: + - _cfuvid=etTqqA9SBOnENmrFAUBIexdW0v2ZeO1x9_Ek_WChlfU-1737568920137-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.61.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.61.0 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AxFNUz7l4pwtY9xhFSPIGlwNfE4Sj\",\n \"object\": + \"chat.completion\",\n \"created\": 1738683828,\n \"model\": \"o3-mini-2025-01-31\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null\n },\n \"finish_reason\": \"stop\"\n }\n + \ ],\n \"usage\": {\n \"prompt_tokens\": 13,\n \"completion_tokens\": + 81,\n \"total_tokens\": 94,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 64,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_8bcaa0ca21\"\n}\n" + headers: + CF-RAY: + - 90cbc745d91fb0ca-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Feb 2025 15:43:50 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=.AP74BirsYr.lu61bSaimK2HRF6126qr5vCrr3HC6ak-1738683830-1.0.1.1-feh.bcMOv9wYnitoPpr.7UR7JrzCsbRLlzct09xCDm2SwmnRQQk5ZSSV41Ywer2S0rptbvufFwklV9wo9ATvWw; + path=/; expires=Tue, 04-Feb-25 16:13:50 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=JBfx8Sl7w82A0S_K1tQd5ZcwzWaZP5Gg5W1dqAdgwNU-1738683830528-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '2169' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999974' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_163e7bd79cb5a5e62d4688245b97d1d9 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_o3_mini_reasoning_effort_low.yaml b/tests/cassettes/test_o3_mini_reasoning_effort_low.yaml new file mode 100644 index 000000000..624bf386d --- /dev/null +++ b/tests/cassettes/test_o3_mini_reasoning_effort_low.yaml @@ -0,0 +1,102 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the capital of France?"}], + "model": "o3-mini", "reasoning_effort": "low", "stop": []}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '136' + content-type: + - application/json + cookie: + - _cfuvid=JBfx8Sl7w82A0S_K1tQd5ZcwzWaZP5Gg5W1dqAdgwNU-1738683830528-0.0.1.1-604800000; + __cf_bm=.AP74BirsYr.lu61bSaimK2HRF6126qr5vCrr3HC6ak-1738683830-1.0.1.1-feh.bcMOv9wYnitoPpr.7UR7JrzCsbRLlzct09xCDm2SwmnRQQk5ZSSV41Ywer2S0rptbvufFwklV9wo9ATvWw + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.61.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.61.0 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AxFNWljEYFrf5qRwYj73OPQtAnPbF\",\n \"object\": + \"chat.completion\",\n \"created\": 1738683830,\n \"model\": \"o3-mini-2025-01-31\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null\n },\n \"finish_reason\": \"stop\"\n }\n + \ ],\n \"usage\": {\n \"prompt_tokens\": 13,\n \"completion_tokens\": + 17,\n \"total_tokens\": 30,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_8bcaa0ca21\"\n}\n" + headers: + CF-RAY: + - 90cbc7551fe0b0ca-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Feb 2025 15:43:51 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '1103' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999974' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_fd7178a0e5060216d04f3bd023e8bca1 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/cassettes/test_o3_mini_reasoning_effort_medium.yaml b/tests/cassettes/test_o3_mini_reasoning_effort_medium.yaml new file mode 100644 index 000000000..d1e31eff5 --- /dev/null +++ b/tests/cassettes/test_o3_mini_reasoning_effort_medium.yaml @@ -0,0 +1,102 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "What is the capital of France?"}], + "model": "o3-mini", "reasoning_effort": "medium", "stop": []}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '139' + content-type: + - application/json + cookie: + - _cfuvid=JBfx8Sl7w82A0S_K1tQd5ZcwzWaZP5Gg5W1dqAdgwNU-1738683830528-0.0.1.1-604800000; + __cf_bm=.AP74BirsYr.lu61bSaimK2HRF6126qr5vCrr3HC6ak-1738683830-1.0.1.1-feh.bcMOv9wYnitoPpr.7UR7JrzCsbRLlzct09xCDm2SwmnRQQk5ZSSV41Ywer2S0rptbvufFwklV9wo9ATvWw + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.61.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.61.0 + x-stainless-raw-response: + - 'true' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.7 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + content: "{\n \"id\": \"chatcmpl-AxFS8IuMeYs6Rky2UbG8wH8P5PR4k\",\n \"object\": + \"chat.completion\",\n \"created\": 1738684116,\n \"model\": \"o3-mini-2025-01-31\",\n + \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": + \"assistant\",\n \"content\": \"The capital of France is Paris.\",\n + \ \"refusal\": null\n },\n \"finish_reason\": \"stop\"\n }\n + \ ],\n \"usage\": {\n \"prompt_tokens\": 13,\n \"completion_tokens\": + 145,\n \"total_tokens\": 158,\n \"prompt_tokens_details\": {\n \"cached_tokens\": + 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n + \ \"reasoning_tokens\": 128,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": + 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": + \"default\",\n \"system_fingerprint\": \"fp_8bcaa0ca21\"\n}\n" + headers: + CF-RAY: + - 90cbce51b946afb4-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Tue, 04 Feb 2025 15:48:39 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '2365' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999974' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_bfd83679e674c3894991477f1fb043b2 + http_version: HTTP/1.1 + status_code: 200 +version: 1 diff --git a/tests/llm_test.py b/tests/llm_test.py index 8db8726d0..723e28a16 100644 --- a/tests/llm_test.py +++ b/tests/llm_test.py @@ -1,3 +1,4 @@ +import os from time import sleep from unittest.mock import MagicMock, patch @@ -202,3 +203,51 @@ def test_llm_passes_additional_params(): # Check the result from llm.call assert result == "Test response" + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_o3_mini_reasoning_effort_high(): + llm = LLM( + model="o3-mini", + reasoning_effort="high", + ) + result = llm.call("What is the capital of France?") + assert isinstance(result, str) + assert "Paris" in result + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_o3_mini_reasoning_effort_low(): + llm = LLM( + model="o3-mini", + reasoning_effort="low", + ) + result = llm.call("What is the capital of France?") + assert isinstance(result, str) + assert "Paris" in result + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_o3_mini_reasoning_effort_medium(): + llm = LLM( + model="o3-mini", + reasoning_effort="medium", + ) + result = llm.call("What is the capital of France?") + assert isinstance(result, str) + assert "Paris" in result + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_deepseek_r1_with_open_router(): + if not os.getenv("OPEN_ROUTER_API_KEY"): + pytest.skip("OPEN_ROUTER_API_KEY not set; skipping test.") + + llm = LLM( + model="openrouter/deepseek/deepseek-r1", + base_url="https://openrouter.ai/api/v1", + api_key=os.getenv("OPEN_ROUTER_API_KEY"), + ) + result = llm.call("What is the capital of France?") + assert isinstance(result, str) + assert "Paris" in result diff --git a/uv.lock b/uv.lock index 3ba4e0212..e39f75790 100644 --- a/uv.lock +++ b/uv.lock @@ -740,7 +740,7 @@ requires-dist = [ { name = "json-repair", specifier = ">=0.25.2" }, { name = "json5", specifier = ">=0.10.0" }, { name = "jsonref", specifier = ">=1.1.0" }, - { name = "litellm", specifier = "==1.59.8" }, + { name = "litellm", specifier = "==1.60.2" }, { name = "mem0ai", marker = "extra == 'mem0'", specifier = ">=0.1.29" }, { name = "openai", specifier = ">=1.13.3" }, { name = "openpyxl", specifier = ">=3.1.5" }, @@ -2374,7 +2374,7 @@ wheels = [ [[package]] name = "litellm" -version = "1.59.8" +version = "1.60.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -2389,9 +2389,9 @@ dependencies = [ { name = "tiktoken" }, { name = "tokenizers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/b0/c8ec06bd1c87a92d6d824008982b3c82b450d7bd3be850a53913f1ac4907/litellm-1.59.8.tar.gz", hash = "sha256:9d645cc4460f6a9813061f07086648c4c3d22febc8e1f21c663f2b7750d90512", size = 6428607 } +sdist = { url = "https://files.pythonhosted.org/packages/94/8f/704cdb0fdbdd49dc5062a39ae5f1a8f308ae0ffd746df6e0137fc1776b8a/litellm-1.60.2.tar.gz", hash = "sha256:a8170584fcfd6f5175201d869e61ccd8a40ffe3264fc5e53c5b805ddf8a6e05a", size = 6447447 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b9/38/889da058f566ef9ea321aafa25e423249492cf2a508dfdc0e5acfcf04526/litellm-1.59.8-py3-none-any.whl", hash = "sha256:2473914bd2343485a185dfe7eedb12ee5fda32da3c9d9a8b73f6966b9b20cf39", size = 6716233 }, + { url = "https://files.pythonhosted.org/packages/8a/ba/0eaec9aee9f99fdf46ef1c0bddcfe7f5720b182f84f6ed27f13145d5ded2/litellm-1.60.2-py3-none-any.whl", hash = "sha256:1cb08cda04bf8c5ef3e690171a779979e4b16a5e3a24cd8dc1f198e7f198d5c4", size = 6746809 }, ] [[package]] @@ -3185,7 +3185,7 @@ wheels = [ [[package]] name = "openai" -version = "1.59.6" +version = "1.61.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -3197,9 +3197,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2e/7a/07fbe7bdabffd0a5be1bfe5903a02c4fff232e9acbae894014752a8e4def/openai-1.59.6.tar.gz", hash = "sha256:c7670727c2f1e4473f62fea6fa51475c8bc098c9ffb47bfb9eef5be23c747934", size = 344915 } +sdist = { url = "https://files.pythonhosted.org/packages/32/2a/b3fa8790be17d632f59d4f50257b909a3f669036e5195c1ae55737274620/openai-1.61.0.tar.gz", hash = "sha256:216f325a24ed8578e929b0f1b3fb2052165f3b04b0461818adaa51aa29c71f8a", size = 350174 } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/45/6de8e5fd670c804b29c777e4716f1916741c71604d5c7d952eee8432f7d3/openai-1.59.6-py3-none-any.whl", hash = "sha256:b28ed44eee3d5ebe1a3ea045ee1b4b50fea36ecd50741aaa5ce5a5559c900cb6", size = 454817 }, + { url = "https://files.pythonhosted.org/packages/93/76/70c5ad6612b3e4c89fa520266bbf2430a89cae8bd87c1e2284698af5927e/openai-1.61.0-py3-none-any.whl", hash = "sha256:e8c512c0743accbdbe77f3429a1490d862f8352045de8dc81969301eb4a4f666", size = 460623 }, ] [[package]] From a950e67c7d8c1ed8c5ba24aabb5a09cef571e220 Mon Sep 17 00:00:00 2001 From: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com> Date: Tue, 4 Feb 2025 23:26:00 +0530 Subject: [PATCH 25/43] Fixed the documentation (#2017) * Fixed the documentation * Fixed typo, improved description --------- Co-authored-by: Vidit Ostwal Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- docs/concepts/crews.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/concepts/crews.mdx b/docs/concepts/crews.mdx index 58511b07c..11ba3387e 100644 --- a/docs/concepts/crews.mdx +++ b/docs/concepts/crews.mdx @@ -279,9 +279,9 @@ print(result) Once your crew is assembled, initiate the workflow with the appropriate kickoff method. CrewAI provides several methods for better control over the kickoff process: `kickoff()`, `kickoff_for_each()`, `kickoff_async()`, and `kickoff_for_each_async()`. - `kickoff()`: Starts the execution process according to the defined process flow. -- `kickoff_for_each()`: Executes tasks for each agent individually. +- `kickoff_for_each()`: Executes tasks sequentially for each provided input event or item in the collection. - `kickoff_async()`: Initiates the workflow asynchronously. -- `kickoff_for_each_async()`: Executes tasks for each agent individually in an asynchronous manner. +- `kickoff_for_each_async()`: Executes tasks concurrently for each provided input event or item, leveraging asynchronous processing. ```python Code # Start the crew's task execution From 9e5c599f58d1f64ac08bab30255e587a9d18fac8 Mon Sep 17 00:00:00 2001 From: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com> Date: Wed, 5 Feb 2025 02:33:38 +0530 Subject: [PATCH 26/43] Fixed the memory documentation (#2031) --- docs/concepts/memory.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/concepts/memory.mdx b/docs/concepts/memory.mdx index 751b6dd2e..6eaf8553e 100644 --- a/docs/concepts/memory.mdx +++ b/docs/concepts/memory.mdx @@ -185,7 +185,7 @@ my_crew = Crew( process=Process.sequential, memory=True, verbose=True, - embedder=OpenAIEmbeddingFunction(api_key=os.getenv("OPENAI_API_KEY"), model_name="text-embedding-3-small"), + embedder=OpenAIEmbeddingFunction(api_key=os.getenv("OPENAI_API_KEY"), model="text-embedding-3-small"), ) ``` @@ -224,7 +224,7 @@ my_crew = Crew( "provider": "google", "config": { "api_key": "", - "model_name": "" + "model": "" } } ) @@ -247,7 +247,7 @@ my_crew = Crew( api_base="YOUR_API_BASE_PATH", api_type="azure", api_version="YOUR_API_VERSION", - model_name="text-embedding-3-small" + model="text-embedding-3-small" ) ) ``` @@ -268,7 +268,7 @@ my_crew = Crew( project_id="YOUR_PROJECT_ID", region="YOUR_REGION", api_key="YOUR_API_KEY", - model_name="textembedding-gecko" + model="textembedding-gecko" ) ) ``` @@ -288,7 +288,7 @@ my_crew = Crew( "provider": "cohere", "config": { "api_key": "YOUR_API_KEY", - "model_name": "" + "model": "" } } ) @@ -308,7 +308,7 @@ my_crew = Crew( "provider": "voyageai", "config": { "api_key": "YOUR_API_KEY", - "model_name": "" + "model": "" } } ) From 89c4b3fe88d7d09820e7b97dd24b3880dd5cbbad Mon Sep 17 00:00:00 2001 From: jinx <59938808+JinxTheCatto@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:07:22 -0800 Subject: [PATCH 27/43] Correct current year in tasks, to get more up to date results (#2010) Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- README.md | 2 +- docs/concepts/planning.mdx | 4 ++-- docs/concepts/tasks.mdx | 4 ++-- docs/how-to/human-input-on-execution.mdx | 6 +++--- docs/quickstart.mdx | 8 ++++---- tests/config/tasks.yaml | 2 +- tests/task_test.py | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index edcbb6f51..917add533 100644 --- a/README.md +++ b/README.md @@ -190,7 +190,7 @@ research_task: description: > Conduct a thorough research about {topic} Make sure you find any interesting and relevant information given - the current year is 2024. + the current year is 2025. expected_output: > A list with 10 bullet points of the most relevant information about {topic} agent: researcher diff --git a/docs/concepts/planning.mdx b/docs/concepts/planning.mdx index 79e747425..c92d64ebe 100644 --- a/docs/concepts/planning.mdx +++ b/docs/concepts/planning.mdx @@ -81,8 +81,8 @@ my_crew.kickoff() 3. **Collect Data:** - - Search for the latest papers, articles, and reports published in 2023 and early 2024. - - Use keywords like "Large Language Models 2024", "AI LLM advancements", "AI ethics 2024", etc. + - Search for the latest papers, articles, and reports published in 2024 and early 2025. + - Use keywords like "Large Language Models 2025", "AI LLM advancements", "AI ethics 2025", etc. 4. **Analyze Findings:** diff --git a/docs/concepts/tasks.mdx b/docs/concepts/tasks.mdx index de7378879..4aa47c416 100644 --- a/docs/concepts/tasks.mdx +++ b/docs/concepts/tasks.mdx @@ -69,7 +69,7 @@ research_task: description: > Conduct a thorough research about {topic} Make sure you find any interesting and relevant information given - the current year is 2024. + the current year is 2025. expected_output: > A list with 10 bullet points of the most relevant information about {topic} agent: researcher @@ -155,7 +155,7 @@ research_task = Task( description=""" Conduct a thorough research about AI Agents. Make sure you find any interesting and relevant information given - the current year is 2024. + the current year is 2025. """, expected_output=""" A list with 10 bullet points of the most relevant information about AI Agents diff --git a/docs/how-to/human-input-on-execution.mdx b/docs/how-to/human-input-on-execution.mdx index de8c8a0a8..bf243981d 100644 --- a/docs/how-to/human-input-on-execution.mdx +++ b/docs/how-to/human-input-on-execution.mdx @@ -60,12 +60,12 @@ writer = Agent( # Create tasks for your agents task1 = Task( description=( - "Conduct a comprehensive analysis of the latest advancements in AI in 2024. " + "Conduct a comprehensive analysis of the latest advancements in AI in 2025. " "Identify key trends, breakthrough technologies, and potential industry impacts. " "Compile your findings in a detailed report. " "Make sure to check with a human if the draft is good before finalizing your answer." ), - expected_output='A comprehensive full report on the latest AI advancements in 2024, leave nothing out', + expected_output='A comprehensive full report on the latest AI advancements in 2025, leave nothing out', agent=researcher, human_input=True ) @@ -76,7 +76,7 @@ task2 = Task( "Your post should be informative yet accessible, catering to a tech-savvy audience. " "Aim for a narrative that captures the essence of these breakthroughs and their implications for the future." ), - expected_output='A compelling 3 paragraphs blog post formatted as markdown about the latest AI advancements in 2024', + expected_output='A compelling 3 paragraphs blog post formatted as markdown about the latest AI advancements in 2025', agent=writer, human_input=True ) diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index dfb2c233c..9fb8f783a 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -58,7 +58,7 @@ Follow the steps below to get crewing! 🚣‍♂️ description: > Conduct a thorough research about {topic} Make sure you find any interesting and relevant information given - the current year is 2024. + the current year is 2025. expected_output: > A list with 10 bullet points of the most relevant information about {topic} agent: researcher @@ -195,10 +195,10 @@ Follow the steps below to get crewing! 🚣‍♂️ ```markdown output/report.md - # Comprehensive Report on the Rise and Impact of AI Agents in 2024 + # Comprehensive Report on the Rise and Impact of AI Agents in 2025 ## 1. Introduction to AI Agents - In 2024, Artificial Intelligence (AI) agents are at the forefront of innovation across various industries. As intelligent systems that can perform tasks typically requiring human cognition, AI agents are paving the way for significant advancements in operational efficiency, decision-making, and overall productivity within sectors like Human Resources (HR) and Finance. This report aims to detail the rise of AI agents, their frameworks, applications, and potential implications on the workforce. + In 2025, Artificial Intelligence (AI) agents are at the forefront of innovation across various industries. As intelligent systems that can perform tasks typically requiring human cognition, AI agents are paving the way for significant advancements in operational efficiency, decision-making, and overall productivity within sectors like Human Resources (HR) and Finance. This report aims to detail the rise of AI agents, their frameworks, applications, and potential implications on the workforce. ## 2. Benefits of AI Agents AI agents bring numerous advantages that are transforming traditional work environments. Key benefits include: @@ -252,7 +252,7 @@ Follow the steps below to get crewing! 🚣‍♂️ To stay competitive and harness the full potential of AI agents, organizations must remain vigilant about latest developments in AI technology and consider continuous learning and adaptation in their strategic planning. ## 8. Conclusion - The emergence of AI agents is undeniably reshaping the workplace landscape in 2024. With their ability to automate tasks, enhance efficiency, and improve decision-making, AI agents are critical in driving operational success. Organizations must embrace and adapt to AI developments to thrive in an increasingly digital business environment. + The emergence of AI agents is undeniably reshaping the workplace landscape in 5. With their ability to automate tasks, enhance efficiency, and improve decision-making, AI agents are critical in driving operational success. Organizations must embrace and adapt to AI developments to thrive in an increasingly digital business environment. ``` diff --git a/tests/config/tasks.yaml b/tests/config/tasks.yaml index f30820855..88639debb 100644 --- a/tests/config/tasks.yaml +++ b/tests/config/tasks.yaml @@ -2,7 +2,7 @@ research_task: description: > Conduct a thorough research about {topic} Make sure you find any interesting and relevant information given - the current year is 2024. + the current year is 2025. expected_output: > A list with 10 bullet points of the most relevant information about {topic} agent: researcher diff --git a/tests/task_test.py b/tests/task_test.py index 5ffaf2534..3cd11cfc7 100644 --- a/tests/task_test.py +++ b/tests/task_test.py @@ -723,14 +723,14 @@ def test_interpolate_inputs(): ) task.interpolate_inputs_and_add_conversation_history( - inputs={"topic": "AI", "date": "2024"} + inputs={"topic": "AI", "date": "2025"} ) assert ( task.description == "Give me a list of 5 interesting ideas about AI to explore for an article, what makes them unique and interesting." ) assert task.expected_output == "Bullet point list of 5 interesting ideas about AI." - assert task.output_file == "/tmp/AI/output_2024.txt" + assert task.output_file == "/tmp/AI/output_2025.txt" task.interpolate_inputs_and_add_conversation_history( inputs={"topic": "ML", "date": "2025"} From 9cf3fadd0f0868e785710f9509f48e2293786406 Mon Sep 17 00:00:00 2001 From: TomuHirata Date: Wed, 5 Feb 2025 06:18:50 +0900 Subject: [PATCH 28/43] Add documentation for mlflow tracing integration (#1988) Signed-off-by: Tomu Hirata Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> --- docs/how-to/mlflow-observability.mdx | 206 +++++++++++++++++++++++++++ docs/images/mlflow-tracing.gif | Bin 0 -> 17153907 bytes docs/images/mlflow1.png | Bin 0 -> 391342 bytes docs/mint.json | 1 + mkdocs.yml | 1 + 5 files changed, 208 insertions(+) create mode 100644 docs/how-to/mlflow-observability.mdx create mode 100644 docs/images/mlflow-tracing.gif create mode 100644 docs/images/mlflow1.png diff --git a/docs/how-to/mlflow-observability.mdx b/docs/how-to/mlflow-observability.mdx new file mode 100644 index 000000000..f0c4a9ec4 --- /dev/null +++ b/docs/how-to/mlflow-observability.mdx @@ -0,0 +1,206 @@ +--- +title: Agent Monitoring with MLflow +description: Quickly start monitoring your Agents with MLflow. +icon: bars-staggered +--- + +# MLflow Overview + +[MLflow](https://mlflow.org/) is an open-source platform to assist machine learning practitioners and teams in handling the complexities of the machine learning process. + +It provides a tracing feature that enhances LLM observability in your Generative AI applications by capturing detailed information about the execution of your application’s services. +Tracing provides a way to record the inputs, outputs, and metadata associated with each intermediate step of a request, enabling you to easily pinpoint the source of bugs and unexpected behaviors. + +![Overview of MLflow crewAI tracing usage](/images/mlflow-tracing.gif) + +### Features + +- **Tracing Dashboard**: Monitor activities of your crewAI agents with detailed dashboards that include inputs, outputs and metadata of spans. +- **Automated Tracing**: A fully automated integration with crewAI, which can be enabled by running `mlflow.crewai.autolog()`. +- **Manual Trace Instrumentation with minor efforts**: Customize trace instrumentation through MLflow's high-level fluent APIs such as decorators, function wrappers and context managers. +- **OpenTelemetry Compatibility**: MLflow Tracing supports exporting traces to an OpenTelemetry Collector, which can then be used to export traces to various backends such as Jaeger, Zipkin, and AWS X-Ray. +- **Package and Deploy Agents**: Package and deploy your crewAI agents to an inference server with a variety of deployment targets. +- **Securely Host LLMs**: Host multiple LLM from various providers in one unified endpoint through MFflow gateway. +- **Evaluation**: Evaluate your crewAI agents with a wide range of metrics using a convenient API `mlflow.evaluate()`. + +## Setup Instructions + + + + ```shell + # The crewAI integration is available in mlflow>=2.19.0 + pip install mlflow + ``` + + + ```shell + # This process is optional, but it is recommended to use MLflow tracking server for better visualization and broader features. + mlflow server + ``` + + + Add the following two lines to your application code: + + ```python + import mlflow + + mlflow.crewai.autolog() + + # Optional: Set a tracking URI and an experiment name if you have a tracking server + mlflow.set_tracking_uri("http://localhost:5000") + mlflow.set_experiment("CrewAI") + ``` + + Example Usage for tracing CrewAI Agents: + + ```python + from crewai import Agent, Crew, Task + from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource + from crewai_tools import SerperDevTool, WebsiteSearchTool + + from textwrap import dedent + + content = "Users name is John. He is 30 years old and lives in San Francisco." + string_source = StringKnowledgeSource( + content=content, metadata={"preference": "personal"} + ) + + search_tool = WebsiteSearchTool() + + + 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=[ + search_tool, + ], + verbose=True, + ) + + 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=[search_tool], + verbose=True, + ) + + + class TripTasks: + def identify_task(self, agent, origin, cities, interests, range): + return Task( + description=dedent( + f""" + Analyze and select the best city for the trip based + on specific criteria such as weather patterns, seasonal + events, and travel costs. This task involves comparing + multiple cities, considering factors like current weather + conditions, upcoming cultural or seasonal events, and + overall travel expenses. + Your final answer must be a detailed + report on the chosen city, and everything you found out + about it, including the actual flight costs, weather + forecast and attractions. + + Traveling from: {origin} + City Options: {cities} + Trip Date: {range} + Traveler Interests: {interests} + """ + ), + agent=agent, + expected_output="Detailed report on the chosen city including flight costs, weather forecast, and attractions", + ) + + def gather_task(self, agent, origin, interests, range): + return Task( + description=dedent( + f""" + As a local expert on this city you must compile an + in-depth guide for someone traveling there and wanting + to have THE BEST trip ever! + Gather information about key attractions, local customs, + special events, and daily activity recommendations. + Find the best spots to go to, the kind of place only a + local would know. + This guide should provide a thorough overview of what + the city has to offer, including hidden gems, cultural + hotspots, must-visit landmarks, weather forecasts, and + high level costs. + The final answer must be a comprehensive city guide, + rich in cultural insights and practical tips, + tailored to enhance the travel experience. + + Trip Date: {range} + Traveling from: {origin} + Traveler Interests: {interests} + """ + ), + agent=agent, + expected_output="Comprehensive city guide including hidden gems, cultural hotspots, and practical travel tips", + ) + + + class TripCrew: + def __init__(self, origin, cities, date_range, interests): + self.cities = cities + self.origin = origin + self.interests = interests + self.date_range = date_range + + def run(self): + agents = TripAgents() + tasks = TripTasks() + + city_selector_agent = agents.city_selection_agent() + local_expert_agent = agents.local_expert() + + 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 + ) + + crew = Crew( + agents=[city_selector_agent, local_expert_agent], + tasks=[identify_task, gather_task], + verbose=True, + memory=True, + knowledge={ + "sources": [string_source], + "metadata": {"preference": "personal"}, + }, + ) + + result = crew.kickoff() + return result + + + trip_crew = TripCrew("California", "Tokyo", "Dec 12 - Dec 20", "sports") + result = trip_crew.run() + + print(result) + ``` + Refer to [MLflow Tracing Documentation](https://mlflow.org/docs/latest/llms/tracing/index.html) for more configurations and use cases. + + + Now traces for your crewAI agents are captured by MLflow. + Let's visit MLflow tracking server to view the traces and get insights into your Agents. + + Open `127.0.0.1:5000` on your browser to visit MLflow tracking server. + + MLflow tracing example with crewai + + + + diff --git a/docs/images/mlflow-tracing.gif b/docs/images/mlflow-tracing.gif new file mode 100644 index 0000000000000000000000000000000000000000..e968c092482427d9e2c7f13342d78cb9a39f91fb GIT binary patch literal 17153907 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

odcLxtC(G4*%6E$%Y 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

SK9C`@4^c}(@}B&A_4IYgn$9U01$!`K|Wv( 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%0DpJFP;^`;AT59VjlE7)p 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%0DWN-&pD*PB7G*DBa3uhP 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 z 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

rZ>?oD{piZwj~c}r%{(o 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