diff --git a/docs/docs.json b/docs/docs.json index b682b395e..32129340e 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -326,7 +326,7 @@ ] }, { - "tab": "AMP", + "tab": "AOP", "icon": "briefcase", "groups": [ { @@ -753,7 +753,7 @@ ] }, { - "tab": "AMP", + "tab": "AOP", "icon": "briefcase", "groups": [ { diff --git a/docs/en/enterprise/introduction.mdx b/docs/en/enterprise/introduction.mdx index 74c67ca53..4320dd1a6 100644 --- a/docs/en/enterprise/introduction.mdx +++ b/docs/en/enterprise/introduction.mdx @@ -7,7 +7,7 @@ mode: "wide" ## Introduction -CrewAI AOP(Agent Management Platform) provides a platform for deploying, monitoring, and scaling your crews and agents in a production environment. +CrewAI AOP(Agent Operations Platform) provides a platform for deploying, monitoring, and scaling your crews and agents in a production environment. CrewAI AOP Dashboard diff --git a/docs/ko/enterprise/introduction.mdx b/docs/ko/enterprise/introduction.mdx index 751a4bc78..bfd95e9f9 100644 --- a/docs/ko/enterprise/introduction.mdx +++ b/docs/ko/enterprise/introduction.mdx @@ -7,7 +7,7 @@ mode: "wide" ## 소개 -CrewAI AOP(Agent Management Platform)는 프로덕션 환경에서 crew와 agent를 배포, 모니터링, 확장할 수 있는 플랫폼을 제공합니다. +CrewAI AOP(Agent Operation Platform)는 프로덕션 환경에서 crew와 agent를 배포, 모니터링, 확장할 수 있는 플랫폼을 제공합니다. CrewAI AOP Dashboard diff --git a/docs/pt-BR/enterprise/introduction.mdx b/docs/pt-BR/enterprise/introduction.mdx index 1d89b1842..5bbd7f785 100644 --- a/docs/pt-BR/enterprise/introduction.mdx +++ b/docs/pt-BR/enterprise/introduction.mdx @@ -7,7 +7,7 @@ mode: "wide" ## Introdução -CrewAI AOP(Agent Management Platform) fornece uma plataforma para implementar, monitorar e escalar seus crews e agentes em um ambiente de produção. +CrewAI AOP(Agent Operation Platform) fornece uma plataforma para implementar, monitorar e escalar seus crews e agentes em um ambiente de produção. CrewAI AOP Dashboard diff --git a/lib/crewai-tools/pyproject.toml b/lib/crewai-tools/pyproject.toml index 2d3ad4730..672b604c2 100644 --- a/lib/crewai-tools/pyproject.toml +++ b/lib/crewai-tools/pyproject.toml @@ -12,7 +12,7 @@ dependencies = [ "pytube>=15.0.0", "requests>=2.32.5", "docker>=7.1.0", - "crewai==1.5.0", + "crewai==1.6.0", "lancedb>=0.5.4", "tiktoken>=0.8.0", "beautifulsoup4>=4.13.4", diff --git a/lib/crewai-tools/src/crewai_tools/__init__.py b/lib/crewai-tools/src/crewai_tools/__init__.py index c14dc160a..d7b819e31 100644 --- a/lib/crewai-tools/src/crewai_tools/__init__.py +++ b/lib/crewai-tools/src/crewai_tools/__init__.py @@ -291,4 +291,4 @@ __all__ = [ "ZapierActionTools", ] -__version__ = "1.5.0" +__version__ = "1.6.0" diff --git a/lib/crewai/pyproject.toml b/lib/crewai/pyproject.toml index 1c9f644ef..00afa1d67 100644 --- a/lib/crewai/pyproject.toml +++ b/lib/crewai/pyproject.toml @@ -48,7 +48,7 @@ Repository = "https://github.com/crewAIInc/crewAI" [project.optional-dependencies] tools = [ - "crewai-tools==1.5.0", + "crewai-tools==1.6.0", ] embeddings = [ "tiktoken~=0.8.0" diff --git a/lib/crewai/src/crewai/__init__.py b/lib/crewai/src/crewai/__init__.py index ebc2ee4c6..f961847fd 100644 --- a/lib/crewai/src/crewai/__init__.py +++ b/lib/crewai/src/crewai/__init__.py @@ -40,7 +40,7 @@ def _suppress_pydantic_deprecation_warnings() -> None: _suppress_pydantic_deprecation_warnings() -__version__ = "1.5.0" +__version__ = "1.6.0" _telemetry_submitted = False diff --git a/lib/crewai/src/crewai/cli/config.py b/lib/crewai/src/crewai/cli/config.py index aec32bfd4..9f2d203f9 100644 --- a/lib/crewai/src/crewai/cli/config.py +++ b/lib/crewai/src/crewai/cli/config.py @@ -73,6 +73,7 @@ CLI_SETTINGS_KEYS = [ "oauth2_audience", "oauth2_client_id", "oauth2_domain", + "oauth2_extra", ] # Default values for CLI settings @@ -82,6 +83,7 @@ DEFAULT_CLI_SETTINGS = { "oauth2_audience": CREWAI_ENTERPRISE_DEFAULT_OAUTH2_AUDIENCE, "oauth2_client_id": CREWAI_ENTERPRISE_DEFAULT_OAUTH2_CLIENT_ID, "oauth2_domain": CREWAI_ENTERPRISE_DEFAULT_OAUTH2_DOMAIN, + "oauth2_extra": {}, } # Readonly settings - cannot be set by the user diff --git a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml b/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml index c69821aad..5e2b10f88 100644 --- a/lib/crewai/src/crewai/cli/templates/crew/pyproject.toml +++ b/lib/crewai/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.14" dependencies = [ - "crewai[tools]==1.5.0" + "crewai[tools]==1.6.0" ] [project.scripts] diff --git a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml b/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml index 1d76e3cae..cb4607ddf 100644 --- a/lib/crewai/src/crewai/cli/templates/flow/pyproject.toml +++ b/lib/crewai/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.14" dependencies = [ - "crewai[tools]==1.5.0" + "crewai[tools]==1.6.0" ] [project.scripts] diff --git a/lib/crewai/src/crewai/memory/storage/rag_storage.py b/lib/crewai/src/crewai/memory/storage/rag_storage.py index 1060350ad..2dabc9bca 100644 --- a/lib/crewai/src/crewai/memory/storage/rag_storage.py +++ b/lib/crewai/src/crewai/memory/storage/rag_storage.py @@ -16,6 +16,7 @@ from crewai.utilities.paths import db_storage_path if TYPE_CHECKING: + from crewai.crew import Crew from crewai.rag.core.base_client import BaseClient from crewai.rag.core.base_embeddings_provider import BaseEmbeddingsProvider from crewai.rag.embeddings.types import ProviderSpec @@ -32,16 +33,16 @@ class RAGStorage(BaseRAGStorage): self, type: str, allow_reset: bool = True, - embedder_config: ProviderSpec | BaseEmbeddingsProvider | None = None, - crew: Any = None, + embedder_config: ProviderSpec | BaseEmbeddingsProvider[Any] | None = None, + crew: Crew | None = None, path: str | None = None, ) -> None: super().__init__(type, allow_reset, embedder_config, crew) - agents = crew.agents if crew else [] - agents = [self._sanitize_role(agent.role) for agent in agents] - agents = "_".join(agents) - self.agents = agents - self.storage_file_name = self._build_storage_file_name(type, agents) + crew_agents = crew.agents if crew else [] + sanitized_roles = [self._sanitize_role(agent.role) for agent in crew_agents] + agents_str = "_".join(sanitized_roles) + self.agents = agents_str + self.storage_file_name = self._build_storage_file_name(type, agents_str) self.type = type self._client: BaseClient | None = None @@ -96,6 +97,10 @@ class RAGStorage(BaseRAGStorage): ChromaEmbeddingFunctionWrapper, embedding_function ) ) + + if self.path: + config.settings.persist_directory = self.path + self._client = create_client(config) def _get_client(self) -> BaseClient: diff --git a/lib/crewai/tests/cli/test_config.py b/lib/crewai/tests/cli/test_config.py index 4db005e78..4dec94ee3 100644 --- a/lib/crewai/tests/cli/test_config.py +++ b/lib/crewai/tests/cli/test_config.py @@ -72,7 +72,8 @@ class TestSettings(unittest.TestCase): @patch("crewai.cli.config.TokenManager") def test_reset_settings(self, mock_token_manager): user_settings = {key: f"value_for_{key}" for key in USER_SETTINGS_KEYS} - cli_settings = {key: f"value_for_{key}" for key in CLI_SETTINGS_KEYS} + cli_settings = {key: f"value_for_{key}" for key in CLI_SETTINGS_KEYS if key != "oauth2_extra"} + cli_settings["oauth2_extra"] = {"scope": "xxx", "other": "yyy"} settings = Settings( config_path=self.config_path, **user_settings, **cli_settings diff --git a/lib/crewai/tests/rag/test_rag_storage_path.py b/lib/crewai/tests/rag/test_rag_storage_path.py new file mode 100644 index 000000000..925680094 --- /dev/null +++ b/lib/crewai/tests/rag/test_rag_storage_path.py @@ -0,0 +1,82 @@ +"""Tests for RAGStorage custom path functionality.""" + +from unittest.mock import MagicMock, patch + +from crewai.memory.storage.rag_storage import RAGStorage + + +@patch("crewai.memory.storage.rag_storage.create_client") +@patch("crewai.memory.storage.rag_storage.build_embedder") +def test_rag_storage_custom_path( + mock_build_embedder: MagicMock, + mock_create_client: MagicMock, +) -> None: + """Test RAGStorage uses custom path when provided.""" + mock_build_embedder.return_value = MagicMock(return_value=[[0.1, 0.2, 0.3]]) + mock_create_client.return_value = MagicMock() + + custom_path = "/custom/memory/path" + embedder_config = {"provider": "openai", "config": {"model": "text-embedding-3-small"}} + + RAGStorage( + type="short_term", + crew=None, + path=custom_path, + embedder_config=embedder_config, + ) + + mock_create_client.assert_called_once() + config_arg = mock_create_client.call_args[0][0] + assert config_arg.settings.persist_directory == custom_path + + +@patch("crewai.memory.storage.rag_storage.create_client") +@patch("crewai.memory.storage.rag_storage.build_embedder") +def test_rag_storage_default_path_when_none( + mock_build_embedder: MagicMock, + mock_create_client: MagicMock, +) -> None: + """Test RAGStorage uses default path when no custom path is provided.""" + mock_build_embedder.return_value = MagicMock(return_value=[[0.1, 0.2, 0.3]]) + mock_create_client.return_value = MagicMock() + + embedder_config = {"provider": "openai", "config": {"model": "text-embedding-3-small"}} + + storage = RAGStorage( + type="short_term", + crew=None, + path=None, + embedder_config=embedder_config, + ) + + mock_create_client.assert_called_once() + assert storage.path is None + + +@patch("crewai.memory.storage.rag_storage.create_client") +@patch("crewai.memory.storage.rag_storage.build_embedder") +def test_rag_storage_custom_path_with_batch_size( + mock_build_embedder: MagicMock, + mock_create_client: MagicMock, +) -> None: + """Test RAGStorage uses custom path with batch_size in config.""" + mock_build_embedder.return_value = MagicMock(return_value=[[0.1, 0.2, 0.3]]) + mock_create_client.return_value = MagicMock() + + custom_path = "/custom/batch/path" + embedder_config = { + "provider": "openai", + "config": {"model": "text-embedding-3-small", "batch_size": 100}, + } + + RAGStorage( + type="long_term", + crew=None, + path=custom_path, + embedder_config=embedder_config, + ) + + mock_create_client.assert_called_once() + config_arg = mock_create_client.call_args[0][0] + assert config_arg.settings.persist_directory == custom_path + assert config_arg.batch_size == 100 \ No newline at end of file diff --git a/lib/devtools/src/crewai_devtools/__init__.py b/lib/devtools/src/crewai_devtools/__init__.py index 18356f406..b25505c49 100644 --- a/lib/devtools/src/crewai_devtools/__init__.py +++ b/lib/devtools/src/crewai_devtools/__init__.py @@ -1,3 +1,3 @@ """CrewAI development tools.""" -__version__ = "1.5.0" +__version__ = "1.6.0"