diff --git a/docs/en/concepts/cli.mdx b/docs/en/concepts/cli.mdx index e14c264a9..f664ce949 100644 --- a/docs/en/concepts/cli.mdx +++ b/docs/en/concepts/cli.mdx @@ -282,7 +282,25 @@ Watch this video tutorial for a step-by-step demonstration of deploying your cre allowfullscreen > -### 11. API Keys +### 12. Login + +Authenticate with CrewAI Enterprise using a secure device code flow (no email entry required). + +```shell Terminal +crewai login +``` + +What happens: +- A verification URL and short code are displayed in your terminal +- Your browser opens to the verification URL +- Enter/confirm the code to complete authentication + +Notes: +- The OAuth2 provider and domain are configured via `crewai config` (defaults use `login.crewai.com`) +- After successful login, the CLI also attempts to authenticate to the Tool Repository automatically +- If you reset your configuration, run `crewai login` again to re-authenticate + +### 13. API Keys When running ```crewai create crew``` command, the CLI will show you a list of available LLM providers to choose from, followed by model selection for your chosen provider. @@ -310,7 +328,7 @@ See the following link for each provider's key name: * [LiteLLM Providers](https://docs.litellm.ai/docs/providers) -### 12. Configuration Management +### 14. Configuration Management Manage CLI configuration settings for CrewAI. @@ -385,6 +403,10 @@ Reset all configuration to defaults: crewai config reset ``` + +After resetting configuration, re-run `crewai login` to authenticate again. + + Configuration settings are stored in `~/.config/crewai/settings.json`. Some settings like organization name and UUID are read-only and managed through authentication and organization commands. Tool repository related settings are hidden and cannot be set directly by users. diff --git a/docs/en/concepts/flows.mdx b/docs/en/concepts/flows.mdx index 9d868ca5e..675fe5c7c 100644 --- a/docs/en/concepts/flows.mdx +++ b/docs/en/concepts/flows.mdx @@ -97,7 +97,13 @@ The state's unique ID and stored data can be useful for tracking flow executions ### @start() -The `@start()` decorator is used to mark a method as the starting point of a Flow. When a Flow is started, all the methods decorated with `@start()` are executed in parallel. You can have multiple start methods in a Flow, and they will all be executed when the Flow is started. +The `@start()` decorator marks entry points for a Flow. You can: + +- Declare multiple unconditional starts: `@start()` +- Gate a start on a prior method or router label: `@start("method_or_label")` +- Provide a callable condition to control when a start should fire + +All satisfied `@start()` methods will execute (often in parallel) when the Flow begins or resumes. ### @listen() diff --git a/docs/en/concepts/knowledge.mdx b/docs/en/concepts/knowledge.mdx index 588d74afc..1870155c0 100644 --- a/docs/en/concepts/knowledge.mdx +++ b/docs/en/concepts/knowledge.mdx @@ -24,6 +24,41 @@ For file-based Knowledge Sources, make sure to place your files in a `knowledge` Also, use relative paths from the `knowledge` directory when creating the source. +### Vector store (RAG) client configuration + +CrewAI exposes a provider-neutral RAG client abstraction for vector stores. The default provider is ChromaDB, and Qdrant is supported as well. You can switch providers using configuration utilities. + +Supported today: +- ChromaDB (default) +- Qdrant + +```python Code +from crewai.rag.config.utils import set_rag_config, get_rag_client, clear_rag_config + +# ChromaDB (default) +from crewai.rag.chromadb.config import ChromaDBConfig +set_rag_config(ChromaDBConfig()) +chromadb_client = get_rag_client() + +# Qdrant +from crewai.rag.qdrant.config import QdrantConfig +set_rag_config(QdrantConfig()) +qdrant_client = get_rag_client() + +# Example operations (same API for any provider) +client = qdrant_client # or chromadb_client +client.create_collection(collection_name="docs") +client.add_documents( + collection_name="docs", + documents=[{"id": "1", "content": "CrewAI enables collaborative AI agents."}], +) +results = client.search(collection_name="docs", query="collaborative agents", limit=3) + +clear_rag_config() # optional reset +``` + +This RAG client is separate from Knowledge’s built-in storage. Use it when you need direct vector-store control or custom retrieval pipelines. + ### Basic String Knowledge Example ```python Code diff --git a/docs/en/concepts/memory.mdx b/docs/en/concepts/memory.mdx index 78401d8b5..632882d16 100644 --- a/docs/en/concepts/memory.mdx +++ b/docs/en/concepts/memory.mdx @@ -738,6 +738,17 @@ print(f"OpenAI: {openai_time:.2f}s") print(f"Ollama: {ollama_time:.2f}s") ``` +### Entity Memory batching behavior + +Entity Memory supports batching when saving multiple entities at once. When you pass a list of `EntityMemoryItem`, the system: + +- Emits a single MemorySaveStartedEvent with `entity_count` +- Saves each entity internally, collecting any partial errors +- Emits MemorySaveCompletedEvent with aggregate metadata (saved count, errors) +- Raises a partial-save exception if some entities failed (includes counts) + +This improves performance and observability when writing many entities in one operation. + ## 2. External Memory External Memory provides a standalone memory system that operates independently from the crew's built-in memory. This is ideal for specialized memory providers or cross-application memory sharing. diff --git a/docs/en/concepts/tasks.mdx b/docs/en/concepts/tasks.mdx index ac9073f13..722980c0d 100644 --- a/docs/en/concepts/tasks.mdx +++ b/docs/en/concepts/tasks.mdx @@ -61,6 +61,11 @@ crew = Crew( | **Guardrail** _(optional)_ | `guardrail` | `Optional[Callable]` | Function to validate task output before proceeding to next task. | | **Guardrail Max Retries** _(optional)_ | `guardrail_max_retries` | `Optional[int]` | Maximum number of retries when guardrail validation fails. Defaults to 3. | + + The task attribute `max_retries` is deprecated and will be removed in v1.0.0. + Use `guardrail_max_retries` instead to control retry attempts when a guardrail fails. + + ## Creating Tasks There are two ways to create tasks in CrewAI: using **YAML configuration (recommended)** or defining them **directly in code**. @@ -432,7 +437,7 @@ When a guardrail returns `(False, error)`: 2. The agent attempts to fix the issue 3. The process repeats until: - The guardrail returns `(True, result)` - - Maximum retries are reached + - Maximum retries are reached (`guardrail_max_retries`) Example with retry handling: ```python Code diff --git a/docs/en/enterprise/features/traces.mdx b/docs/en/enterprise/features/traces.mdx index 94e407413..3e8ba961e 100644 --- a/docs/en/enterprise/features/traces.mdx +++ b/docs/en/enterprise/features/traces.mdx @@ -141,6 +141,16 @@ Traces are invaluable for troubleshooting issues with your crews: +## Performance and batching + +CrewAI batches trace uploads to reduce overhead on high-volume runs: + +- A TraceBatchManager buffers events and sends them in batches via the Plus API client +- Reduces network chatter and improves reliability on flaky connections +- Automatically enabled in the default trace listener; no configuration needed + +This yields more stable tracing under load while preserving detailed task/agent telemetry. + Contact our support team for assistance with trace analysis or any other CrewAI Enterprise features. \ No newline at end of file diff --git a/docs/en/enterprise/guides/automation-triggers.mdx b/docs/en/enterprise/guides/automation-triggers.mdx index 872724b44..6fe8c30ad 100644 --- a/docs/en/enterprise/guides/automation-triggers.mdx +++ b/docs/en/enterprise/guides/automation-triggers.mdx @@ -96,6 +96,13 @@ class MyAutomatedCrew: The crew will automatically receive and can access the trigger payload through the standard CrewAI context mechanisms. + + Crew and Flow inputs can include `crewai_trigger_payload`. CrewAI automatically injects this payload: + - Tasks: appended to the first task's description by default ("Trigger Payload: {crewai_trigger_payload}") + - Control via `allow_crewai_trigger_context`: set `True` to always inject, `False` to never inject + - Flows: any `@start()` method that accepts a `crewai_trigger_payload` parameter will receive it + + ### Integration with Flows For flows, you have more control over how trigger data is handled: diff --git a/docs/en/guides/flows/mastering-flow-state.mdx b/docs/en/guides/flows/mastering-flow-state.mdx index 4d1fac515..ac4b492ac 100644 --- a/docs/en/guides/flows/mastering-flow-state.mdx +++ b/docs/en/guides/flows/mastering-flow-state.mdx @@ -348,6 +348,31 @@ class SelectivePersistFlow(Flow): ## Advanced State Patterns +### Conditional starts and resumable execution + +Flows support conditional `@start()` and resumable execution for HITL/cyclic scenarios: + +```python +from crewai.flow.flow import Flow, start, listen, and_, or_ + +class ResumableFlow(Flow): + @start() # unconditional start + def init(self): + ... + + # Conditional start: run after "init" or external trigger name + @start("init") + def maybe_begin(self): + ... + + @listen(and_(init, maybe_begin)) + def proceed(self): + ... +``` + +- Conditional `@start()` accepts a method name, a router label, or a callable condition. +- During resume, listeners continue from prior checkpoints; cycle/router branches honor resumption flags. + ### State-Based Conditional Logic You can use state to implement complex conditional logic in your flows: diff --git a/docs/en/installation.mdx b/docs/en/installation.mdx index f319d0a40..d7aef8960 100644 --- a/docs/en/installation.mdx +++ b/docs/en/installation.mdx @@ -30,6 +30,12 @@ Watch this video tutorial for a step-by-step demonstration of the installation p If you need to update Python, visit [python.org/downloads](https://python.org/downloads) + + **OpenAI SDK Requirement** + + CrewAI 0.175.0 requires `openai >= 1.13.3`. If you manage dependencies yourself, ensure your environment satisfies this constraint to avoid import/runtime issues. + + CrewAI uses the `uv` as its dependency management and package handling tool. It simplifies project setup and execution, offering a seamless experience. If you haven't installed `uv` yet, follow **step 1** to quickly get it set up on your system, else you can skip to **step 2**.