fix: ensure instrumentation flags

This commit is contained in:
Greyson LaLonde
2025-11-15 20:48:40 -05:00
committed by GitHub
parent d7bdac12a2
commit b546982690
24 changed files with 4035 additions and 1560 deletions

View File

@@ -402,6 +402,77 @@ crewai config reset
After resetting configuration, re-run `crewai login` to authenticate again. After resetting configuration, re-run `crewai login` to authenticate again.
</Tip> </Tip>
### 14. Trace Management
Manage trace collection preferences for your Crew and Flow executions.
```shell Terminal
crewai traces [COMMAND]
```
#### Commands:
- `enable`: Enable trace collection for crew/flow executions
```shell Terminal
crewai traces enable
```
- `disable`: Disable trace collection for crew/flow executions
```shell Terminal
crewai traces disable
```
- `status`: Show current trace collection status
```shell Terminal
crewai traces status
```
#### How Tracing Works
Trace collection is controlled by checking three settings in priority order:
1. **Explicit flag in code** (highest priority - can enable OR disable):
```python
crew = Crew(agents=[...], tasks=[...], tracing=True) # Always enable
crew = Crew(agents=[...], tasks=[...], tracing=False) # Always disable
crew = Crew(agents=[...], tasks=[...]) # Check lower priorities (default)
```
- `tracing=True` will **always enable** tracing (overrides everything)
- `tracing=False` will **always disable** tracing (overrides everything)
- `tracing=None` or omitted will check lower priority settings
2. **Environment variable** (second priority):
```env
CREWAI_TRACING_ENABLED=true
```
- Checked only if `tracing` is not explicitly set to `True` or `False` in code
- Set to `true` or `1` to enable tracing
3. **User preference** (lowest priority):
```shell Terminal
crewai traces enable
```
- Checked only if `tracing` is not set in code and `CREWAI_TRACING_ENABLED` is not set to `true`
- Running `crewai traces enable` is sufficient to enable tracing by itself
<Note>
**To enable tracing**, use any one of these methods:
- Set `tracing=True` in your Crew/Flow code, OR
- Add `CREWAI_TRACING_ENABLED=true` to your `.env` file, OR
- Run `crewai traces enable`
**To disable tracing**, use any ONE of these methods:
- Set `tracing=False` in your Crew/Flow code (overrides everything), OR
- Remove or set to `false` the `CREWAI_TRACING_ENABLED` env var, OR
- Run `crewai traces disable`
Higher priority settings override lower ones.
</Note>
<Tip>
For more information about tracing, see the [Tracing documentation](/observability/tracing).
</Tip>
<Tip> <Tip>
CrewAI CLI handles authentication to the Tool Repository automatically when adding packages to your project. Just append `crewai` before any `uv` command to use it. E.g. `crewai uv add requests`. For more information, see [Tool Repository](https://docs.crewai.com/enterprise/features/tool-repository) docs. CrewAI CLI handles authentication to the Tool Repository automatically when adding packages to your project. Just append `crewai` before any `uv` command to use it. E.g. `crewai uv add requests`. For more information, see [Tool Repository](https://docs.crewai.com/enterprise/features/tool-repository) docs.
</Tip> </Tip>

View File

@@ -493,5 +493,206 @@ def config_reset():
config_command.reset_all_settings() config_command.reset_all_settings()
@crewai.group()
def env():
"""Environment variable commands."""
@env.command("view")
def env_view():
"""View tracing-related environment variables."""
import os
from pathlib import Path
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
console = Console()
# Check for .env file
env_file = Path(".env")
env_file_exists = env_file.exists()
# Create table for environment variables
table = Table(show_header=True, header_style="bold cyan", expand=True)
table.add_column("Environment Variable", style="cyan", width=30)
table.add_column("Value", style="white", width=20)
table.add_column("Source", style="yellow", width=20)
# Check CREWAI_TRACING_ENABLED
crewai_tracing = os.getenv("CREWAI_TRACING_ENABLED", "")
if crewai_tracing:
table.add_row(
"CREWAI_TRACING_ENABLED",
crewai_tracing,
"Environment/Shell",
)
else:
table.add_row(
"CREWAI_TRACING_ENABLED",
"[dim]Not set[/dim]",
"[dim]—[/dim]",
)
# Check other related env vars
crewai_testing = os.getenv("CREWAI_TESTING", "")
if crewai_testing:
table.add_row("CREWAI_TESTING", crewai_testing, "Environment/Shell")
crewai_user_id = os.getenv("CREWAI_USER_ID", "")
if crewai_user_id:
table.add_row("CREWAI_USER_ID", crewai_user_id, "Environment/Shell")
crewai_org_id = os.getenv("CREWAI_ORG_ID", "")
if crewai_org_id:
table.add_row("CREWAI_ORG_ID", crewai_org_id, "Environment/Shell")
# Check if .env file exists
table.add_row(
".env file",
"✅ Found" if env_file_exists else "❌ Not found",
str(env_file.resolve()) if env_file_exists else "N/A",
)
panel = Panel(
table,
title="Tracing Environment Variables",
border_style="blue",
padding=(1, 2),
)
console.print("\n")
console.print(panel)
# Show helpful message
if env_file_exists:
console.print(
"\n[dim]💡 Tip: To enable tracing via .env, add: CREWAI_TRACING_ENABLED=true[/dim]"
)
else:
console.print(
"\n[dim]💡 Tip: Create a .env file in your project root and add: CREWAI_TRACING_ENABLED=true[/dim]"
)
console.print()
@crewai.group()
def traces():
"""Trace collection management commands."""
@traces.command("enable")
def traces_enable():
"""Enable trace collection for crew/flow executions."""
from rich.console import Console
from rich.panel import Panel
from crewai.events.listeners.tracing.utils import (
_load_user_data,
_save_user_data,
)
console = Console()
# Update user data to enable traces
user_data = _load_user_data()
user_data["trace_consent"] = True
user_data["first_execution_done"] = True
_save_user_data(user_data)
panel = Panel(
"✅ Trace collection has been enabled!\n\n"
"Your crew/flow executions will now send traces to CrewAI+.\n"
"Use 'crewai traces disable' to turn off trace collection.",
title="Traces Enabled",
border_style="green",
padding=(1, 2),
)
console.print(panel)
@traces.command("disable")
def traces_disable():
"""Disable trace collection for crew/flow executions."""
from rich.console import Console
from rich.panel import Panel
from crewai.events.listeners.tracing.utils import (
_load_user_data,
_save_user_data,
)
console = Console()
# Update user data to disable traces
user_data = _load_user_data()
user_data["trace_consent"] = False
user_data["first_execution_done"] = True
_save_user_data(user_data)
panel = Panel(
"❌ Trace collection has been disabled!\n\n"
"Your crew/flow executions will no longer send traces.\n"
"Use 'crewai traces enable' to turn trace collection back on.",
title="Traces Disabled",
border_style="red",
padding=(1, 2),
)
console.print(panel)
@traces.command("status")
def traces_status():
"""Show current trace collection status."""
import os
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from crewai.events.listeners.tracing.utils import (
_load_user_data,
is_tracing_enabled,
)
console = Console()
user_data = _load_user_data()
table = Table(show_header=False, box=None)
table.add_column("Setting", style="cyan")
table.add_column("Value", style="white")
# Check environment variable
env_enabled = os.getenv("CREWAI_TRACING_ENABLED", "false")
table.add_row("CREWAI_TRACING_ENABLED", env_enabled)
# Check user consent
trace_consent = user_data.get("trace_consent")
if trace_consent is True:
consent_status = "✅ Enabled (user consented)"
elif trace_consent is False:
consent_status = "❌ Disabled (user declined)"
else:
consent_status = "⚪ Not set (first-time user)"
table.add_row("User Consent", consent_status)
# Check overall status
if is_tracing_enabled():
overall_status = "✅ ENABLED"
border_style = "green"
else:
overall_status = "❌ DISABLED"
border_style = "red"
table.add_row("Overall Status", overall_status)
panel = Panel(
table,
title="Trace Collection Status",
border_style=border_style,
padding=(1, 2),
)
console.print(panel)
if __name__ == "__main__": if __name__ == "__main__":
crewai() crewai()

View File

@@ -1,3 +1,5 @@
from datetime import datetime
import os
from typing import Any from typing import Any
from rich.console import Console from rich.console import Console
@@ -5,6 +7,7 @@ from rich.table import Table
from crewai.cli.command import BaseCommand from crewai.cli.command import BaseCommand
from crewai.cli.config import HIDDEN_SETTINGS_KEYS, READONLY_SETTINGS_KEYS, Settings from crewai.cli.config import HIDDEN_SETTINGS_KEYS, READONLY_SETTINGS_KEYS, Settings
from crewai.events.listeners.tracing.utils import _load_user_data
console = Console() console = Console()
@@ -39,6 +42,42 @@ class SettingsCommand(BaseCommand):
table.add_row(field_name, display_value, description) table.add_row(field_name, display_value, description)
# Add trace-related settings from user data
user_data = _load_user_data()
# CREWAI_TRACING_ENABLED environment variable
env_tracing = os.getenv("CREWAI_TRACING_ENABLED", "")
env_tracing_display = env_tracing if env_tracing else "Not set"
table.add_row(
"CREWAI_TRACING_ENABLED",
env_tracing_display,
"Environment variable to enable/disable tracing",
)
# Trace consent status
trace_consent = user_data.get("trace_consent")
if trace_consent is True:
consent_display = "✅ Enabled"
elif trace_consent is False:
consent_display = "❌ Disabled"
else:
consent_display = "Not set"
table.add_row(
"trace_consent", consent_display, "Whether trace collection is enabled"
)
# First execution timestamp
if user_data.get("first_execution_at"):
timestamp = datetime.fromtimestamp(user_data["first_execution_at"])
first_exec_display = timestamp.strftime("%Y-%m-%d %H:%M:%S")
else:
first_exec_display = "Not set"
table.add_row(
"first_execution_at",
first_exec_display,
"Timestamp of first crew/flow execution",
)
console.print(table) console.print(table)
def set(self, key: str, value: str) -> None: def set(self, key: str, value: str) -> None:

View File

@@ -27,6 +27,8 @@ from pydantic import (
model_validator, model_validator,
) )
from pydantic_core import PydanticCustomError from pydantic_core import PydanticCustomError
from rich.console import Console
from rich.panel import Panel
from typing_extensions import Self from typing_extensions import Self
from crewai.agent import Agent from crewai.agent import Agent
@@ -39,8 +41,8 @@ from crewai.events.listeners.tracing.trace_listener import (
TraceCollectionListener, TraceCollectionListener,
) )
from crewai.events.listeners.tracing.utils import ( from crewai.events.listeners.tracing.utils import (
is_tracing_enabled, set_tracing_enabled,
should_auto_collect_first_time_traces, should_enable_tracing,
) )
from crewai.events.types.crew_events import ( from crewai.events.types.crew_events import (
CrewKickoffCompletedEvent, CrewKickoffCompletedEvent,
@@ -280,8 +282,8 @@ class Crew(FlowTrackable, BaseModel):
description="Metrics for the LLM usage during all tasks execution.", description="Metrics for the LLM usage during all tasks execution.",
) )
tracing: bool | None = Field( tracing: bool | None = Field(
default=False, default=None,
description="Whether to enable tracing for the crew.", description="Whether to enable tracing for the crew. True=always enable, False=always disable, None=check environment/user settings.",
) )
@field_validator("id", mode="before") @field_validator("id", mode="before")
@@ -311,17 +313,16 @@ class Crew(FlowTrackable, BaseModel):
@model_validator(mode="after") @model_validator(mode="after")
def set_private_attrs(self) -> Crew: def set_private_attrs(self) -> Crew:
"""set private attributes.""" """set private attributes."""
self._cache_handler = CacheHandler() self._cache_handler = CacheHandler()
event_listener = EventListener() # type: ignore[no-untyped-call] event_listener = EventListener() # type: ignore[no-untyped-call]
if ( # Determine and set tracing state once for this execution
is_tracing_enabled() tracing_enabled = should_enable_tracing(override=self.tracing)
or self.tracing set_tracing_enabled(tracing_enabled)
or should_auto_collect_first_time_traces()
): # Always setup trace listener - actual execution control is via contextvar
trace_listener = TraceCollectionListener() trace_listener = TraceCollectionListener()
trace_listener.setup_listeners(crewai_event_bus) trace_listener.setup_listeners(crewai_event_bus)
event_listener.verbose = self.verbose event_listener.verbose = self.verbose
event_listener.formatter.verbose = self.verbose event_listener.formatter.verbose = self.verbose
self._logger = Logger(verbose=self.verbose) self._logger = Logger(verbose=self.verbose)
@@ -1171,6 +1172,10 @@ class Crew(FlowTrackable, BaseModel):
total_tokens=self.token_usage.total_tokens, total_tokens=self.token_usage.total_tokens,
), ),
) )
# Finalization is handled by trace listener (always initialized)
# The batch manager checks contextvar to determine if tracing is enabled
return CrewOutput( return CrewOutput(
raw=final_task_output.raw, raw=final_task_output.raw,
pydantic=final_task_output.pydantic, pydantic=final_task_output.pydantic,
@@ -1651,3 +1656,32 @@ class Crew(FlowTrackable, BaseModel):
and able_to_inject and able_to_inject
): ):
self.tasks[0].allow_crewai_trigger_context = True self.tasks[0].allow_crewai_trigger_context = True
def _show_tracing_disabled_message(self) -> None:
"""Show a message when tracing is disabled."""
from crewai.events.listeners.tracing.utils import has_user_declined_tracing
console = Console()
if has_user_declined_tracing():
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
else:
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
panel = Panel(
message,
title="Tracing Status",
border_style="blue",
padding=(1, 2),
)
console.print(panel)

View File

@@ -10,6 +10,7 @@ import atexit
from collections.abc import Callable, Generator from collections.abc import Callable, Generator
from concurrent.futures import Future, ThreadPoolExecutor from concurrent.futures import Future, ThreadPoolExecutor
from contextlib import contextmanager from contextlib import contextmanager
import contextvars
import threading import threading
from typing import Any, Final, ParamSpec, TypeVar from typing import Any, Final, ParamSpec, TypeVar
@@ -288,8 +289,9 @@ class CrewAIEventsBus:
if event_type is LLMStreamChunkEvent: if event_type is LLMStreamChunkEvent:
self._call_handlers(source, event, level_sync) self._call_handlers(source, event, level_sync)
else: else:
ctx = contextvars.copy_context()
future = self._sync_executor.submit( future = self._sync_executor.submit(
self._call_handlers, source, event, level_sync ctx.run, self._call_handlers, source, event, level_sync
) )
await asyncio.get_running_loop().run_in_executor( await asyncio.get_running_loop().run_in_executor(
None, future.result None, future.result
@@ -346,8 +348,9 @@ class CrewAIEventsBus:
if event_type is LLMStreamChunkEvent: if event_type is LLMStreamChunkEvent:
self._call_handlers(source, event, sync_handlers) self._call_handlers(source, event, sync_handlers)
else: else:
ctx = contextvars.copy_context()
sync_future = self._sync_executor.submit( sync_future = self._sync_executor.submit(
self._call_handlers, source, event, sync_handlers ctx.run, self._call_handlers, source, event, sync_handlers
) )
if not async_handlers: if not async_handlers:
return sync_future return sync_future

View File

@@ -1,5 +1,4 @@
import logging import logging
from pathlib import Path
import uuid import uuid
import webbrowser import webbrowser
@@ -17,47 +16,6 @@ from crewai.events.listeners.tracing.utils import (
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def _update_or_create_env_file():
"""Update or create .env file with CREWAI_TRACING_ENABLED=true."""
env_path = Path(".env")
env_content = ""
variable_name = "CREWAI_TRACING_ENABLED"
variable_value = "true"
# Read existing content if file exists
if env_path.exists():
with open(env_path, "r") as f:
env_content = f.read()
# Check if CREWAI_TRACING_ENABLED is already set
lines = env_content.splitlines()
variable_exists = False
updated_lines = []
for line in lines:
if line.strip().startswith(f"{variable_name}="):
# Update existing variable
updated_lines.append(f"{variable_name}={variable_value}")
variable_exists = True
else:
updated_lines.append(line)
# Add variable if it doesn't exist
if not variable_exists:
if updated_lines and not updated_lines[-1].strip():
# If last line is empty, replace it
updated_lines[-1] = f"{variable_name}={variable_value}"
else:
# Add new line and then the variable
updated_lines.append(f"{variable_name}={variable_value}")
# Write updated content
with open(env_path, "w") as f:
f.write("\n".join(updated_lines))
if updated_lines: # Add final newline if there's content
f.write("\n")
class FirstTimeTraceHandler: class FirstTimeTraceHandler:
"""Handles the first-time user trace collection and display flow.""" """Handles the first-time user trace collection and display flow."""
@@ -96,20 +54,16 @@ class FirstTimeTraceHandler:
if user_wants_traces: if user_wants_traces:
self._initialize_backend_and_send_events() self._initialize_backend_and_send_events()
# Enable tracing for future runs by updating .env file
try:
_update_or_create_env_file()
except Exception: # noqa: S110
pass
if self.ephemeral_url: if self.ephemeral_url:
self._display_ephemeral_trace_link() self._display_ephemeral_trace_link()
else:
self._show_tracing_declined_message()
mark_first_execution_completed() mark_first_execution_completed(user_consented=user_wants_traces)
except Exception as e: except Exception as e:
self._gracefully_fail(f"Error in trace handling: {e}") self._gracefully_fail(f"Error in trace handling: {e}")
mark_first_execution_completed() mark_first_execution_completed(user_consented=False)
def _initialize_backend_and_send_events(self): def _initialize_backend_and_send_events(self):
"""Initialize backend batch and send collected events.""" """Initialize backend batch and send collected events."""
@@ -182,8 +136,13 @@ This trace shows:
• Tool usage and results • Tool usage and results
• LLM calls and responses • LLM calls and responses
✅ Tracing has been enabled for future runs! (CREWAI_TRACING_ENABLED=true added to .env) ✅ Tracing has been enabled for future runs!
You can also add tracing=True to your Crew(tracing=True) / Flow(tracing=True) for more control. Your preference has been saved. Future Crew/Flow executions will automatically collect traces.
To disable tracing later, do any one of these:
• Set tracing=False in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=false in your project's .env file
• Run: crewai traces disable
📝 Note: This link will expire in 24 hours. 📝 Note: This link will expire in 24 hours.
""".strip() """.strip()
@@ -199,6 +158,32 @@ You can also add tracing=True to your Crew(tracing=True) / Flow(tracing=True) fo
console.print(panel) console.print(panel)
console.print() console.print()
def _show_tracing_declined_message(self):
"""Show message when user declines tracing."""
console = Console()
panel_content = """
Info: Tracing has been disabled.
Your preference has been saved. Future Crew/Flow executions will not collect traces.
To enable tracing later, do any one of these:
• Set tracing=True in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable
""".strip()
panel = Panel(
panel_content,
title="Tracing Preference Saved",
border_style="blue",
padding=(1, 2),
)
console.print("\n")
console.print(panel)
console.print()
def _gracefully_fail(self, error_message: str): def _gracefully_fail(self, error_message: str):
"""Handle errors gracefully without disrupting user experience.""" """Handle errors gracefully without disrupting user experience."""
console = Console() console = Console()
@@ -218,8 +203,14 @@ Unfortunately, we couldn't upload them to the server right now, but here's what
• Execution duration: {self.batch_manager.calculate_duration("execution")}ms • Execution duration: {self.batch_manager.calculate_duration("execution")}ms
• Batch ID: {self.batch_manager.trace_batch_id} • Batch ID: {self.batch_manager.trace_batch_id}
Tracing has been enabled for future runs! (CREWAI_TRACING_ENABLED=true added to .env) Tracing has been enabled for future runs!
Your preference has been saved. Future Crew/Flow executions will automatically collect traces.
The traces include agent decisions, task execution, and tool usage. The traces include agent decisions, task execution, and tool usage.
To disable tracing later, do any one of these:
• Set tracing=False in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=false in your project's .env file
• Run: crewai traces disable
""".strip() """.strip()
panel = Panel( panel = Panel(

View File

@@ -12,7 +12,10 @@ from crewai.cli.authentication.token import AuthError, get_auth_token
from crewai.cli.plus_api import PlusAPI from crewai.cli.plus_api import PlusAPI
from crewai.cli.version import get_crewai_version from crewai.cli.version import get_crewai_version
from crewai.events.listeners.tracing.types import TraceEvent from crewai.events.listeners.tracing.types import TraceEvent
from crewai.events.listeners.tracing.utils import should_auto_collect_first_time_traces from crewai.events.listeners.tracing.utils import (
is_tracing_enabled_in_context,
should_auto_collect_first_time_traces,
)
from crewai.utilities.constants import CREWAI_BASE_URL from crewai.utilities.constants import CREWAI_BASE_URL
@@ -107,6 +110,9 @@ class TraceBatchManager:
): ):
"""Send batch initialization to backend""" """Send batch initialization to backend"""
if not is_tracing_enabled_in_context():
return
if not self.plus_api or not self.current_batch: if not self.plus_api or not self.current_batch:
return return
@@ -243,7 +249,8 @@ class TraceBatchManager:
def finalize_batch(self) -> TraceBatch | None: def finalize_batch(self) -> TraceBatch | None:
"""Finalize batch and return it for sending""" """Finalize batch and return it for sending"""
if not self.current_batch:
if not self.current_batch or not is_tracing_enabled_in_context():
return None return None
all_handlers_completed = self.wait_for_pending_events() all_handlers_completed = self.wait_for_pending_events()

View File

@@ -10,13 +10,14 @@ from crewai.cli.authentication.token import AuthError, get_auth_token
from crewai.cli.version import get_crewai_version from crewai.cli.version import get_crewai_version
from crewai.events.base_event_listener import BaseEventListener from crewai.events.base_event_listener import BaseEventListener
from crewai.events.event_bus import CrewAIEventsBus from crewai.events.event_bus import CrewAIEventsBus
from crewai.events.utils.console_formatter import ConsoleFormatter
from crewai.events.listeners.tracing.first_time_trace_handler import ( from crewai.events.listeners.tracing.first_time_trace_handler import (
FirstTimeTraceHandler, FirstTimeTraceHandler,
) )
from crewai.events.listeners.tracing.trace_batch_manager import TraceBatchManager from crewai.events.listeners.tracing.trace_batch_manager import TraceBatchManager
from crewai.events.listeners.tracing.types import TraceEvent from crewai.events.listeners.tracing.types import TraceEvent
from crewai.events.listeners.tracing.utils import safe_serialize_to_dict from crewai.events.listeners.tracing.utils import (
safe_serialize_to_dict,
)
from crewai.events.types.agent_events import ( from crewai.events.types.agent_events import (
AgentExecutionCompletedEvent, AgentExecutionCompletedEvent,
AgentExecutionErrorEvent, AgentExecutionErrorEvent,
@@ -80,6 +81,7 @@ from crewai.events.types.tool_usage_events import (
ToolUsageFinishedEvent, ToolUsageFinishedEvent,
ToolUsageStartedEvent, ToolUsageStartedEvent,
) )
from crewai.events.utils.console_formatter import ConsoleFormatter
class TraceCollectionListener(BaseEventListener): class TraceCollectionListener(BaseEventListener):
@@ -627,3 +629,35 @@ class TraceCollectionListener(BaseEventListener):
"event": safe_serialize_to_dict(event), "event": safe_serialize_to_dict(event),
"source": source, "source": source,
} }
def _show_tracing_disabled_message(self) -> None:
"""Show a message when tracing is disabled."""
from rich.console import Console
from rich.panel import Panel
from crewai.events.listeners.tracing.utils import has_user_declined_tracing
console = Console()
if has_user_declined_tracing():
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
else:
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
panel = Panel(
message,
title="Tracing Status",
border_style="blue",
padding=(1, 2),
)
console.print(panel)

View File

@@ -1,3 +1,4 @@
from contextvars import ContextVar, Token
from datetime import datetime from datetime import datetime
import getpass import getpass
import hashlib import hashlib
@@ -8,7 +9,7 @@ from pathlib import Path
import platform import platform
import re import re
import subprocess import subprocess
from typing import Any from typing import Any, cast
import uuid import uuid
import click import click
@@ -23,7 +24,120 @@ from crewai.utilities.serialization import to_serializable
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
_tracing_enabled: ContextVar[bool | None] = ContextVar("_tracing_enabled", default=None)
def should_enable_tracing(*, override: bool | None = None) -> bool:
"""Determine if tracing should be enabled.
This is the single source of truth for tracing enablement.
Priority order:
1. Explicit override (e.g., Crew.tracing=True/False)
2. Environment variable CREWAI_TRACING_ENABLED
3. User consent from user_data
Args:
override: Explicit override for tracing (True=always enable, False=always disable, None=check other settings)
Returns:
True if tracing should be enabled, False otherwise.
"""
if override is True:
return True
if override is False:
return False
env_value = os.getenv("CREWAI_TRACING_ENABLED", "").lower()
if env_value in ("true", "1"):
return True
data = _load_user_data()
if data.get("trace_consent", False) is not False:
return True
return False
def set_tracing_enabled(enabled: bool) -> object:
"""Set tracing enabled state for current execution context.
Args:
enabled: Whether tracing should be enabled
Returns:
A token that can be used with reset_tracing_enabled to restore previous value.
"""
return _tracing_enabled.set(enabled)
def reset_tracing_enabled(token: Token[bool | None]) -> None:
"""Reset tracing enabled state to previous value.
Args:
token: Token returned from set_tracing_enabled
"""
_tracing_enabled.reset(token)
def is_tracing_enabled_in_context() -> bool:
"""Check if tracing is enabled in current execution context.
Returns:
True if tracing is enabled in context, False otherwise.
Returns False if context has not been set.
"""
enabled = _tracing_enabled.get()
return enabled if enabled is not None else False
def _user_data_file() -> Path:
base = Path(db_storage_path())
base.mkdir(parents=True, exist_ok=True)
return base / ".crewai_user.json"
def _load_user_data() -> dict[str, Any]:
p = _user_data_file()
if p.exists():
try:
return cast(dict[str, Any], json.loads(p.read_text()))
except (json.JSONDecodeError, OSError, PermissionError) as e:
logger.warning(f"Failed to load user data: {e}")
return {}
def _save_user_data(data: dict[str, Any]) -> None:
try:
p = _user_data_file()
p.write_text(json.dumps(data, indent=2))
except (OSError, PermissionError) as e:
logger.warning(f"Failed to save user data: {e}")
def has_user_declined_tracing() -> bool:
"""Check if user has explicitly declined trace collection.
Returns:
True if user previously declined tracing, False otherwise.
"""
data = _load_user_data()
if data.get("first_execution_done", False):
return data.get("trace_consent", False) is False
return False
def is_tracing_enabled() -> bool: def is_tracing_enabled() -> bool:
"""Check if tracing should be enabled.
Returns:
True if tracing is enabled and not disabled, False otherwise.
"""
# If user has explicitly declined tracing, never enable it
if has_user_declined_tracing():
return False
return os.getenv("CREWAI_TRACING_ENABLED", "false").lower() == "true" return os.getenv("CREWAI_TRACING_ENABLED", "false").lower() == "true"
@@ -213,36 +327,12 @@ def _get_generic_system_id() -> str | None:
return None return None
def _user_data_file() -> Path:
base = Path(db_storage_path())
base.mkdir(parents=True, exist_ok=True)
return base / ".crewai_user.json"
def _load_user_data() -> dict:
p = _user_data_file()
if p.exists():
try:
return json.loads(p.read_text())
except (json.JSONDecodeError, OSError, PermissionError) as e:
logger.warning(f"Failed to load user data: {e}")
return {}
def _save_user_data(data: dict) -> None:
try:
p = _user_data_file()
p.write_text(json.dumps(data, indent=2))
except (OSError, PermissionError) as e:
logger.warning(f"Failed to save user data: {e}")
def get_user_id() -> str: def get_user_id() -> str:
"""Stable, anonymized user identifier with caching.""" """Stable, anonymized user identifier with caching."""
data = _load_user_data() data = _load_user_data()
if "user_id" in data: if "user_id" in data:
return data["user_id"] return cast(str, data["user_id"])
try: try:
username = getpass.getuser() username = getpass.getuser()
@@ -263,8 +353,12 @@ def is_first_execution() -> bool:
return not data.get("first_execution_done", False) return not data.get("first_execution_done", False)
def mark_first_execution_done() -> None: def mark_first_execution_done(user_consented: bool = False) -> None:
"""Mark that the first execution has been completed.""" """Mark that the first execution has been completed.
Args:
user_consented: Whether the user consented to trace collection.
"""
data = _load_user_data() data = _load_user_data()
if data.get("first_execution_done", False): if data.get("first_execution_done", False):
return return
@@ -275,12 +369,13 @@ def mark_first_execution_done() -> None:
"first_execution_at": datetime.now().timestamp(), "first_execution_at": datetime.now().timestamp(),
"user_id": get_user_id(), "user_id": get_user_id(),
"machine_id": _get_machine_id(), "machine_id": _get_machine_id(),
"trace_consent": user_consented,
} }
) )
_save_user_data(data) _save_user_data(data)
def safe_serialize_to_dict(obj, exclude: set[str] | None = None) -> dict[str, Any]: def safe_serialize_to_dict(obj: Any, exclude: set[str] | None = None) -> dict[str, Any]:
"""Safely serialize an object to a dictionary for event data.""" """Safely serialize an object to a dictionary for event data."""
try: try:
serialized = to_serializable(obj, exclude) serialized = to_serializable(obj, exclude)
@@ -291,7 +386,9 @@ def safe_serialize_to_dict(obj, exclude: set[str] | None = None) -> dict[str, An
return {"serialization_error": str(e), "object_type": type(obj).__name__} return {"serialization_error": str(e), "object_type": type(obj).__name__}
def truncate_messages(messages, max_content_length=500, max_messages=5): def truncate_messages(
messages: list[dict[str, Any]], max_content_length: int = 500, max_messages: int = 5
) -> list[dict[str, Any]]:
"""Truncate message content and limit number of messages""" """Truncate message content and limit number of messages"""
if not messages or not isinstance(messages, list): if not messages or not isinstance(messages, list):
return messages return messages
@@ -308,9 +405,22 @@ def truncate_messages(messages, max_content_length=500, max_messages=5):
def should_auto_collect_first_time_traces() -> bool: def should_auto_collect_first_time_traces() -> bool:
"""True if we should auto-collect traces for first-time user.""" """True if we should auto-collect traces for first-time user.
Returns:
True if first-time user AND telemetry not disabled AND tracing not explicitly enabled, False otherwise.
"""
if _is_test_environment(): if _is_test_environment():
return False return False
# If user has previously declined, never auto-collect
if has_user_declined_tracing():
return False
if is_tracing_enabled_in_context():
return False
return is_first_execution() return is_first_execution()
@@ -355,7 +465,7 @@ def prompt_user_for_trace_viewing(timeout_seconds: int = 20) -> bool:
result = [False] result = [False]
def get_input(): def get_input() -> None:
try: try:
response = input().strip().lower() response = input().strip().lower()
result[0] = response in ["y", "yes"] result[0] = response in ["y", "yes"]
@@ -377,6 +487,10 @@ def prompt_user_for_trace_viewing(timeout_seconds: int = 20) -> bool:
return False return False
def mark_first_execution_completed() -> None: def mark_first_execution_completed(user_consented: bool = False) -> None:
"""Mark first execution as completed (called after trace prompt).""" """Mark first execution as completed (called after trace prompt).
mark_first_execution_done()
Args:
user_consented: Whether the user consented to trace collection.
"""
mark_first_execution_done(user_consented=user_consented)

View File

@@ -1,3 +1,4 @@
import threading
from typing import Any, ClassVar from typing import Any, ClassVar
from rich.console import Console from rich.console import Console
@@ -27,6 +28,7 @@ class ConsoleFormatter:
_pending_a2a_turn_number: int | None = None _pending_a2a_turn_number: int | None = None
_a2a_turn_branches: ClassVar[dict[int, Tree]] = {} _a2a_turn_branches: ClassVar[dict[int, Tree]] = {}
_current_a2a_agent_name: str | None = None _current_a2a_agent_name: str | None = None
crew_completion_printed: ClassVar[threading.Event] = threading.Event()
def __init__(self, verbose: bool = False): def __init__(self, verbose: bool = False):
self.console = Console(width=None) self.console = Console(width=None)
@@ -47,13 +49,44 @@ class ConsoleFormatter:
padding=(1, 2), padding=(1, 2),
) )
def _show_tracing_disabled_message_if_needed(self) -> None:
"""Show tracing disabled message if tracing is not enabled."""
from crewai.events.listeners.tracing.utils import (
has_user_declined_tracing,
is_tracing_enabled_in_context,
)
if not is_tracing_enabled_in_context():
if has_user_declined_tracing():
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
else:
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Crew/Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
panel = Panel(
message,
title="Tracing Status",
border_style="blue",
padding=(1, 2),
)
self.console.print(panel)
def create_status_content( def create_status_content(
self, self,
title: str, title: str,
name: str, name: str,
status_style: str = "blue", status_style: str = "blue",
tool_args: dict[str, Any] | str = "", tool_args: dict[str, Any] | str = "",
**fields, **fields: Any,
) -> Text: ) -> Text:
"""Create standardized status content with consistent formatting.""" """Create standardized status content with consistent formatting."""
content = Text() content = Text()
@@ -92,7 +125,7 @@ class ConsoleFormatter:
"""Add a node to the tree with consistent styling.""" """Add a node to the tree with consistent styling."""
return parent.add(Text(text, style=style)) return parent.add(Text(text, style=style))
def print(self, *args, **kwargs) -> None: def print(self, *args: Any, **kwargs: Any) -> None:
"""Custom print that replaces consecutive Tree renders. """Custom print that replaces consecutive Tree renders.
* If the argument is a single ``Tree`` instance, we either start a * If the argument is a single ``Tree`` instance, we either start a
@@ -208,11 +241,20 @@ class ConsoleFormatter:
self.print_panel(content, title, style) self.print_panel(content, title, style)
if status in ["completed", "failed"]:
self.crew_completion_printed.set()
# Show tracing disabled message after crew completion
self._show_tracing_disabled_message_if_needed()
def create_crew_tree(self, crew_name: str, source_id: str) -> Tree | None: def create_crew_tree(self, crew_name: str, source_id: str) -> Tree | None:
"""Create and initialize a new crew tree with initial status.""" """Create and initialize a new crew tree with initial status."""
if not self.verbose: if not self.verbose:
return None return None
# Reset the crew completion event for this new crew execution
ConsoleFormatter.crew_completion_printed.clear()
tree = Tree( tree = Tree(
Text("🚀 Crew: ", style="cyan bold") + Text(crew_name, style="cyan") Text("🚀 Crew: ", style="cyan bold") + Text(crew_name, style="cyan")
) )
@@ -497,7 +539,7 @@ class ConsoleFormatter:
return method_branch return method_branch
def get_llm_tree(self, tool_name: str): def get_llm_tree(self, tool_name: str) -> Tree:
text = Text() text = Text()
text.append(f"🔧 Using {tool_name} from LLM available_function", style="yellow") text.append(f"🔧 Using {tool_name} from LLM available_function", style="yellow")
@@ -512,7 +554,7 @@ class ConsoleFormatter:
self, self,
tool_name: str, tool_name: str,
tool_args: dict[str, Any] | str, tool_args: dict[str, Any] | str,
): ) -> None:
# Create status content for the tool usage # Create status content for the tool usage
content = self.create_status_content( content = self.create_status_content(
"Tool Usage Started", tool_name, Status="In Progress", tool_args=tool_args "Tool Usage Started", tool_name, Status="In Progress", tool_args=tool_args
@@ -528,7 +570,7 @@ class ConsoleFormatter:
def handle_llm_tool_usage_finished( def handle_llm_tool_usage_finished(
self, self,
tool_name: str, tool_name: str,
): ) -> None:
tree = self.get_llm_tree(tool_name) tree = self.get_llm_tree(tool_name)
self.add_tree_node(tree, "✅ Tool Usage Completed", "green") self.add_tree_node(tree, "✅ Tool Usage Completed", "green")
self.print(tree) self.print(tree)
@@ -538,7 +580,7 @@ class ConsoleFormatter:
self, self,
tool_name: str, tool_name: str,
error: str, error: str,
): ) -> None:
tree = self.get_llm_tree(tool_name) tree = self.get_llm_tree(tool_name)
self.add_tree_node(tree, "❌ Tool Usage Failed", "red") self.add_tree_node(tree, "❌ Tool Usage Failed", "red")
self.print(tree) self.print(tree)
@@ -1558,7 +1600,7 @@ class ConsoleFormatter:
if branch_to_use is None and tree_to_use is not None: if branch_to_use is None and tree_to_use is not None:
branch_to_use = tree_to_use branch_to_use = tree_to_use
def add_panel(): def add_panel() -> None:
memory_text = str(memory_content) memory_text = str(memory_content)
if len(memory_text) > 500: if len(memory_text) > 500:
memory_text = memory_text[:497] + "..." memory_text = memory_text[:497] + "..."

View File

@@ -26,14 +26,17 @@ from uuid import uuid4
from opentelemetry import baggage from opentelemetry import baggage
from opentelemetry.context import attach, detach from opentelemetry.context import attach, detach
from pydantic import BaseModel, Field, ValidationError from pydantic import BaseModel, Field, ValidationError
from rich.console import Console
from rich.panel import Panel
from crewai.events.event_bus import crewai_event_bus from crewai.events.event_bus import crewai_event_bus
from crewai.events.listeners.tracing.trace_listener import ( from crewai.events.listeners.tracing.trace_listener import (
TraceCollectionListener, TraceCollectionListener,
) )
from crewai.events.listeners.tracing.utils import ( from crewai.events.listeners.tracing.utils import (
is_tracing_enabled, has_user_declined_tracing,
should_auto_collect_first_time_traces, set_tracing_enabled,
should_enable_tracing,
) )
from crewai.events.types.flow_events import ( from crewai.events.types.flow_events import (
FlowCreatedEvent, FlowCreatedEvent,
@@ -452,7 +455,7 @@ class Flow(Generic[T], metaclass=FlowMeta):
_router_paths: ClassVar[dict[FlowMethodName, list[FlowMethodName]]] = {} _router_paths: ClassVar[dict[FlowMethodName, list[FlowMethodName]]] = {}
initial_state: type[T] | T | None = None initial_state: type[T] | T | None = None
name: str | None = None name: str | None = None
tracing: bool | None = False tracing: bool | None = None
def __class_getitem__(cls: type[Flow[T]], item: type[T]) -> type[Flow[T]]: def __class_getitem__(cls: type[Flow[T]], item: type[T]) -> type[Flow[T]]:
class _FlowGeneric(cls): # type: ignore class _FlowGeneric(cls): # type: ignore
@@ -464,13 +467,14 @@ class Flow(Generic[T], metaclass=FlowMeta):
def __init__( def __init__(
self, self,
persistence: FlowPersistence | None = None, persistence: FlowPersistence | None = None,
tracing: bool | None = False, tracing: bool | None = None,
**kwargs: Any, **kwargs: Any,
) -> None: ) -> None:
"""Initialize a new Flow instance. """Initialize a new Flow instance.
Args: Args:
persistence: Optional persistence backend for storing flow states persistence: Optional persistence backend for storing flow states
tracing: Whether to enable tracing. True=always enable, False=always disable, None=check environment/user settings
**kwargs: Additional state values to initialize or override **kwargs: Additional state values to initialize or override
""" """
# Initialize basic instance attributes # Initialize basic instance attributes
@@ -488,13 +492,11 @@ class Flow(Generic[T], metaclass=FlowMeta):
# Initialize state with initial values # Initialize state with initial values
self._state = self._create_initial_state() self._state = self._create_initial_state()
self.tracing = tracing self.tracing = tracing
if ( tracing_enabled = should_enable_tracing(override=self.tracing)
is_tracing_enabled() set_tracing_enabled(tracing_enabled)
or self.tracing
or should_auto_collect_first_time_traces() trace_listener = TraceCollectionListener()
): trace_listener.setup_listeners(crewai_event_bus)
trace_listener = TraceCollectionListener()
trace_listener.setup_listeners(crewai_event_bus)
# Apply any additional kwargs # Apply any additional kwargs
if kwargs: if kwargs:
self._initialize_state(kwargs) self._initialize_state(kwargs)
@@ -936,18 +938,13 @@ class Flow(Generic[T], metaclass=FlowMeta):
) )
self._event_futures.clear() self._event_futures.clear()
if ( trace_listener = TraceCollectionListener()
is_tracing_enabled() if trace_listener.batch_manager.batch_owner_type == "flow":
or self.tracing if trace_listener.first_time_handler.is_first_time:
or should_auto_collect_first_time_traces() trace_listener.first_time_handler.mark_events_collected()
): trace_listener.first_time_handler.handle_execution_completion()
trace_listener = TraceCollectionListener() else:
if trace_listener.batch_manager.batch_owner_type == "flow": trace_listener.batch_manager.finalize_batch()
if trace_listener.first_time_handler.is_first_time:
trace_listener.first_time_handler.mark_events_collected()
trace_listener.first_time_handler.handle_execution_completion()
else:
trace_listener.batch_manager.finalize_batch()
return final_output return final_output
finally: finally:
@@ -1381,3 +1378,32 @@ class Flow(Generic[T], metaclass=FlowMeta):
) )
structure = build_flow_structure(self) structure = build_flow_structure(self)
return render_interactive(structure, filename=filename, show=show) return render_interactive(structure, filename=filename, show=show)
@staticmethod
def _show_tracing_disabled_message() -> None:
"""Show a message when tracing is disabled."""
console = Console()
if has_user_declined_tracing():
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
else:
message = """Info: Tracing is disabled.
To enable tracing, do any one of these:
• Set tracing=True in your Flow code
• Set CREWAI_TRACING_ENABLED=true in your project's .env file
• Run: crewai traces enable"""
panel = Panel(
message,
title="Tracing Status",
border_style="blue",
padding=(1, 2),
)
console.print(panel)

View File

@@ -2148,7 +2148,7 @@ def test_agent_with_knowledge_with_no_crewai_knowledge():
mock_knowledge.query.assert_called_once() mock_knowledge.query.assert_called_once()
@pytest.mark.vcr(record_mode="none", filter_headers=["authorization"]) @pytest.mark.vcr(filter_headers=["authorization"])
def test_agent_with_only_crewai_knowledge(): def test_agent_with_only_crewai_knowledge():
mock_knowledge = MagicMock(spec=Knowledge) mock_knowledge = MagicMock(spec=Knowledge)

View File

@@ -0,0 +1,125 @@
interactions:
- request:
body: '{"messages":[{"role":"system","content":"You are Test Agent. Test backstory\nYour
personal goal is: Test goal\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: Say hello\n\nThis
is the expected criteria for your final answer: hello\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-mini"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '768'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.109.1
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.109.1
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.10
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: !!binary |
H4sIAAAAAAAAA4xSTWvcMBC9+1cMOq/LrvcT30pCQ2hPPZW2wYylsa1EloQkZ7eE/e9F8nbtNCn0
YvC8eU/vzcxLBsCkYCUw3mHgvVX5Db+TN40v1p+/HZ5Ot4/16VibL18Pt7v+O7JFZJj6kXj4w/rA
TW8VBWn0CHNHGCiqrva7dbHe7TfLBPRGkIq01oZ8Y/JeapkXy2KTL/f56nBhd0Zy8qyEHxkAwEv6
Rp9a0ImVkLRSpSfvsSVWXpsAmDMqVhh6L31AHdhiArnRgXSyfg/aHIGjhlY+EyC00Tag9kdyAD/1
J6lRwcf0X0JHSpm5lKNm8Bjj6EGpGYBam4BxHCnEwwU5X20r01pnav8XlTVSS99VjtAbHS36YCxL
6DkDeEjjGV4lZtaZ3oYqmCdKz62261GPTVuZocUFDCagmtV328U7epWggFL52YAZR96RmKjTNnAQ
0syAbJb6rZv3tMfkUrf/Iz8BnJMNJCrrSEj+OvHU5ige7b/arlNOhpkn9yw5VUGSi5sQ1OCgxlNi
/pcP1FeN1C056+R4T42ttitRHzbYYM2yc/YbAAD//wMA8psF7l0DAAA=
headers:
CF-RAY:
- 99f1539c6ee7300b-SJC
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Sat, 15 Nov 2025 19:59:01 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=iJ7DXHm9JEv8bD0KtW7kldOwGHzDHimj_krrUoVmeWE-1763236741-1.0.1.1-xHKDPJseB3CipXlmYujRzoXEH1migUJ0tnSBSv5GTUQTcz5bUrq4zOGEEP0EBmf.EovzlSffbmbTILOP0JSuiNfHJaGxv2e0zdL11mrf93s;
path=/; expires=Sat, 15-Nov-25 20:29:01 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=oxDuGA6GZmxAwFshfsuJX0CY15NqcsDWeNUCWzgKh8s-1763236741049-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
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:
- '423'
openai-project:
- proj_xitITlrFeen7zjNSzML82h9x
openai-version:
- '2020-10-01'
x-envoy-upstream-service-time:
- '442'
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests:
- '30000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-project-tokens:
- '149999830'
x-ratelimit-remaining-requests:
- '29999'
x-ratelimit-remaining-tokens:
- '149999832'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests:
- 2ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_40cbf724f6154e619aa343371e48c2e0
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,125 @@
interactions:
- request:
body: '{"messages":[{"role":"system","content":"You are Test Agent. Test backstory\nYour
personal goal is: Test goal\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: Say hello\n\nThis
is the expected criteria for your final answer: hello\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-mini"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '768'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.109.1
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.109.1
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.10
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: !!binary |
H4sIAAAAAAAAAwAAAP//jFLLbtswELzrKxY8W4VtyQ/oFgRtkUvRS3tpA4EmV9K2FEmQVGwj8L8X
pFxLSVMgFwHa2RnO7O5zBsBIsgqY6HgQvVX5vfhM98Vpf1x+LT82VGzoW3n+cj7J7+ZBsUVkmMMv
FOEv64MwvVUYyOgRFg55wKi62m2LdbHdlcsE9EaiirTWhrw0eU+a8vVyXebLXb7aX9mdIYGeVfAj
AwB4Tt/oU0s8sQqSVqr06D1vkVW3JgDmjIoVxr0nH7gObDGBwuiAOll/AG2OILiGlp4QOLTRNnDt
j+gAfupPpLmCu/RfQYdKmbmUw2bwPMbRg1IzgGttAo/jSCEer8jlZluZ1jpz8K+orCFNvqsdcm90
tOiDsSyhlwzgMY1neJGYWWd6G+pgfmN6brUpRj02bWWGrq9gMIGrWX27WbyhV0sMnJSfDZgJLjqU
E3XaBh8kmRmQzVL/6+Yt7TE56fY98hMgBNqAsrYOJYmXiac2h/Fo/9d2m3IyzDy6JxJYB0IXNyGx
4YMaT4n5sw/Y1w3pFp11NN5TY+vNSh72JW/4gWWX7A8AAAD//wMA4G7eUl0DAAA=
headers:
CF-RAY:
- 99f1539888ef2db2-SJC
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Sat, 15 Nov 2025 19:59:00 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=XfT4seD2vDCBhKUjM9OKFn5pKK0guvewRLCuULoZnBg-1763236740-1.0.1.1-zPAXYvNJ5nm4SdMpIaKFFAF1Uu_TTX1J6Pz3NhGjhY8GWCM13UtG2dg_4zqAf4ag.ZiOr0jBFi64qTdzWDsB8i4GpXeY0YJ_1WGwFIh21JY;
path=/; expires=Sat, 15-Nov-25 20:29:00 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=ggMXMo_t19yDC2ZcfQNnNeE8_tibkraG0hezFWQf3Xk-1763236740469-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
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:
- '466'
openai-project:
- proj_xitITlrFeen7zjNSzML82h9x
openai-version:
- '2020-10-01'
x-envoy-upstream-service-time:
- '485'
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests:
- '30000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-project-tokens:
- '149999832'
x-ratelimit-remaining-requests:
- '29999'
x-ratelimit-remaining-tokens:
- '149999832'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests:
- 2ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_d62131d777d34f568bd37dcf3ecc3749
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,823 @@
interactions:
- request:
body: '{"trace_id": "REDACTED_TRACE_ID", "execution_type": "crew", "user_identifier":
null, "execution_context": {"crew_fingerprint": null, "crew_name": "crew", "flow_name":
null, "crewai_version": "1.4.1", "privacy_level": "standard"}, "execution_metadata":
{"expected_duration_estimate": 300, "agent_count": 0, "task_count": 0, "flow_method_count":
0, "execution_started_at": "2025-11-15T19:58:54.275699+00:00"}, "ephemeral_trace_id":
"REDACTED_EPHEMERAL_ID"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"REDACTED_UUID","ephemeral_trace_id": "REDACTED_EPHEMERAL_ID","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.4.1","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.4.1","privacy_level":"standard"},"created_at":"2025-11-15T19:58:54.413Z","updated_at":"2025-11-15T19:58:54.413Z","access_code":
"REDACTED_ACCESS_CODE","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 19:58:54 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"f189110ff0b9b1a9a6de911c8373b6cf"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.050437'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
- request:
body: '{"messages":[{"role":"system","content":"You are Test Agent. Test backstory\nYour
personal goal is: Test goal\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: Say hello\n\nThis
is the expected criteria for your final answer: hello\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-mini"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '768'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.109.1
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.109.1
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.10
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: !!binary |
H4sIAAAAAAAAAwAAAP//jFJNj9MwEL3nV4x8blDTz1VuuyuoQHBYcUKwiqb2JDE4Hst2WtCq/x05
7TZZWCQukTJv3vN7M/OUAQitRAlCthhl50x+L3d64z887I6fLW/D22b+KRZ3t18ePu7sQcwSg/ff
ScZn1hvJnTMUNdszLD1hpKRabDfLxXKzXa4GoGNFJtEaF/MV5522Ol/MF6t8vs2Lmwu7ZS0piBK+
ZgAAT8M3+bSKfooS5rPnSkchYEOivDYBCM8mVQSGoENEG8VsBCXbSHaw/h4sH0GihUYfCBCaZBvQ
hiN5gG/2nbZo4Hb4L6ElY3gq5anuA6Y4tjdmAqC1HDGNYwjxeEFOV9uGG+d5H/6gilpbHdrKEwa2
yWKI7MSAnjKAx2E8/YvEwnnuXKwi/6DhuWK9POuJcSsTdHEBI0c0k/pmPXtFr1IUUZswGbCQKFtS
I3XcBvZK8wTIJqn/dvOa9jm5ts3/yI+AlOQiqcp5Ulq+TDy2eUpH+6+265QHwyKQP2hJVdTk0yYU
1dib8ymJ8CtE6qpa24a88/p8T7Wr1oXa36ywxr3ITtlvAAAA//8DADWEgGFdAwAA
headers:
CF-RAY:
- 99f15376386adf9a-SJC
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Sat, 15 Nov 2025 19:58:55 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=9N8QMgVR0T8m_LdeyT4oWCaQR47O2ACGkH9wXpfPKl8-1763236735-1.0.1.1-8xseH3YJzZo2ypKXBqE14SRYMqgQ1HSsW4ayyXXngCD66TFqO2xnfd9OqOA3mNh8hmoRXr9SGuLn84hiEL95_w_RQXvRFQ.JQb7mFThffN4;
path=/; expires=Sat, 15-Nov-25 20:28:55 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=U_X_uM8Tk1B.1aiCr807RSOANcHTrF7LPQW1aUwSUCI-1763236735590-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
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:
- '1083'
openai-project:
- proj_xitITlrFeen7zjNSzML82h9x
openai-version:
- '2020-10-01'
x-envoy-upstream-service-time:
- '1098'
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests:
- '30000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-project-tokens:
- '149999830'
x-ratelimit-remaining-requests:
- '29999'
x-ratelimit-remaining-tokens:
- '149999832'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests:
- 2ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_51e6f28672744e42b0cf17b175e98cad
status:
code: 200
message: OK
- request:
body: '{"events": [{"event_id": "REDACTED_EVENT_ID", "timestamp":
"2025-11-15T19:58:54.274122+00:00", "type": "crew_kickoff_started", "event_data":
{"timestamp": "2025-11-15T19:58:54.274122+00:00", "type": "crew_kickoff_started",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "inputs": null}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T19:58:54.276149+00:00", "type": "task_started", "event_data":
{"task_description": "Say hello", "expected_output": "hello", "task_name": "Say
hello", "context": "", "agent_role": "Test Agent", "task_id": "REDACTED_TASK_ID"}},
{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T19:58:54.277520+00:00",
"type": "agent_execution_started", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"6ab5ba71-81ef-4aea-800a-a4e332976b23", "timestamp": "2025-11-15T19:58:54.277708+00:00",
"type": "llm_call_started", "event_data": {"timestamp": "2025-11-15T19:58:54.277708+00:00",
"type": "llm_call_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": "REDACTED_TASK_ID",
"task_name": "Say hello", "agent_id": "REDACTED_AGENT_ID",
"agent_role": "Test Agent", "from_task": null, "from_agent": null, "model":
"gpt-4o-mini", "messages": [{"role": "system", "content": "You are Test Agent.
Test backstory\nYour personal goal is: Test goal\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:
Say hello\n\nThis is the expected criteria for your final answer: hello\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:"}], "tools": null, "callbacks":
["<crewai.utilities.token_counter_callback.TokenCalcHandler object at 0x10e737920>"],
"available_functions": null}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T19:58:55.617486+00:00", "type": "llm_call_completed",
"event_data": {"timestamp": "2025-11-15T19:58:55.617486+00:00", "type": "llm_call_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": "REDACTED_TASK_ID", "task_name": "Say hello",
"agent_id": "REDACTED_AGENT_ID", "agent_role": "Test Agent",
"from_task": null, "from_agent": null, "messages": [{"role": "system", "content":
"You are Test Agent. Test backstory\nYour personal goal is: Test goal\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: Say hello\n\nThis is the expected criteria for your
final answer: hello\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:"}],
"response": "I now can give a great answer \nFinal Answer: hello", "call_type":
"<LLMCallType.LLM_CALL: ''llm_call''>", "model": "gpt-4o-mini"}}, {"event_id":
"6da05ee3-40a0-44d3-9070-58f83e91fb02", "timestamp": "2025-11-15T19:58:55.617749+00:00",
"type": "agent_execution_completed", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"323a901f-c31a-4937-aa83-99f80a195ec9", "timestamp": "2025-11-15T19:58:55.617956+00:00",
"type": "task_completed", "event_data": {"task_description": "Say hello", "task_name":
"Say hello", "task_id": "REDACTED_TASK_ID", "output_raw":
"hello", "output_format": "OutputFormat.RAW", "agent_role": "Test Agent"}},
{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T19:58:55.620199+00:00",
"type": "crew_kickoff_completed", "event_data": {"timestamp": "2025-11-15T19:58:55.620199+00:00",
"type": "crew_kickoff_completed", "source_fingerprint": null, "source_type":
null, "fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "crew_name": "crew", "crew": null, "output": {"description":
"Say hello", "name": "Say hello", "expected_output": "hello", "summary": "Say
hello...", "raw": "hello", "pydantic": null, "json_dict": null, "agent": "Test
Agent", "output_format": "raw", "messages": [{"role": "''system''", "content":
"''You are Test Agent. Test backstory\\nYour personal goal is: Test goal\\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: Say hello\\n\\nThis is the expected
criteria for your final answer: hello\\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": "''I now can
give a great answer \\nFinal Answer: hello''"}]}, "total_tokens": 165}}], "batch_metadata":
{"events_count": 8, "batch_sequence": 1, "is_final_batch": false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '6047'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_UUID/events
response:
body:
string: '{"events_created":8,"ephemeral_trace_batch_id": "REDACTED_BATCH_ID"}'
headers:
Connection:
- keep-alive
Content-Length:
- '86'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 19:58:55 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"5763c4d7ea0188702ab3c06667edacb2"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.085717'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: '{"status": "completed", "duration_ms": 1545, "final_event_count": 8}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '68'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_UUID/finalize
response:
body:
string: '{"id":"REDACTED_UUID","ephemeral_trace_id": "REDACTED_EPHEMERAL_ID","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"completed","duration_ms":1545,"crewai_version":"1.4.1","total_events":8,"execution_context":{"crew_name":"crew","flow_name":null,"privacy_level":"standard","crewai_version":"1.4.1","crew_fingerprint":null},"created_at":"2025-11-15T19:58:54.413Z","updated_at":"2025-11-15T19:58:55.963Z","access_code":
"REDACTED_ACCESS_CODE","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '517'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 19:58:55 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"87272a0b299949ee15066ac5b6c288c8"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.040548'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: !!binary |
Ct8QCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkSthAKEgoQY3Jld2FpLnRl
bGVtZXRyeRKcCAoQnBgYneZ/2zN+PxfURVYEhxIIl8jmYkveFbEqDENyZXcgQ3JlYXRlZDABOSBG
V8F3RngYQbD+XsF3RngYShkKDmNyZXdhaV92ZXJzaW9uEgcKBTEuNC4xShsKDnB5dGhvbl92ZXJz
aW9uEgkKBzMuMTIuMTBKLgoIY3Jld19rZXkSIgogZTU5ZjRhOTQ1MDMyOTJhYjg2NTVhODc4Nzlk
ZjNkMGVKMQoHY3Jld19pZBImCiRmNTFiYWY5YS0wOTliLTQ2ZjYtYTQxZS0zYjVkNTNmN2U3NzJK
OgoQY3Jld19maW5nZXJwcmludBImCiRlYTU0MGVkMC1mMmQxLTQwNDQtOGI5Zi1hNjI0MmY1NGYx
MjRKHAoMY3Jld19wcm9jZXNzEgwKCnNlcXVlbnRpYWxKEQoLY3Jld19tZW1vcnkSAhAAShoKFGNy
ZXdfbnVtYmVyX29mX3Rhc2tzEgIYAUobChVjcmV3X251bWJlcl9vZl9hZ2VudHMSAhgBSjsKG2Ny
ZXdfZmluZ2VycHJpbnRfY3JlYXRlZF9hdBIcChoyMDI1LTExLTE1VDE0OjU4OjU0LjI3MjkyMUrR
AgoLY3Jld19hZ2VudHMSwQIKvgJbeyJrZXkiOiAiMGMzZDYzYTY5MGUxM2Y1MTBkZTNjZDZkZmQz
MTgxNmIiLCAiaWQiOiAiNTQ4YzlkOWMtN2M4OS00NTcwLTg2MzUtMTU3OTc0ZDc1M2JlIiwgInJv
bGUiOiAiVGVzdCBBZ2VudCIsICJ2ZXJib3NlPyI6IGZhbHNlLCAibWF4X2l0ZXIiOiAyNSwgIm1h
eF9ycG0iOiBudWxsLCAiZnVuY3Rpb25fY2FsbGluZ19sbG0iOiAiIiwgImxsbSI6ICJncHQtNG8t
bWluaSIsICJkZWxlZ2F0aW9uX2VuYWJsZWQ/IjogZmFsc2UsICJhbGxvd19jb2RlX2V4ZWN1dGlv
bj8iOiBmYWxzZSwgIm1heF9yZXRyeV9saW1pdCI6IDIsICJ0b29sc19uYW1lcyI6IFtdfV1K/wEK
CmNyZXdfdGFza3MS8AEK7QFbeyJrZXkiOiAiMTdjYzlhYjJiMmQwYmIwY2RkMzZkNTNlMDUyYmEz
YTEiLCAiaWQiOiAiMGFjODNjNzktYmZiNS00MTc5LTk0NzAtMmI0OWIxNmUxM2I0IiwgImFzeW5j
X2V4ZWN1dGlvbj8iOiBmYWxzZSwgImh1bWFuX2lucHV0PyI6IGZhbHNlLCAiYWdlbnRfcm9sZSI6
ICJUZXN0IEFnZW50IiwgImFnZW50X2tleSI6ICIwYzNkNjNhNjkwZTEzZjUxMGRlM2NkNmRmZDMx
ODE2YiIsICJ0b29sc19uYW1lcyI6IFtdfV16AhgBhQEAAQAAEpwEChA/Ny+I8Uec4bmw/hRH3QdM
Egj4Fl8kb84nDCoMVGFzayBDcmVhdGVkMAE5yF54wXdGeBhBwAZ5wXdGeBhKLgoIY3Jld19rZXkS
IgogZTU5ZjRhOTQ1MDMyOTJhYjg2NTVhODc4NzlkZjNkMGVKMQoHY3Jld19pZBImCiRmNTFiYWY5
YS0wOTliLTQ2ZjYtYTQxZS0zYjVkNTNmN2U3NzJKOgoQY3Jld19maW5nZXJwcmludBImCiRlYTU0
MGVkMC1mMmQxLTQwNDQtOGI5Zi1hNjI0MmY1NGYxMjRKLgoIdGFza19rZXkSIgogMTdjYzlhYjJi
MmQwYmIwY2RkMzZkNTNlMDUyYmEzYTFKMQoHdGFza19pZBImCiQwYWM4M2M3OS1iZmI1LTQxNzkt
OTQ3MC0yYjQ5YjE2ZTEzYjRKOgoQdGFza19maW5nZXJwcmludBImCiQ4NTBjZTAyMS1mYmMxLTRk
MzEtYTA3Ny0xZDVmNjMzOWMyY2VKOwobdGFza19maW5nZXJwcmludF9jcmVhdGVkX2F0EhwKGjIw
MjUtMTEtMTVUMTQ6NTg6NTQuMjcyODY4SjsKEWFnZW50X2ZpbmdlcnByaW50EiYKJDUzMWExMTg3
LTZmOWEtNGNmMi1hYzMwLWUzZTczMWE4MzY5Y0oaCgphZ2VudF9yb2xlEgwKClRlc3QgQWdlbnR6
AhgBhQEAAQAAEuEDChCrg6pKIgwTTkf7+bOsNaasEgjUfxiqLjY0BCoOVGFzayBFeGVjdXRpb24w
ATlwPXnBd0Z4GEHg9nIReEZ4GEouCghjcmV3X2tleRIiCiBlNTlmNGE5NDUwMzI5MmFiODY1NWE4
Nzg3OWRmM2QwZUoxCgdjcmV3X2lkEiYKJGY1MWJhZjlhLTA5OWItNDZmNi1hNDFlLTNiNWQ1M2Y3
ZTc3Mko6ChBjcmV3X2ZpbmdlcnByaW50EiYKJGVhNTQwZWQwLWYyZDEtNDA0NC04YjlmLWE2MjQy
ZjU0ZjEyNEouCgh0YXNrX2tleRIiCiAxN2NjOWFiMmIyZDBiYjBjZGQzNmQ1M2UwNTJiYTNhMUox
Cgd0YXNrX2lkEiYKJDBhYzgzYzc5LWJmYjUtNDE3OS05NDcwLTJiNDliMTZlMTNiNEo7ChFhZ2Vu
dF9maW5nZXJwcmludBImCiQ1MzFhMTE4Ny02ZjlhLTRjZjItYWMzMC1lM2U3MzFhODM2OWNKGgoK
YWdlbnRfcm9sZRIMCgpUZXN0IEFnZW50SjoKEHRhc2tfZmluZ2VycHJpbnQSJgokODUwY2UwMjEt
ZmJjMS00ZDMxLWEwNzctMWQ1ZjYzMzljMmNlegIYAYUBAAEAAA==
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '2146'
Content-Type:
- application/x-protobuf
User-Agent:
- OTel-OTLP-Exporter-Python/1.38.0
method: POST
uri: https://telemetry.crewai.com:4319/v1/traces
response:
body:
string: "\n\0"
headers:
Content-Length:
- '2'
Content-Type:
- application/x-protobuf
Date:
- Sat, 15 Nov 2025 19:58:59 GMT
status:
code: 200
message: OK
- request:
body: '{"events": [{"event_id": "REDACTED_EVENT_ID", "timestamp":
"2025-11-15T20:12:50.759077+00:00", "type": "crew_kickoff_started", "event_data":
{"timestamp": "2025-11-15T20:12:50.759077+00:00", "type": "crew_kickoff_started",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "inputs": null}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T20:12:50.761789+00:00", "type": "task_started", "event_data":
{"task_description": "Say hello", "expected_output": "hello", "task_name": "Say
hello", "context": "", "agent_role": "Test Agent", "task_id": "REDACTED_TASK_ID"}},
{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T20:12:50.762556+00:00",
"type": "agent_execution_started", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"112efd06-87b7-4600-892f-3c96672571c6", "timestamp": "2025-11-15T20:12:50.762726+00:00",
"type": "llm_call_started", "event_data": {"timestamp": "2025-11-15T20:12:50.762726+00:00",
"type": "llm_call_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": "REDACTED_TASK_ID",
"task_name": "Say hello", "agent_id": "REDACTED_AGENT_ID",
"agent_role": "Test Agent", "from_task": null, "from_agent": null, "model":
"gpt-4o-mini", "messages": [{"role": "system", "content": "You are Test Agent.
Test backstory\nYour personal goal is: Test goal\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:
Say hello\n\nThis is the expected criteria for your final answer: hello\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:"}], "tools": null, "callbacks":
["<crewai.utilities.token_counter_callback.TokenCalcHandler object at 0x10e8b5b20>"],
"available_functions": null}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T20:12:50.877587+00:00", "type": "llm_call_completed",
"event_data": {"timestamp": "2025-11-15T20:12:50.877587+00:00", "type": "llm_call_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": "REDACTED_TASK_ID", "task_name": "Say hello",
"agent_id": "REDACTED_AGENT_ID", "agent_role": "Test Agent",
"from_task": null, "from_agent": null, "messages": [{"role": "system", "content":
"You are Test Agent. Test backstory\nYour personal goal is: Test goal\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: Say hello\n\nThis is the expected criteria for your
final answer: hello\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:"}],
"response": "I now can give a great answer \nFinal Answer: hello", "call_type":
"<LLMCallType.LLM_CALL: ''llm_call''>", "model": "gpt-4o-mini"}}, {"event_id":
"430a26b3-c38b-4f75-8656-412124a6df95", "timestamp": "2025-11-15T20:12:50.877724+00:00",
"type": "agent_execution_completed", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"a76bbe00-1cc7-44a8-9ec3-c4ed8fca948d", "timestamp": "2025-11-15T20:12:50.877830+00:00",
"type": "task_completed", "event_data": {"task_description": "Say hello", "task_name":
"Say hello", "task_id": "REDACTED_TASK_ID", "output_raw":
"hello", "output_format": "OutputFormat.RAW", "agent_role": "Test Agent"}},
{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T20:12:50.879327+00:00",
"type": "crew_kickoff_completed", "event_data": {"timestamp": "2025-11-15T20:12:50.879327+00:00",
"type": "crew_kickoff_completed", "source_fingerprint": null, "source_type":
null, "fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "crew_name": "crew", "crew": null, "output": {"description":
"Say hello", "name": "Say hello", "expected_output": "hello", "summary": "Say
hello...", "raw": "hello", "pydantic": null, "json_dict": null, "agent": "Test
Agent", "output_format": "raw", "messages": [{"role": "''system''", "content":
"''You are Test Agent. Test backstory\\nYour personal goal is: Test goal\\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: Say hello\\n\\nThis is the expected
criteria for your final answer: hello\\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": "''I now can
give a great answer \\nFinal Answer: hello''"}]}, "total_tokens": 165}}], "batch_metadata":
{"events_count": 8, "batch_sequence": 1, "is_final_batch": false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '6047'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_EPHEMERAL_ID/events
response:
body:
string: '{"error":"Couldn''t find EphemeralTraceBatch with [WHERE \"ephemeral_trace_batches\".\"ephemeral_trace_id\"
= $1]","message":"Trace batch not found"}'
headers:
Connection:
- keep-alive
Content-Length:
- '148'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:12:51 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 869cd156-577e-4f89-a822-0cd097bfb011
x-runtime:
- '0.038867'
x-xss-protection:
- 1; mode=block
status:
code: 404
message: Not Found
- request:
body: '{"status": "failed", "failure_reason": "Error sending events to backend"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '73'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version:
- 1.4.1
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/batches/REDACTED_EPHEMERAL_ID
response:
body:
string: '{"error":"bad_credentials","message":"Bad credentials"}'
headers:
Connection:
- keep-alive
Content-Length:
- '55'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:12:51 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 1d74da02-f5f2-4bdc-8c9e-51bc9d3aff98
x-runtime:
- '0.046789'
x-xss-protection:
- 1; mode=block
status:
code: 401
message: Unauthorized
version: 1

View File

@@ -0,0 +1,817 @@
interactions:
- request:
body: '{"trace_id": "REDACTED_TRACE_ID", "execution_type": "crew", "user_identifier":
null, "execution_context": {"crew_fingerprint": null, "crew_name": "crew", "flow_name":
null, "crewai_version": "1.4.1", "privacy_level": "standard"}, "execution_metadata":
{"expected_duration_estimate": 300, "agent_count": 0, "task_count": 0, "flow_method_count":
0, "execution_started_at": "2025-11-15T20:00:40.213233+00:00"}, "ephemeral_trace_id":
"REDACTED_EPHEMERAL_ID"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"REDACTED_UUID","ephemeral_trace_id": "REDACTED_EPHEMERAL_ID","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.4.1","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.4.1","privacy_level":"standard"},"created_at":"2025-11-15T20:00:40.347Z","updated_at":"2025-11-15T20:00:40.347Z","access_code":
"REDACTED_ACCESS_CODE","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:00:40 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"1dad6ea33b1bd62ea816884d05ca0842"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.046518'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
- request:
body: '{"messages":[{"role":"system","content":"You are Test Agent. Test backstory\nYour
personal goal is: Test goal\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: Say hello\n\nThis
is the expected criteria for your final answer: hello\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-mini"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '768'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.109.1
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.109.1
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.10
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: !!binary |
H4sIAAAAAAAAAwAAAP//jFLLbtswELzrKxY8W4XlV1zfggBtekt76yMQVtRKoktxCZJKWgT+94KU
YyltCuQiQDs7w5ndfcoAhKrFAYTsMMje6vxGfjzykXdfzZe7z7eh54Jub77dvZf9vqjEIjK4OpIM
z6x3knurKSg2IywdYaCoWlzt1qv1br9ZJqDnmnSktTbkG857ZVS+Wq42+fIqL/ZndsdKkhcH+J4B
ADylb/RpavolDpC0UqUn77Elcbg0AQjHOlYEeq98QBPEYgIlm0AmWf8Ehh9BooFWPRAgtNE2oPGP
5AB+mA/KoIbr9H+AjrTmuZSjZvAY45hB6xmAxnDAOI4U4v6MnC62NbfWceX/oopGGeW70hF6NtGi
D2xFQk8ZwH0az/AisbCOexvKwD8pPVds16OemLYyQ1dnMHBAPavvtotX9MqaAirtZwMWEmVH9USd
toFDrXgGZLPU/7p5TXtMrkz7FvkJkJJsoLq0jmolXyae2hzFo/1f22XKybDw5B6UpDIocnETNTU4
6PGUhP/tA/Vlo0xLzjo13lNjy21RV/sNNliJ7JT9AQAA//8DANqYTe5dAwAA
headers:
CF-RAY:
- 99f1560c3f5d4809-SJC
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Sat, 15 Nov 2025 20:00:41 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=h.tA2Rq1WhYqakfMp30WNbqx91S5jvXxlyjIW8bMhHY-1763236841-1.0.1.1-V.a.LzWhmsyvoXIFirG2pejIlbZ7BiLfwdlv6dDF.QddisjnkoYsgBPhVnxl.GwDFVDKymer1bQK_6vSoHBaQIcV4MJ7YayMl9lLs0.UcFM;
path=/; expires=Sat, 15-Nov-25 20:30:41 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=8Td_UnVGEcigZt.Nhy9rEFpaW9pgP0QJpdzFdEoktJk-1763236841097-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
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:
- '563'
openai-project:
- proj_xitITlrFeen7zjNSzML82h9x
openai-version:
- '2020-10-01'
x-envoy-upstream-service-time:
- '666'
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests:
- '30000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-project-tokens:
- '149999832'
x-ratelimit-remaining-requests:
- '29999'
x-ratelimit-remaining-tokens:
- '149999832'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests:
- 2ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_8e8e5bfc663840d68daf4ac70308eece
status:
code: 200
message: OK
- request:
body: '{"events": [{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T20:00:40.210936+00:00",
"type": "crew_kickoff_started", "event_data": {"timestamp": "2025-11-15T20:00:40.210936+00:00",
"type": "crew_kickoff_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "crew_name": "crew", "crew": null, "inputs": null}},
{"event_id": "REDACTED_EVENT_ID", "timestamp": "2025-11-15T20:00:40.213519+00:00",
"type": "agent_execution_started", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"REDACTED_EVENT_ID", "timestamp": "2025-11-15T20:00:40.213671+00:00", "type":
"llm_call_started", "event_data": {"timestamp": "2025-11-15T20:00:40.213671+00:00",
"type": "llm_call_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": "REDACTED_TASK_ID", "task_name": "Say
hello", "agent_id": "REDACTED_AGENT_ID", "agent_role": "Test Agent", "from_task":
null, "from_agent": null, "model": "gpt-4o-mini", "messages": [{"role": "system",
"content": "You are Test Agent. Test backstory\nYour personal goal is: Test
goal\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: Say hello\n\nThis is the expected criteria
for your final answer: hello\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:"}],
"tools": null, "callbacks": ["<crewai.utilities.token_counter_callback.TokenCalcHandler
object at 0x108cbb5f0>"], "available_functions": null}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T20:00:41.117164+00:00", "type": "llm_call_completed",
"event_data": {"timestamp": "2025-11-15T20:00:41.117164+00:00", "type": "llm_call_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": "REDACTED_TASK_ID", "task_name": "Say hello", "agent_id": "REDACTED_AGENT_ID",
"agent_role": "Test Agent", "from_task": null, "from_agent": null, "messages":
[{"role": "system", "content": "You are Test Agent. Test backstory\nYour personal
goal is: Test goal\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: Say hello\n\nThis is the
expected criteria for your final answer: hello\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:"}], "response": "I now can give a great answer \nFinal Answer:
hello", "call_type": "<LLMCallType.LLM_CALL: ''llm_call''>", "model": "gpt-4o-mini"}},
{"event_id": "1d32853b-04dd-49f1-9b0b-fca92a82ea0f", "timestamp": "2025-11-15T20:00:41.117412+00:00",
"type": "agent_execution_completed", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"3af2dbb3-6117-4df1-9dc8-3b4cbc1bb689", "timestamp": "2025-11-15T20:00:41.117869+00:00",
"type": "task_completed", "event_data": {"task_description": "Say hello", "task_name":
"Say hello", "task_id": "REDACTED_TASK_ID", "output_raw": "hello", "output_format":
"OutputFormat.RAW", "agent_role": "Test Agent"}}, {"event_id": "REDACTED_EVENT_ID",
"timestamp": "2025-11-15T20:00:41.119050+00:00", "type": "crew_kickoff_completed",
"event_data": {"timestamp": "2025-11-15T20:00:41.119050+00:00", "type": "crew_kickoff_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "output": {"description": "Say hello", "name": "Say hello",
"expected_output": "hello", "summary": "Say hello...", "raw": "hello", "pydantic":
null, "json_dict": null, "agent": "Test Agent", "output_format": "raw", "messages":
[{"role": "''system''", "content": "''You are Test Agent. Test backstory\\nYour
personal goal is: Test goal\\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:
Say hello\\n\\nThis is the expected criteria for your final answer: hello\\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": "''I now can give a great answer \\nFinal Answer: hello''"}]}, "total_tokens":
165}}], "batch_metadata": {"events_count": 7, "batch_sequence": 1, "is_final_batch":
false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '5723'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_UUID/events
response:
body:
string: '{"events_created":7,"ephemeral_trace_batch_id": "REDACTED_BATCH_ID"}'
headers:
Connection:
- keep-alive
Content-Length:
- '86'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:00:41 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"e539cd458f6386627ec23f6f6a46a996"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.062954'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: '{"status": "completed", "duration_ms": 1070, "final_event_count": 7}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '68'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- REDACTED_ORG_UUID
X-Crewai-Version:
- 1.4.1
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_UUID/finalize
response:
body:
string: '{"id":"REDACTED_UUID","ephemeral_trace_id": "REDACTED_EPHEMERAL_ID","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"completed","duration_ms":1070,"crewai_version":"1.4.1","total_events":7,"execution_context":{"crew_name":"crew","flow_name":null,"privacy_level":"standard","crewai_version":"1.4.1","crew_fingerprint":null},"created_at":"2025-11-15T20:00:40.347Z","updated_at":"2025-11-15T20:00:41.423Z","access_code":
"REDACTED_ACCESS_CODE","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '517'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:00:41 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"de9bcb107d0382f1b309276d8fc39196"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- REDACTED_ORG_UUID
x-runtime:
- '0.045900'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: !!binary |
Ct8QCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkSthAKEgoQY3Jld2FpLnRl
bGVtZXRyeRKcCAoQvXQY4SQ+2Mlfdsll/QHJghII0Bd15ezW7r4qDENyZXcgQ3JlYXRlZDABOShe
q2uQRngYQZDhtWuQRngYShkKDmNyZXdhaV92ZXJzaW9uEgcKBTEuNC4xShsKDnB5dGhvbl92ZXJz
aW9uEgkKBzMuMTIuMTBKLgoIY3Jld19rZXkSIgogZTU5ZjRhOTQ1MDMyOTJhYjg2NTVhODc4Nzlk
ZjNkMGVKMQoHY3Jld19pZBImCiQ2NWVkNDMyNS02NTE4LTRiMzUtOGQ3OS02NzA2ZDc5OTY0YWVK
OgoQY3Jld19maW5nZXJwcmludBImCiQ1MmM5ODNiOC02OTcwLTQ2ZmMtYmQ1YS0wY2MwNzY1M2Rk
NDhKHAoMY3Jld19wcm9jZXNzEgwKCnNlcXVlbnRpYWxKEQoLY3Jld19tZW1vcnkSAhAAShoKFGNy
ZXdfbnVtYmVyX29mX3Rhc2tzEgIYAUobChVjcmV3X251bWJlcl9vZl9hZ2VudHMSAhgBSjsKG2Ny
ZXdfZmluZ2VycHJpbnRfY3JlYXRlZF9hdBIcChoyMDI1LTExLTE1VDE1OjAwOjQwLjIwOTg4NUrR
AgoLY3Jld19hZ2VudHMSwQIKvgJbeyJrZXkiOiAiMGMzZDYzYTY5MGUxM2Y1MTBkZTNjZDZkZmQz
MTgxNmIiLCAiaWQiOiAiYjE3OTNkNmYtN2Q4My00Y2YzLWE1NzQtNDE4ZGJkZWNmNzJmIiwgInJv
bGUiOiAiVGVzdCBBZ2VudCIsICJ2ZXJib3NlPyI6IGZhbHNlLCAibWF4X2l0ZXIiOiAyNSwgIm1h
eF9ycG0iOiBudWxsLCAiZnVuY3Rpb25fY2FsbGluZ19sbG0iOiAiIiwgImxsbSI6ICJncHQtNG8t
bWluaSIsICJkZWxlZ2F0aW9uX2VuYWJsZWQ/IjogZmFsc2UsICJhbGxvd19jb2RlX2V4ZWN1dGlv
bj8iOiBmYWxzZSwgIm1heF9yZXRyeV9saW1pdCI6IDIsICJ0b29sc19uYW1lcyI6IFtdfV1K/wEK
CmNyZXdfdGFza3MS8AEK7QFbeyJrZXkiOiAiMTdjYzlhYjJiMmQwYmIwY2RkMzZkNTNlMDUyYmEz
YTEiLCAiaWQiOiAiOTUyY2ZmYzItNjVjNi00ZGMzLTk0MjItMjJiNjk0ZWJjNDU0IiwgImFzeW5j
X2V4ZWN1dGlvbj8iOiBmYWxzZSwgImh1bWFuX2lucHV0PyI6IGZhbHNlLCAiYWdlbnRfcm9sZSI6
ICJUZXN0IEFnZW50IiwgImFnZW50X2tleSI6ICIwYzNkNjNhNjkwZTEzZjUxMGRlM2NkNmRmZDMx
ODE2YiIsICJ0b29sc19uYW1lcyI6IFtdfV16AhgBhQEAAQAAEpwEChCNBcmqTbiktztgYNe6R2lF
EgiTrCx+R/HhAioMVGFzayBDcmVhdGVkMAE5uMi/a5BGeBhB+GTAa5BGeBhKLgoIY3Jld19rZXkS
IgogZTU5ZjRhOTQ1MDMyOTJhYjg2NTVhODc4NzlkZjNkMGVKMQoHY3Jld19pZBImCiQ2NWVkNDMy
NS02NTE4LTRiMzUtOGQ3OS02NzA2ZDc5OTY0YWVKOgoQY3Jld19maW5nZXJwcmludBImCiQ1MmM5
ODNiOC02OTcwLTQ2ZmMtYmQ1YS0wY2MwNzY1M2RkNDhKLgoIdGFza19rZXkSIgogMTdjYzlhYjJi
MmQwYmIwY2RkMzZkNTNlMDUyYmEzYTFKMQoHdGFza19pZBImCiQ5NTJjZmZjMi02NWM2LTRkYzMt
OTQyMi0yMmI2OTRlYmM0NTRKOgoQdGFza19maW5nZXJwcmludBImCiQyMTM3NzZkZC04MDMwLTQ1
ODYtYmI1MC02NjNiYjI0NjAwNWJKOwobdGFza19maW5nZXJwcmludF9jcmVhdGVkX2F0EhwKGjIw
MjUtMTEtMTVUMTU6MDA6NDAuMjA5ODQwSjsKEWFnZW50X2ZpbmdlcnByaW50EiYKJDVmMmJlOWQw
LTZiMjQtNDFiYy05YzQyLTI0ZjdlOTM3MjJjYkoaCgphZ2VudF9yb2xlEgwKClRlc3QgQWdlbnR6
AhgBhQEAAQAAEuEDChBC+bce4EVDxB/d79LFgX4NEghWvN23SKW/0SoOVGFzayBFeGVjdXRpb24w
ATnYk8BrkEZ4GEHI1LihkEZ4GEouCghjcmV3X2tleRIiCiBlNTlmNGE5NDUwMzI5MmFiODY1NWE4
Nzg3OWRmM2QwZUoxCgdjcmV3X2lkEiYKJDY1ZWQ0MzI1LTY1MTgtNGIzNS04ZDc5LTY3MDZkNzk5
NjRhZUo6ChBjcmV3X2ZpbmdlcnByaW50EiYKJDUyYzk4M2I4LTY5NzAtNDZmYy1iZDVhLTBjYzA3
NjUzZGQ0OEouCgh0YXNrX2tleRIiCiAxN2NjOWFiMmIyZDBiYjBjZGQzNmQ1M2UwNTJiYTNhMUox
Cgd0YXNrX2lkEiYKJDk1MmNmZmMyLTY1YzYtNGRjMy05NDIyLTIyYjY5NGViYzQ1NEo7ChFhZ2Vu
dF9maW5nZXJwcmludBImCiQ1ZjJiZTlkMC02YjI0LTQxYmMtOWM0Mi0yNGY3ZTkzNzIyY2JKGgoK
YWdlbnRfcm9sZRIMCgpUZXN0IEFnZW50SjoKEHRhc2tfZmluZ2VycHJpbnQSJgokMjEzNzc2ZGQt
ODAzMC00NTg2LWJiNTAtNjYzYmIyNDYwMDViegIYAYUBAAEAAA==
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '2146'
Content-Type:
- application/x-protobuf
User-Agent:
- OTel-OTLP-Exporter-Python/1.38.0
method: POST
uri: https://telemetry.crewai.com:4319/v1/traces
response:
body:
string: "\n\0"
headers:
Content-Length:
- '2'
Content-Type:
- application/x-protobuf
Date:
- Sat, 15 Nov 2025 20:00:44 GMT
status:
code: 200
message: OK
- request:
body: '{"events": [{"event_id": "6a66ce15-fdb3-490b-a09b-7724817d0116", "timestamp":
"2025-11-15T20:15:51.057965+00:00", "type": "crew_kickoff_started", "event_data":
{"timestamp": "2025-11-15T20:15:51.057965+00:00", "type": "crew_kickoff_started",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "inputs": null}}, {"event_id": "15f2b75b-c7bb-48d1-8f61-faec2736da5d",
"timestamp": "2025-11-15T20:15:51.059954+00:00", "type": "task_started", "event_data":
{"task_description": "Say hello", "expected_output": "hello", "task_name": "Say
hello", "context": "", "agent_role": "Test Agent", "task_id": "bbb08fd7-2580-43a8-bc71-5e0c08c7cc61"}},
{"event_id": "eb90a87c-523c-40d6-b996-01706cbf8844", "timestamp": "2025-11-15T20:15:51.061205+00:00",
"type": "agent_execution_started", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"862c2b07-d82a-4f02-9c99-519292679a87", "timestamp": "2025-11-15T20:15:51.061443+00:00",
"type": "llm_call_started", "event_data": {"timestamp": "2025-11-15T20:15:51.061443+00:00",
"type": "llm_call_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": "bbb08fd7-2580-43a8-bc71-5e0c08c7cc61",
"task_name": "Say hello", "agent_id": "82ee52ae-9eba-4648-877b-8cf2fc1624ae",
"agent_role": "Test Agent", "from_task": null, "from_agent": null, "model":
"gpt-4o-mini", "messages": [{"role": "system", "content": "You are Test Agent.
Test backstory\nYour personal goal is: Test goal\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:
Say hello\n\nThis is the expected criteria for your final answer: hello\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:"}], "tools": null, "callbacks":
["<crewai.utilities.token_counter_callback.TokenCalcHandler object at 0x10d617f50>"],
"available_functions": null}}, {"event_id": "fff5720d-9167-48cf-9196-9ee96f765688",
"timestamp": "2025-11-15T20:15:51.175710+00:00", "type": "llm_call_completed",
"event_data": {"timestamp": "2025-11-15T20:15:51.175710+00:00", "type": "llm_call_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": "bbb08fd7-2580-43a8-bc71-5e0c08c7cc61", "task_name": "Say hello",
"agent_id": "82ee52ae-9eba-4648-877b-8cf2fc1624ae", "agent_role": "Test Agent",
"from_task": null, "from_agent": null, "messages": [{"role": "system", "content":
"You are Test Agent. Test backstory\nYour personal goal is: Test goal\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: Say hello\n\nThis is the expected criteria for your
final answer: hello\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:"}],
"response": "I now can give a great answer \nFinal Answer: hello", "call_type":
"<LLMCallType.LLM_CALL: ''llm_call''>", "model": "gpt-4o-mini"}}, {"event_id":
"1ce38e05-20f8-4f6b-b303-720dbcbb73b2", "timestamp": "2025-11-15T20:15:51.175899+00:00",
"type": "agent_execution_completed", "event_data": {"agent_role": "Test Agent",
"agent_goal": "Test goal", "agent_backstory": "Test backstory"}}, {"event_id":
"dca0b4dd-dcfe-4002-9251-56cde6855f33", "timestamp": "2025-11-15T20:15:51.176016+00:00",
"type": "task_completed", "event_data": {"task_description": "Say hello", "task_name":
"Say hello", "task_id": "bbb08fd7-2580-43a8-bc71-5e0c08c7cc61", "output_raw":
"hello", "output_format": "OutputFormat.RAW", "agent_role": "Test Agent"}},
{"event_id": "7e3993e7-e729-43a9-af63-b1429d0d2abc", "timestamp": "2025-11-15T20:15:51.177161+00:00",
"type": "crew_kickoff_completed", "event_data": {"timestamp": "2025-11-15T20:15:51.177161+00:00",
"type": "crew_kickoff_completed", "source_fingerprint": null, "source_type":
null, "fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "crew_name": "crew", "crew": null, "output": {"description":
"Say hello", "name": "Say hello", "expected_output": "hello", "summary": "Say
hello...", "raw": "hello", "pydantic": null, "json_dict": null, "agent": "Test
Agent", "output_format": "raw", "messages": [{"role": "''system''", "content":
"''You are Test Agent. Test backstory\\nYour personal goal is: Test goal\\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: Say hello\\n\\nThis is the expected
criteria for your final answer: hello\\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": "''I now can
give a great answer \\nFinal Answer: hello''"}]}, "total_tokens": 165}}], "batch_metadata":
{"events_count": 8, "batch_sequence": 1, "is_final_batch": false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '6047'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/REDACTED_EPHEMERAL_ID/events
response:
body:
string: '{"error":"Couldn''t find EphemeralTraceBatch with [WHERE \"ephemeral_trace_batches\".\"ephemeral_trace_id\"
= $1]","message":"Trace batch not found"}'
headers:
Connection:
- keep-alive
Content-Length:
- '148'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:15:51 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 255abbea-b49c-4dcc-ade5-3e16fd59277d
x-runtime:
- '0.050642'
x-xss-protection:
- 1; mode=block
status:
code: 404
message: Not Found
- request:
body: '{"status": "failed", "failure_reason": "Error sending events to backend"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '73'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version:
- 1.4.1
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/batches/REDACTED_EPHEMERAL_ID
response:
body:
string: '{"error":"bad_credentials","message":"Bad credentials"}'
headers:
Connection:
- keep-alive
Content-Length:
- '55'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 20:15:51 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 7bbda7a6-5a8e-4dfc-bcef-fe9b8bff7532
x-runtime:
- '0.042800'
x-xss-protection:
- 1; mode=block
status:
code: 401
message: Unauthorized
version: 1

View File

@@ -1,30 +1,30 @@
interactions: interactions:
- request: - request:
body: '{"messages": [{"role": "system", "content": "You are Test Agent. Test backstory\nYour body: '{"messages":[{"role":"system","content":"You are Test Agent. Test backstory\nYour
personal goal is: Test goal\nTo give my best complete final answer to the task personal goal is: Test goal\nTo give my best complete final answer to the task
respond using the exact following format:\n\nThought: I now can give a great 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 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 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 depends on it!"},{"role":"user","content":"\nCurrent Task: Test task\n\nThis
is the expected criteria for your final answer: test output\nyou MUST return is the expected criteria for your final answer: test output\nyou MUST return
the actual complete content as the final answer, not a summary.\n\nBegin! This 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, 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-mini", "stop": ["\nObservation:"]}' your job depends on it!\n\nThought:"}],"model":"gpt-4o-mini"}'
headers: headers:
accept: accept:
- application/json - application/json
accept-encoding: accept-encoding:
- gzip, deflate, zstd - gzip, deflate
connection: connection:
- keep-alive - keep-alive
content-length: content-length:
- '812' - '774'
content-type: content-type:
- application/json - application/json
host: host:
- api.openai.com - api.openai.com
user-agent: user-agent:
- OpenAI/Python 1.93.0 - OpenAI/Python 1.109.1
x-stainless-arch: x-stainless-arch:
- arm64 - arm64
x-stainless-async: x-stainless-async:
@@ -34,33 +34,37 @@ interactions:
x-stainless-os: x-stainless-os:
- MacOS - MacOS
x-stainless-package-version: x-stainless-package-version:
- 1.93.0 - 1.109.1
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout: x-stainless-read-timeout:
- '600.0' - '600'
x-stainless-retry-count: x-stainless-retry-count:
- '0' - '0'
x-stainless-runtime: x-stainless-runtime:
- CPython - CPython
x-stainless-runtime-version: x-stainless-runtime-version:
- 3.12.9 - 3.12.10
method: POST method: POST
uri: https://api.openai.com/v1/chat/completions uri: https://api.openai.com/v1/chat/completions
response: response:
body: body:
string: !!binary | string: !!binary |
H4sIAAAAAAAAAwAAAP//jFLLbtswELzrKxY8W4WV+JHoVgR95NJD4UvaBgJDrSS2FJclV3bSwP9e H4sIAAAAAAAAAwAAAP//jFTBjhs3DL37K4i59DI2bHe9m/rWBCmQFkWLdlEgbQODK3FmlNWQU5Hj
kHYsuU2BXghwZ2c4s8vnDEDoWpQgVCdZ9c7kNx+4v7vb7jafnrrPX25/vtObX48f1Q31m+uFmEUG 2A323wNpvGtvs4deBiM9PurxUdTnGUAVfLWFynVorh/i/I376X3bxHd//LJa/eZXt4F/bOjPn39d
PXxHxS+sN4p6Z5A12QOsPErGqFqsl1fF4nJdzBPQU40m0lrH+YLyXludX8wvFvl8nRdXR3ZHWmEQ /v72zb9VnRly95GcPbIWTvohkgXhCXaJ0ChnXd1cf7verDbr6wL04ilmWjvY/ErmfeAwXy/XV/Pl
JXzNAACe0xl92hofRQlJK1V6DEG2KMpTE4DwZGJFyBB0YGlZzEZQkWW0yfotWNqBkhZavUWQ0Ebb zXz16sTuJDjSagt/zQAAPpdv1smeDtUWlvXjTk+q2FK1fQoCqJLEvFOhalBDtqo+g07YiIv0d8Dy
IG3YoQf4Zt9rKw28TfcSNhgYaGA3nAl6bIYgYyg7GDMBpLXEMg4lRbk/IvuTeUOt8/QQ/qCKRlsd CRwytGFPgNBm2YCsnygB/M0/BMYI35f1Fm47AjoM5Iw8uBSMUkBoJIF1BE2JPXGDggkMSfbBE2R3
usqjDGSj0cDkREL3GcB9GtJwlls4T73jiukHpueK5eKgJ8bdTNDLI8jE0kzqq/XsFb2qRpbahMmY EnXEmo8J3EjqMZsFwoWrY7ETEsVsW+bmbSM1MNT7Bdx2QSGwi6On/DP3NFgHyBiPGrTOVNojG9AB
hZKqw3qkjjuRQ61pAmST1H+7eU37kFzb9n/kR0ApdIx15TzWWp0nHts8xq/7r7bTlJNhEdBvtcKK cy+0BiaX3UlH8GhYA7IHFwlTriIiFwkK1qGBQ6P0eG6x6GAgzSRBRhtGWxQDMPSn6oh1TDTRaU/p
Nfq4iRobOZjD/kV4Cox91WjbondeH35V46rlai6bFS6X1yLbZ78BAAD//wMAZdfoWWMDAAA= CKjZnELL6lHvc6iTPaVcVCdJxraLx6xWx2iBWwiTA72oATUNOSutYH/2qayLrYOohrtIC3h9hEbc
qDnFZKJOPgsTm9Zft0Q7GaMHFgPheISeyCbzB3KhCZc9vRsNMKoAHRyRP3V98qsGT72wWsJSgIuY
gh1rGBK5oEH45PQ0EsSkJ4/R+0SqpE/2fKOQ6J8xJOqz6ucXJR4Xl/c2UTMq5tnhMcYLAJnlpC1P
zIcT8vA0I1HaIcmd/odaNYGDdrtEqMJ5HtRkqAr6MAP4UGZxfDZe1ZCkH2xnck/luNXmaspXnZ+A
C3T16oSaGMYzsL5Z1y8k3HkyDFEvxrly6DryZ+p59nH0QS6A2UXZX8t5KfdUeuD2/6Q/A87RYOR3
QyIf3POSz2GJPpan4uWwJ5uL4Eop7YOjnQVKuRWeGhzj9HBVelSjftcEbikNKUyvVzPsNtdLbK5p
s/mumj3MvgAAAP//AwAmD0HmywUAAA==
headers: headers:
CF-RAY: CF-RAY:
- 980b9e0c5fa516a0-SJC - 99f2bc8f6f4dfab6-SJC
Connection: Connection:
- keep-alive - keep-alive
Content-Encoding: Content-Encoding:
@@ -68,14 +72,14 @@ interactions:
Content-Type: Content-Type:
- application/json - application/json
Date: Date:
- Wed, 17 Sep 2025 21:15:11 GMT - Sun, 16 Nov 2025 00:05:27 GMT
Server: Server:
- cloudflare - cloudflare
Set-Cookie: Set-Cookie:
- __cf_bm=w6UZxbAZgYg9EFkKPfrSbMK97MB4jfs7YyvcEmgkvak-1758143711-1.0.1.1-j7YC1nvoMKxYK0T.5G2XDF6TXUCPu_HUs4YO9v65r3NHQFIcOaHbQXX4vqabSgynL2tZy23pbZgD8Cdmxhdw9dp4zkAXhU.imP43_pw4dSE; - __cf_bm=REDACTED;
path=/; expires=Wed, 17-Sep-25 21:45:11 GMT; domain=.api.openai.com; HttpOnly; path=/; expires=Sun, 16-Nov-25 00:35:27 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None Secure; SameSite=None
- _cfuvid=ij9Q8tB7sj2GczANlJ7gbXVjj6hMhz1iVb6oGHuRYu8-1758143711202-0.0.1.1-604800000; - _cfuvid=REDACTED;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security: Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload - max-age=31536000; includeSubDomains; preload
@@ -90,15 +94,15 @@ interactions:
cf-cache-status: cf-cache-status:
- DYNAMIC - DYNAMIC
openai-organization: openai-organization:
- crewai-iuxna1 - test-org
openai-processing-ms: openai-processing-ms:
- '462' - '1493'
openai-project: openai-project:
- proj_xitITlrFeen7zjNSzML82h9x - proj_test123
openai-version: openai-version:
- '2020-10-01' - '2020-10-01'
x-envoy-upstream-service-time: x-envoy-upstream-service-time:
- '665' - '1733'
x-openai-proxy-wasm: x-openai-proxy-wasm:
- v0.1 - v0.1
x-ratelimit-limit-project-tokens: x-ratelimit-limit-project-tokens:
@@ -108,11 +112,11 @@ interactions:
x-ratelimit-limit-tokens: x-ratelimit-limit-tokens:
- '150000000' - '150000000'
x-ratelimit-remaining-project-tokens: x-ratelimit-remaining-project-tokens:
- '149999830' - '149999832'
x-ratelimit-remaining-requests: x-ratelimit-remaining-requests:
- '29999' - '29999'
x-ratelimit-remaining-tokens: x-ratelimit-remaining-tokens:
- '149999830' - '149999832'
x-ratelimit-reset-project-tokens: x-ratelimit-reset-project-tokens:
- 0s - 0s
x-ratelimit-reset-requests: x-ratelimit-reset-requests:
@@ -120,7 +124,7 @@ interactions:
x-ratelimit-reset-tokens: x-ratelimit-reset-tokens:
- 0s - 0s
x-request-id: x-request-id:
- req_04536db97c8c4768a200e38c1368c176 - req_test123
status: status:
code: 200 code: 200
message: OK message: OK

View File

@@ -1,103 +1,4 @@
interactions: interactions:
- request:
body: '{"trace_id": "9d9d9d14-e5bc-44bc-8cfc-3df9ba4e6055", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.3.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-11-06T15:58:15.778396+00:00"},
"ephemeral_trace_id": "9d9d9d14-e5bc-44bc-8cfc-3df9ba4e6055"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.3.0
X-Crewai-Version:
- 1.3.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"f303021e-f1a0-4fd8-9c7d-8ba6779f8ad3","ephemeral_trace_id":"9d9d9d14-e5bc-44bc-8cfc-3df9ba4e6055","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.3.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.3.0","privacy_level":"standard"},"created_at":"2025-11-06T15:58:16.189Z","updated_at":"2025-11-06T15:58:16.189Z","access_code":"TRACE-c2990cd4d4","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Thu, 06 Nov 2025 15:58:16 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"8df0b730688b8bc094b74c66a6293578"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 38352441-7508-4e1e-9bff-77d1689dffdf
x-runtime:
- '0.085540'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
- request: - request:
body: '{"messages":[{"role":"system","content":"Your goal is to rewrite the user body: '{"messages":[{"role":"system","content":"Your goal is to rewrite the user
query so that it is optimized for retrieval from a vector database. Consider query so that it is optimized for retrieval from a vector database. Consider
@@ -115,7 +16,7 @@ interactions:
accept: accept:
- application/json - application/json
accept-encoding: accept-encoding:
- gzip, deflate, zstd - gzip, deflate
connection: connection:
- keep-alive - keep-alive
content-length: content-length:
@@ -143,23 +44,23 @@ interactions:
x-stainless-runtime: x-stainless-runtime:
- CPython - CPython
x-stainless-runtime-version: x-stainless-runtime-version:
- 3.12.9 - 3.12.10
method: POST method: POST
uri: https://api.openai.com/v1/chat/completions uri: https://api.openai.com/v1/chat/completions
response: response:
body: body:
string: !!binary | string: !!binary |
H4sIAAAAAAAAAwAAAP//jFJBbtswELzrFQQvvViBLMuy42sObYEWKIoiQFMEAkOu5G0oLkGu0xaB H4sIAAAAAAAAAwAAAP//jFLBTtwwFLznKyxfetmg3YXspnutCmpVIS70UqHI2C/JK46fZb+sQGj/
/15QciwlTYFceODsDGeG+5gJIdHInZB6r1j33uZX33+1H78y9tvVt+Lmpv68KrfXX96Xnz7cu61c HTlZNqGA1IsPnjfjmfF7zoSQaOROSN0q1p23+Te9rh8vr67tj+99Wdw8NDc/Xdy32KvbX71cJAbd
JAbd/QTNT6wLTb23wEhuhHUAxZBUl5u6rKqqvqwHoCcDNtE6z3lFeY8O87Ioq7zY5MuTuN4Taohy /wXNr6wzTZ23wEhuhHUAxZBUV9vN+apcb8tiADoyYBOt8ZxfUN6hw3y9XF/ky22+Ko/sllBDlDvx
J35kQgjxOJzJpzPwW+5EsXi66SFG1YHcnYeEkIFsupEqRoysHMvFBGpyDG6wfo0G+V0UrXqggAxC JxNCiOfhTD6dgUe5E8vF600HMaoG5O40JIQMZNONVDFiZOVYLiZQk2Nwg/XfaJC/RFGrPQVkEJos
k6VwMZ8O0B6iSo7dwdoZoJwjVinx4PP2hBzPzix1PtBdfEGVLTqM+yaAiuSSi8jk5YAeMyFuhwYO hbP5dIC6jyo5dr21M0A5R6xS4sHn3RE5nJxZanyg+/gPVdboMLZVABXJJReRycsBPWRC3A0N9G9C
z0JJH6j33DDdw/DccrMa9eRU/ISuTxgTKzsnbRevyDUGWKGNswqlVnoPZqJOfauDQZoB2Sz0v2Ze SR+o81wxPcDw3Gp7PurJqfgJLY4YEys7J5WLD+QqA6zQxlmFUivdgpmoU9+qN0gzIJuFfm/mI+0x
0x6Do+veIj8BWoNnMI0PYFA/DzyNBUhr+b+xc8mDYRkhPKCGhhFC+ggDrTrYcVlk/BMZ+qZF10Hw OLrmf+QnQGvwDKbyAQzqt4GnsQBpLT8bO5U8GJYRwh41VIwQ0kcYqFVvx2WR8SkydFWNroHgA44b
AceNaX2zrgvV1rBeX8rsmP0FAAD//wMA5SIzeT8DAAA= U/uq2CxVvYGi+CqzQ/YCAAD//wMAZMa5Sz8DAAA=
headers: headers:
CF-RAY: CF-RAY:
- 99a5ca96bb1443e7-EWR - 99ec2e536dcc3c7d-SJC
Connection: Connection:
- keep-alive - keep-alive
Content-Encoding: Content-Encoding:
@@ -167,12 +68,12 @@ interactions:
Content-Type: Content-Type:
- application/json - application/json
Date: Date:
- Thu, 06 Nov 2025 15:58:16 GMT - Sat, 15 Nov 2025 04:59:45 GMT
Server: Server:
- cloudflare - cloudflare
Set-Cookie: Set-Cookie:
- __cf_bm=REDACTED; - __cf_bm=REDACTED;
path=/; expires=Thu, 06-Nov-25 16:28:16 GMT; domain=.api.openai.com; HttpOnly; path=/; expires=Sat, 15-Nov-25 05:29:45 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None Secure; SameSite=None
- _cfuvid=REDACTED; - _cfuvid=REDACTED;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
@@ -189,31 +90,37 @@ interactions:
cf-cache-status: cf-cache-status:
- DYNAMIC - DYNAMIC
openai-organization: openai-organization:
- user-REDACTED - REDACTED_ORG
openai-processing-ms: openai-processing-ms:
- '235' - '418'
openai-project: openai-project:
- proj_REDACTED - REDACTED_PROJECT
openai-version: openai-version:
- '2020-10-01' - '2020-10-01'
x-envoy-upstream-service-time: x-envoy-upstream-service-time:
- '420' - '434'
x-openai-proxy-wasm: x-openai-proxy-wasm:
- v0.1 - v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests: x-ratelimit-limit-requests:
- '10000' - '30000'
x-ratelimit-limit-tokens: x-ratelimit-limit-tokens:
- '200000' - '150000000'
x-ratelimit-remaining-project-tokens:
- '149999785'
x-ratelimit-remaining-requests: x-ratelimit-remaining-requests:
- '9999' - '29999'
x-ratelimit-remaining-tokens: x-ratelimit-remaining-tokens:
- '199785' - '149999785'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests: x-ratelimit-reset-requests:
- 8.64s - 2ms
x-ratelimit-reset-tokens: x-ratelimit-reset-tokens:
- 64ms - 0s
x-request-id: x-request-id:
- req_9810e9721aa9463c930414ab5174ab61 - REDACTED_REQUEST_ID
status: status:
code: 200 code: 200
message: OK message: OK
@@ -233,7 +140,7 @@ interactions:
accept: accept:
- application/json - application/json
accept-encoding: accept-encoding:
- gzip, deflate, zstd - gzip, deflate
connection: connection:
- keep-alive - keep-alive
content-length: content-length:
@@ -264,25 +171,26 @@ interactions:
x-stainless-runtime: x-stainless-runtime:
- CPython - CPython
x-stainless-runtime-version: x-stainless-runtime-version:
- 3.12.9 - 3.12.10
method: POST method: POST
uri: https://api.openai.com/v1/chat/completions uri: https://api.openai.com/v1/chat/completions
response: response:
body: body:
string: !!binary | string: !!binary |
H4sIAAAAAAAAAwAAAP//jFPBahsxEL37KwZderGN7dqO41vaUghtT4FCacIiS7PrSbQaVZq1swT/ H4sIAAAAAAAAAwAAAP//jFNNbxNBDL3nV1hz4bKp8tGkITdEBVRC4oLgAFXkzHg3prP2aGY2aaj6
e9HayTptCr0ING/e6M2b0dMAQJFVa1Bmq8XUwY0+/tiXXy4/2BDN/p7izdY4/vrp29Wvmxbv1TAz 39Fu0mxaisRlpfXze7bHzw8DAMPOLMHYDWZbBz98byfl/bW9mcrH69GX37Kd8v6z/X63Ubz/aoqW
eHOPRp5ZY8N1cCjE/gibiFowV51eLGfz+Xx5ueqAmi26TKuCjOY8qsnTaDaZzUeTi9F0dWJvmQwm oetfZPMT68JqHTxlVjnANhJmalXHV/PpeDG5Wsw6oFZHvqVVIQ8vdViz8HAymlwOR1fD8eLI3ihb
tYafAwCAp+7MOr3FR7WGyfA5UmNKukK1fkkCUJFdjiidEiXRXtSwBw17Qd9JvwbPezDaQ0U7BA1V SmYJPwYAAA/dt+1THN2bJYyKp0hNKWFFZnlKAjBRfRsxmBKnjJJN0YNWJZN0rd+A6A4sClS8JUCo
lg3apz1GgFv/mbx2cNXd1/CdLMm7BKXecSRBMOw4AiXwLBCajSPjWrBsmhq9oAWOsCeLroUHz3s/ 2rYBJe0oAvyUDyzo4V33v4Rv7Di/SVDiViNnAqteI3AC0QyhWXu2fg9ObVOTZHKACTh3BbYY97DG
husSWm5gq3cIKaChkgx0ih4lZ1sUTS6B3nAjxweHcA21bmGDoDcOQRhC5B3ZLLjmiJApHNFCxBTY RA5UIFBM2kqHSCVFEkvpAj7pjrYUC7Ba1yov6iTAWqUCFsdbdg36BFpmEmCxvnEEa99Q0c5AUgCK
Jxyf9xuxbJLOnvvGuTNAe8+i88w6p+9OyOHFW8dViLxJf1BVSZ7StoioE/vsYxIOqkMPA4C7bobN g0iugHWTIStYlZJjfRoiBbJcsn1RpQAVgp023oEQuSM1NT4DQiTPuPYESZtoCTSC40g2+z1guoMN
q7GoELkOUgg/YPfcdLk61lP96vTofHEChUW7Pj6bvh++Ua842Xa2Bcpos0XbU/uV0Y0lPgMGZ13/ 1xfnbx2pbBK2+5bG+zMARTRj65duy7dH5PG0V69ViLpOL6imZOG0WUXCpNLuMGUNpkMfBwC3nX+a
reat2sfOyVf/U74HjMEgaIsQ0ZJ53XGfFjH/rH+lvbjcCVYJ444MFkIY8yQslrpxx31XqU2CdVGS Z5YwIWod8irrHXXlxvPFQc/0tu3R+fwIZs3o+/hkelm8ordylJF9OnOgsWg35Hpqb1dsHOsZMDib
rzCGSMelL0OxWE50ucTF4lINDoPfAAAA//8DAPFGfbMCBAAA +u9uXtM+TM5S/Y98D1hLIZNbhUiO7fOJ+7RI7VX/K+30yl3DJlHcsqVVZortJhyV2PjDrZm0T5nq
VclSUQyRDwdXhtVsPsJyTrPZWzN4HPwBAAD//wMAtb7X3X4EAAA=
headers: headers:
CF-RAY: CF-RAY:
- 99a5ca9c5ef543e7-EWR - 99ec2e59baca3c7d-SJC
Connection: Connection:
- keep-alive - keep-alive
Content-Encoding: Content-Encoding:
@@ -290,7 +198,7 @@ interactions:
Content-Type: Content-Type:
- application/json - application/json
Date: Date:
- Thu, 06 Nov 2025 15:58:19 GMT - Sat, 15 Nov 2025 04:59:47 GMT
Server: Server:
- cloudflare - cloudflare
Strict-Transport-Security: Strict-Transport-Security:
@@ -306,31 +214,37 @@ interactions:
cf-cache-status: cf-cache-status:
- DYNAMIC - DYNAMIC
openai-organization: openai-organization:
- user-REDACTED - REDACTED_ORG
openai-processing-ms: openai-processing-ms:
- '1326' - '1471'
openai-project: openai-project:
- proj_REDACTED - REDACTED_PROJECT
openai-version: openai-version:
- '2020-10-01' - '2020-10-01'
x-envoy-upstream-service-time: x-envoy-upstream-service-time:
- '1754' - '1488'
x-openai-proxy-wasm: x-openai-proxy-wasm:
- v0.1 - v0.1
x-ratelimit-limit-project-tokens:
- '150000000'
x-ratelimit-limit-requests: x-ratelimit-limit-requests:
- '10000' - '30000'
x-ratelimit-limit-tokens: x-ratelimit-limit-tokens:
- '200000' - '150000000'
x-ratelimit-remaining-project-tokens:
- '149999805'
x-ratelimit-remaining-requests: x-ratelimit-remaining-requests:
- '9998' - '29999'
x-ratelimit-remaining-tokens: x-ratelimit-remaining-tokens:
- '199803' - '149999802'
x-ratelimit-reset-project-tokens:
- 0s
x-ratelimit-reset-requests: x-ratelimit-reset-requests:
- 15.913s - 2ms
x-ratelimit-reset-tokens: x-ratelimit-reset-tokens:
- 59ms - 0s
x-request-id: x-request-id:
- req_f975e16b666e498b8bcfdfab525f71b3 - REDACTED_REQUEST_ID
status: status:
code: 200 code: 200
message: OK message: OK

View File

@@ -1,104 +1,10 @@
interactions: interactions:
- request: - request:
body: '{"messages": [{"role": "user", "content": "Say ''Hello, World!''"}], "model": body: '{"trace_id": "3fe0e5a3-1d9c-4604-b3a7-2cd3f16e95f9", "execution_type":
"gpt-3.5-turbo"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '92'
content-type:
- application/json
cookie:
- __cf_bm=rb61BZH2ejzD5YPmLaEJqI7km71QqyNJGTVdNxBq6qk-1727213194-1.0.1.1-pJ49onmgX9IugEMuYQMralzD7oj_6W.CHbSu4Su1z3NyjTGYg.rhgJZWng8feFYah._oSnoYlkTjpK1Wd2C9FA;
_cfuvid=lbRdAddVWV6W3f5Dm9SaOPWDUOxqtZBSPr_fTW26nEA-1727213194587-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.47.0
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.47.0
x-stainless-raw-response:
- 'true'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.11.7
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-AB7WOl4G3lFflxNyRE5fAnkueUNWp\",\n \"object\":
\"chat.completion\",\n \"created\": 1727213884,\n \"model\": \"gpt-3.5-turbo-0125\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"Hello, World!\",\n \"refusal\":
null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 13,\n \"completion_tokens\":
4,\n \"total_tokens\": 17,\n \"completion_tokens_details\": {\n \"reasoning_tokens\":
0\n }\n },\n \"system_fingerprint\": null\n}\n"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 8c85eb570b271cf3-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 24 Sep 2024 21:38:04 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '170'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '50000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '49999978'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_c504d56aee4210a9911e1b90551f1e46
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"trace_id": "9d3dfee1-ebe8-4eb3-aa28-e77448706cb5", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null, "crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "Unknown Crew", "flow_name": null, "crewai_version": "0.193.2", "crew_name": "Unknown Crew", "flow_name": null, "crewai_version": "1.4.1", "privacy_level":
"privacy_level": "standard"}, "execution_metadata": {"expected_duration_estimate": "standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
300, "agent_count": 0, "task_count": 0, "flow_method_count": 0, "execution_started_at": 0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-11-15T04:57:05.245294+00:00"}}'
"2025-09-24T05:36:10.874552+00:00"}}'
headers: headers:
Accept: Accept:
- '*/*' - '*/*'
@@ -107,54 +13,73 @@ interactions:
Connection: Connection:
- keep-alive - keep-alive
Content-Length: Content-Length:
- '436' - '434'
Content-Type: Content-Type:
- application/json - application/json
User-Agent: User-Agent:
- CrewAI-CLI/0.193.2 - CrewAI-CLI/1.4.1
X-Crewai-Organization-Id: X-Crewai-Organization-Id:
- d3a3d10c-35db-423f-a7a4-c026030ba64d - 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version: X-Crewai-Version:
- 0.193.2 - 1.4.1
method: POST method: POST
uri: http://localhost:3000/crewai_plus/api/v1/tracing/batches uri: https://app.crewai.com/crewai_plus/api/v1/tracing/batches
response: response:
body: body:
string: '{"id":"bc65d267-2f55-4edd-9277-61486245c5f6","trace_id":"9d3dfee1-ebe8-4eb3-aa28-e77448706cb5","execution_type":"crew","crew_name":"Unknown string: '{"error":"bad_credentials","message":"Bad credentials"}'
Crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"0.193.2","privacy_level":"standard","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"Unknown
Crew","flow_name":null,"crewai_version":"0.193.2","privacy_level":"standard"},"created_at":"2025-09-24T05:36:11.292Z","updated_at":"2025-09-24T05:36:11.292Z"}'
headers: headers:
Connection:
- keep-alive
Content-Length: Content-Length:
- '496' - '55'
cache-control: Content-Type:
- max-age=0, private, must-revalidate
content-security-policy:
- 'default-src ''self'' *.crewai.com crewai.com; script-src ''self'' ''unsafe-inline''
*.crewai.com crewai.com https://cdn.jsdelivr.net/npm/apexcharts https://www.gstatic.com
https://run.pstmn.io https://share.descript.com/; style-src ''self'' ''unsafe-inline''
*.crewai.com crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self''
data: *.crewai.com crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net; font-src ''self'' data: *.crewai.com crewai.com;
connect-src ''self'' *.crewai.com crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ ws://localhost:3036
wss://localhost:3036; frame-src ''self'' *.crewai.com crewai.com https://connect.useparagon.com/
https://zeus.tools.crewai.com https://zeus.useparagon.com/* https://connect.tools.crewai.com/
https://www.youtube.com https://share.descript.com'
content-type:
- application/json; charset=utf-8 - application/json; charset=utf-8
etag: Date:
- W/"43353f343ab1e228123d1a9c9a4b6e7c" - Sat, 15 Nov 2025 04:57:05 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
expires:
- '0'
permissions-policy: permissions-policy:
- camera=(), microphone=(self), geolocation=() - camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy: referrer-policy:
- strict-origin-when-cross-origin - strict-origin-when-cross-origin
server-timing: strict-transport-security:
- cache_read.active_support;dur=0.09, cache_fetch_hit.active_support;dur=0.00, - max-age=63072000; includeSubDomains
cache_read_multi.active_support;dur=0.08, start_processing.action_controller;dur=0.00,
sql.active_record;dur=24.53, instantiation.active_record;dur=1.01, feature_operation.flipper;dur=0.07,
start_transaction.active_record;dur=0.02, transaction.active_record;dur=24.66,
process_action.action_controller;dur=399.97
vary: vary:
- Accept - Accept
x-content-type-options: x-content-type-options:
@@ -164,12 +89,120 @@ interactions:
x-permitted-cross-domain-policies: x-permitted-cross-domain-policies:
- none - none
x-request-id: x-request-id:
- 256ac03e-f7ae-4e03-b5e0-31bd179a7afc - 98dde4ab-199c-4d1c-a059-3d8b9c0c93d3
x-runtime: x-runtime:
- '0.422765' - '0.037564'
x-xss-protection: x-xss-protection:
- 1; mode=block - 1; mode=block
status: status:
code: 201 code: 401
message: Created message: Unauthorized
- request:
body: '{"messages":[{"role":"user","content":"Say ''Hello, World!''"}],"model":"gpt-3.5-turbo"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '86'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.109.1
x-stainless-arch:
- arm64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.109.1
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.10
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
body:
string: !!binary |
H4sIAAAAAAAAAwAAAP//jJJNaxsxEIbv+yvUOa+NP2q78TUQegihTQmGFrPI0nitVKtRpdm2Ifi/
F8kfu24SyEUHPfOO3nc0z4UQYDQsBaidZNV4O7hWE31n9Rdz9TCaXd9//dPcLlZhdf999OvmG5RJ
QZtHVHxSDRU13iIbcgesAkrG1HW8mE/HnybzySyDhjTaJKs9D6bD2YDbsKHBaDyZHZU7MgojLMWP
QgghnvOZPDqNf2EpRuXppsEYZY2wPBcJAYFsugEZo4ksHUPZQUWO0WXbn9FaKsWKgtUf+jUBt22U
yaNrre0B6RyxTBmzu/WR7M9+LNU+0Cb+J4WtcSbuqoAykktvRyYPme4LIdY5d3sRBXygxnPF9BPz
c+PpoR10k+7gxyNjYml7mkX5SrNKI0tjY29soKTaoe6U3Yxlqw31QNGL/NLLa70PsY2r39O+A0qh
Z9SVD6iNuszblQVMa/hW2XnE2TBEDL+NwooNhvQNGreytYcFgfgUGZtqa1yNwQeTtyR9Y7Ev/gEA
AP//AwAqA1omJAMAAA==
headers:
CF-RAY:
- 99ec2a70de42f9e4-SJC
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Sat, 15 Nov 2025 04:57:05 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=REDACTED;
path=/; expires=Sat, 15-Nov-25 05:27:05 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=REDACTED;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
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:
- REDACTED_ORG
openai-processing-ms:
- '162'
openai-project:
- REDACTED_PROJECT
openai-version:
- '2020-10-01'
x-envoy-upstream-service-time:
- '183'
x-openai-proxy-wasm:
- v0.1
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '50000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '49999993'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- REDACTED_REQUEST_ID
status:
code: 200
message: OK
version: 1 version: 1

View File

@@ -81,11 +81,9 @@ interactions:
Server: Server:
- cloudflare - cloudflare
Set-Cookie: Set-Cookie:
- __cf_bm=REDACTED; - __cf_bm=REDACTED; path=/; expires=Wed, 05-Nov-25 22:40:59 GMT; domain=.api.openai.com;
path=/; expires=Wed, 05-Nov-25 22:40:59 GMT; domain=.api.openai.com; HttpOnly; HttpOnly; Secure; SameSite=None
Secure; SameSite=None - _cfuvid=REDACTED; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
- _cfuvid=REDACTED;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Strict-Transport-Security: Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload - max-age=31536000; includeSubDomains; preload
Transfer-Encoding: Transfer-Encoding:
@@ -127,4 +125,105 @@ interactions:
status: status:
code: 200 code: 200
message: OK message: OK
- request:
body: '{"trace_id": "c682f49d-bb6b-49d9-84b7-06e1881d37cd", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.4.1", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-11-15T21:20:09.431751+00:00"},
"ephemeral_trace_id": "c682f49d-bb6b-49d9-84b7-06e1881d37cd"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.4.1
X-Crewai-Organization-Id:
- 73c2b193-f579-422c-84c7-76a39a1da77f
X-Crewai-Version:
- 1.4.1
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"25f0f0b3-90bb-4e2a-bde5-817920201bf1","ephemeral_trace_id":"c682f49d-bb6b-49d9-84b7-06e1881d37cd","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.4.1","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.4.1","privacy_level":"standard"},"created_at":"2025-11-15T21:20:09.594Z","updated_at":"2025-11-15T21:20:09.594Z","access_code":"TRACE-1fb0209738","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Sat, 15 Nov 2025 21:20:09 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"e8d1e903c8c6ec2f765163c0c03bed79"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 5ea5f513-c359-4a92-a84a-08ad44d9857b
x-runtime:
- '0.044665'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
version: 1 version: 1

View File

@@ -697,8 +697,13 @@ def test_save_task_json_output():
@pytest.mark.vcr(filter_headers=["authorization"]) @pytest.mark.vcr(filter_headers=["authorization"])
def test_save_task_pydantic_output(): def test_save_task_pydantic_output(tmp_path, monkeypatch):
import uuid """Test saving pydantic output to a file.
Uses tmp_path fixture and monkeypatch to change directory to avoid
file system race conditions on enterprise systems.
"""
from pathlib import Path
class ScoreOutput(BaseModel): class ScoreOutput(BaseModel):
score: int score: int
@@ -710,7 +715,9 @@ def test_save_task_pydantic_output():
allow_delegation=False, allow_delegation=False,
) )
output_file = f"score_{uuid.uuid4()}.json" monkeypatch.chdir(tmp_path)
output_file = "score_output.json"
task = Task( task = Task(
description="Give me an integer score between 1-5 for the following title: 'The impact of AI in the future of work'", description="Give me an integer score between 1-5 for the following title: 'The impact of AI in the future of work'",
expected_output="The score of the title.", expected_output="The score of the title.",
@@ -722,11 +729,9 @@ def test_save_task_pydantic_output():
crew = Crew(agents=[scorer], tasks=[task]) crew = Crew(agents=[scorer], tasks=[task])
crew.kickoff() crew.kickoff()
output_file_exists = os.path.exists(output_file) output_path = Path(output_file).resolve()
assert output_file_exists assert output_path.exists()
assert {"score": 4} == json.loads(open(output_file).read()) assert {"score": 4} == json.loads(output_path.read_text())
if output_file_exists:
os.remove(output_file)
@pytest.mark.vcr(filter_headers=["authorization"]) @pytest.mark.vcr(filter_headers=["authorization"])

View File

@@ -0,0 +1,112 @@
"""Tests to verify that traces are sent when enabled and not sent when disabled.
VCR will record HTTP interactions. Inspect cassettes to verify tracing behavior.
"""
import pytest
from crewai import Agent, Crew, Task
from tests.utils import wait_for_event_handlers
class TestTraceEnableDisable:
"""Test suite to verify trace sending behavior with VCR cassette recording."""
@pytest.mark.vcr(filter_headers=["authorization"])
def test_no_http_calls_when_disabled_via_env(self):
"""Test execution when tracing disabled via CREWAI_TRACING_ENABLED=false."""
with pytest.MonkeyPatch.context() as mp:
mp.setenv("CREWAI_TRACING_ENABLED", "false")
mp.setenv("CREWAI_DISABLE_TELEMETRY", "false")
agent = Agent(
role="Test Agent",
goal="Test goal",
backstory="Test backstory",
llm="gpt-4o-mini",
)
task = Task(
description="Say hello",
expected_output="hello",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task], verbose=False)
result = crew.kickoff()
wait_for_event_handlers()
assert result is not None
@pytest.mark.vcr(filter_headers=["authorization"])
def test_no_http_calls_when_disabled_via_tracing_false(self):
"""Test execution when tracing=False explicitly set."""
with pytest.MonkeyPatch.context() as mp:
mp.setenv("CREWAI_DISABLE_TELEMETRY", "false")
agent = Agent(
role="Test Agent",
goal="Test goal",
backstory="Test backstory",
llm="gpt-4o-mini",
)
task = Task(
description="Say hello",
expected_output="hello",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task], verbose=False, tracing=False)
result = crew.kickoff()
wait_for_event_handlers()
assert result is not None
@pytest.mark.vcr(filter_headers=["authorization"])
def test_trace_calls_when_enabled_via_env(self):
"""Test execution when tracing enabled via CREWAI_TRACING_ENABLED=true."""
with pytest.MonkeyPatch.context() as mp:
mp.setenv("CREWAI_TRACING_ENABLED", "true")
mp.setenv("CREWAI_DISABLE_TELEMETRY", "false")
mp.setenv("OTEL_SDK_DISABLED", "false")
agent = Agent(
role="Test Agent",
goal="Test goal",
backstory="Test backstory",
llm="gpt-4o-mini",
)
task = Task(
description="Say hello",
expected_output="hello",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task], verbose=False)
result = crew.kickoff()
wait_for_event_handlers()
assert result is not None
@pytest.mark.vcr(filter_headers=["authorization"])
def test_trace_calls_when_enabled_via_tracing_true(self):
"""Test execution when tracing=True explicitly set."""
with pytest.MonkeyPatch.context() as mp:
mp.setenv("CREWAI_DISABLE_TELEMETRY", "false")
mp.setenv("OTEL_SDK_DISABLED", "false")
agent = Agent(
role="Test Agent",
goal="Test goal",
backstory="Test backstory",
llm="gpt-4o-mini",
)
task = Task(
description="Say hello",
expected_output="hello",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task], verbose=False, tracing=True)
result = crew.kickoff()
wait_for_event_handlers()
assert result is not None

View File

@@ -20,6 +20,21 @@ from tests.utils import wait_for_event_handlers
class TestTraceListenerSetup: class TestTraceListenerSetup:
"""Test TraceListener is properly setup and collecting events""" """Test TraceListener is properly setup and collecting events"""
@pytest.fixture(autouse=True)
def mock_user_data_file_io(self):
"""Mock user data file I/O to prevent file system pollution between tests"""
with (
patch(
"crewai.events.listeners.tracing.utils._load_user_data",
return_value={},
),
patch(
"crewai.events.listeners.tracing.utils._save_user_data",
return_value=None,
),
):
yield
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def mock_auth_token(self): def mock_auth_token(self):
"""Mock authentication token for all tests in this class""" """Mock authentication token for all tests in this class"""
@@ -45,6 +60,13 @@ class TestTraceListenerSetup:
"""Reset tracing singleton instances between tests""" """Reset tracing singleton instances between tests"""
from crewai.events.event_bus import crewai_event_bus from crewai.events.event_bus import crewai_event_bus
from crewai.events.event_listener import EventListener from crewai.events.event_listener import EventListener
from crewai.events.listeners.tracing.utils import _tracing_enabled
# Reset the tracing enabled contextvar
try:
_tracing_enabled.set(None)
except (LookupError, AttributeError):
pass
# Clear event bus handlers BEFORE creating any new singletons # Clear event bus handlers BEFORE creating any new singletons
with crewai_event_bus._rwlock.w_locked(): with crewai_event_bus._rwlock.w_locked():
@@ -53,11 +75,19 @@ class TestTraceListenerSetup:
crewai_event_bus._handler_dependencies = {} crewai_event_bus._handler_dependencies = {}
crewai_event_bus._execution_plan_cache = {} crewai_event_bus._execution_plan_cache = {}
# Reset TraceCollectionListener singleton # Reset TraceCollectionListener singleton - must reset instance attributes too
if hasattr(TraceCollectionListener, "_instance"): if TraceCollectionListener._instance is not None:
TraceCollectionListener._instance = None # Reset instance attributes that shadow class attributes (only if they exist as instance attrs)
TraceCollectionListener._initialized = False instance_dict = TraceCollectionListener._instance.__dict__
TraceCollectionListener._listeners_setup = False if "_initialized" in instance_dict:
del TraceCollectionListener._instance._initialized
if "_listeners_setup" in instance_dict:
del TraceCollectionListener._instance._listeners_setup
# Reset class attributes
TraceCollectionListener._instance = None
TraceCollectionListener._initialized = False
TraceCollectionListener._listeners_setup = False
# Reset EventListener singleton # Reset EventListener singleton
if hasattr(EventListener, "_instance"): if hasattr(EventListener, "_instance"):
@@ -72,10 +102,19 @@ class TestTraceListenerSetup:
crewai_event_bus._handler_dependencies = {} crewai_event_bus._handler_dependencies = {}
crewai_event_bus._execution_plan_cache = {} crewai_event_bus._execution_plan_cache = {}
if hasattr(TraceCollectionListener, "_instance"): # Reset TraceCollectionListener singleton - must reset instance attributes too
TraceCollectionListener._instance = None if TraceCollectionListener._instance is not None:
TraceCollectionListener._initialized = False # Reset instance attributes that shadow class attributes (only if they exist as instance attrs)
TraceCollectionListener._listeners_setup = False instance_dict = TraceCollectionListener._instance.__dict__
if "_initialized" in instance_dict:
del TraceCollectionListener._instance._initialized
if "_listeners_setup" in instance_dict:
del TraceCollectionListener._instance._listeners_setup
# Reset class attributes
TraceCollectionListener._instance = None
TraceCollectionListener._initialized = False
TraceCollectionListener._listeners_setup = False
if hasattr(EventListener, "_instance"): if hasattr(EventListener, "_instance"):
EventListener._instance = None EventListener._instance = None
@@ -119,7 +158,15 @@ class TestTraceListenerSetup:
def test_trace_listener_collects_crew_events(self): def test_trace_listener_collects_crew_events(self):
"""Test that trace listener properly collects events from crew execution""" """Test that trace listener properly collects events from crew execution"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
agent = Agent( agent = Agent(
role="Test Agent", role="Test Agent",
goal="Test goal", goal="Test goal",
@@ -148,7 +195,15 @@ class TestTraceListenerSetup:
def test_batch_manager_finalizes_batch_clears_buffer(self): def test_batch_manager_finalizes_batch_clears_buffer(self):
"""Test that batch manager properly finalizes batch and clears buffer""" """Test that batch manager properly finalizes batch and clears buffer"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
agent = Agent( agent = Agent(
role="Test Agent", role="Test Agent",
goal="Test goal", goal="Test goal",
@@ -206,7 +261,15 @@ class TestTraceListenerSetup:
def test_events_collection_batch_manager(self, mock_plus_api_calls): def test_events_collection_batch_manager(self, mock_plus_api_calls):
"""Test that trace listener properly collects events from crew execution""" """Test that trace listener properly collects events from crew execution"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
agent = Agent( agent = Agent(
role="Test Agent", role="Test Agent",
goal="Test goal", goal="Test goal",
@@ -300,7 +363,15 @@ class TestTraceListenerSetup:
def test_trace_listener_setup_correctly_for_crew(self): def test_trace_listener_setup_correctly_for_crew(self):
"""Test that trace listener is set up correctly when enabled""" """Test that trace listener is set up correctly when enabled"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
agent = Agent( agent = Agent(
role="Test Agent", role="Test Agent",
goal="Test goal", goal="Test goal",
@@ -318,11 +389,19 @@ class TestTraceListenerSetup:
Crew(agents=[agent], tasks=[task], verbose=True) Crew(agents=[agent], tasks=[task], verbose=True)
assert mock_listener_setup.call_count >= 1 assert mock_listener_setup.call_count >= 1
@pytest.mark.vcr(filter_headers=["authorization"])
def test_trace_listener_setup_correctly_for_flow(self): def test_trace_listener_setup_correctly_for_flow(self):
"""Test that trace listener is set up correctly when enabled""" """Test that trace listener is set up correctly when enabled"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
class FlowExample(Flow): class FlowExample(Flow):
@start() @start()
def start(self): def start(self):
@@ -338,7 +417,15 @@ class TestTraceListenerSetup:
def test_trace_listener_ephemeral_batch(self): def test_trace_listener_ephemeral_batch(self):
"""Test that trace listener properly handles ephemeral batches""" """Test that trace listener properly handles ephemeral batches"""
with ( with (
patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}), patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
),
patch( patch(
"crewai.events.listeners.tracing.trace_listener.TraceCollectionListener._check_authenticated", "crewai.events.listeners.tracing.trace_listener.TraceCollectionListener._check_authenticated",
return_value=False, return_value=False,
@@ -371,7 +458,15 @@ class TestTraceListenerSetup:
@pytest.mark.vcr(filter_headers=["authorization"]) @pytest.mark.vcr(filter_headers=["authorization"])
def test_trace_listener_with_authenticated_user(self): def test_trace_listener_with_authenticated_user(self):
"""Test that trace listener properly handles authenticated batches""" """Test that trace listener properly handles authenticated batches"""
with patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "true"}): with patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "true",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
):
agent = Agent( agent = Agent(
role="Test Agent", role="Test Agent",
goal="Test goal", goal="Test goal",
@@ -433,7 +528,15 @@ class TestTraceListenerSetup:
"""Test first-time user trace collection logic with timeout behavior""" """Test first-time user trace collection logic with timeout behavior"""
with ( with (
patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "false"}), patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "false",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
),
patch( patch(
"crewai.events.listeners.tracing.utils._is_test_environment", "crewai.events.listeners.tracing.utils._is_test_environment",
return_value=False, return_value=False,
@@ -472,6 +575,10 @@ class TestTraceListenerSetup:
trace_listener = TraceCollectionListener() trace_listener = TraceCollectionListener()
trace_listener.setup_listeners(crewai_event_bus) trace_listener.setup_listeners(crewai_event_bus)
trace_listener.first_time_handler = FirstTimeTraceHandler()
if trace_listener.first_time_handler.initialize_for_first_time_user():
trace_listener.first_time_handler.set_batch_manager(trace_listener.batch_manager)
assert trace_listener.first_time_handler.is_first_time is True assert trace_listener.first_time_handler.is_first_time is True
assert trace_listener.first_time_handler.collected_events is False assert trace_listener.first_time_handler.collected_events is False
@@ -494,7 +601,15 @@ class TestTraceListenerSetup:
"""Test first-time user trace collection when user accepts viewing traces""" """Test first-time user trace collection when user accepts viewing traces"""
with ( with (
patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "false"}), patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "false",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
),
patch( patch(
"crewai.events.listeners.tracing.utils._is_test_environment", "crewai.events.listeners.tracing.utils._is_test_environment",
return_value=False, return_value=False,
@@ -531,6 +646,12 @@ class TestTraceListenerSetup:
from crewai.events.event_bus import crewai_event_bus from crewai.events.event_bus import crewai_event_bus
trace_listener = TraceCollectionListener() trace_listener = TraceCollectionListener()
trace_listener.setup_listeners(crewai_event_bus)
# Re-initialize first-time handler after patches are applied to ensure clean state
trace_listener.first_time_handler = FirstTimeTraceHandler()
if trace_listener.first_time_handler.initialize_for_first_time_user():
trace_listener.first_time_handler.set_batch_manager(trace_listener.batch_manager)
trace_listener.batch_manager.ephemeral_trace_url = ( trace_listener.batch_manager.ephemeral_trace_url = (
"https://crewai.com/trace/mock-id" "https://crewai.com/trace/mock-id"
@@ -546,8 +667,6 @@ class TestTraceListenerSetup:
trace_listener.first_time_handler, "_display_ephemeral_trace_link" trace_listener.first_time_handler, "_display_ephemeral_trace_link"
) as mock_display_link, ) as mock_display_link,
): ):
trace_listener.setup_listeners(crewai_event_bus)
assert trace_listener.first_time_handler.is_first_time is True assert trace_listener.first_time_handler.is_first_time is True
trace_listener.first_time_handler.collected_events = True trace_listener.first_time_handler.collected_events = True
@@ -567,7 +686,15 @@ class TestTraceListenerSetup:
def test_first_time_user_trace_consolidation_logic(self, mock_plus_api_calls): def test_first_time_user_trace_consolidation_logic(self, mock_plus_api_calls):
"""Test the consolidation logic for first-time users vs regular tracing""" """Test the consolidation logic for first-time users vs regular tracing"""
with ( with (
patch.dict(os.environ, {"CREWAI_TRACING_ENABLED": "false"}), patch.dict(
os.environ,
{
"CREWAI_TRACING_ENABLED": "",
"CREWAI_DISABLE_TELEMETRY": "false",
"CREWAI_DISABLE_TRACKING": "false",
"OTEL_SDK_DISABLED": "false",
},
),
patch( patch(
"crewai.events.listeners.tracing.utils._is_test_environment", "crewai.events.listeners.tracing.utils._is_test_environment",
return_value=False, return_value=False,
@@ -588,6 +715,13 @@ class TestTraceListenerSetup:
crewai_event_bus._async_handlers = {} crewai_event_bus._async_handlers = {}
trace_listener = TraceCollectionListener() trace_listener = TraceCollectionListener()
# Re-initialize first-time handler after patches are applied to ensure clean state
# This is necessary because the singleton may have been created before patches were active
trace_listener.first_time_handler = FirstTimeTraceHandler()
if trace_listener.first_time_handler.initialize_for_first_time_user():
trace_listener.first_time_handler.set_batch_manager(trace_listener.batch_manager)
trace_listener.setup_listeners(crewai_event_bus) trace_listener.setup_listeners(crewai_event_bus)
assert trace_listener.first_time_handler.is_first_time is True assert trace_listener.first_time_handler.is_first_time is True
@@ -668,40 +802,41 @@ class TestTraceListenerSetup:
def test_trace_batch_marked_as_failed_on_finalize_error(self): def test_trace_batch_marked_as_failed_on_finalize_error(self):
"""Test that trace batch is marked as failed when finalization returns non-200 status""" """Test that trace batch is marked as failed when finalization returns non-200 status"""
# Test the error handling logic directly in TraceBatchManager # Test the error handling logic directly in TraceBatchManager
batch_manager = TraceBatchManager() with patch("crewai.events.listeners.tracing.trace_batch_manager.is_tracing_enabled_in_context", return_value=True):
batch_manager = TraceBatchManager()
# Initialize a batch # Initialize a batch
batch_manager.current_batch = batch_manager.initialize_batch( batch_manager.current_batch = batch_manager.initialize_batch(
user_context={"privacy_level": "standard"}, user_context={"privacy_level": "standard"},
execution_metadata={ execution_metadata={
"execution_type": "crew", "execution_type": "crew",
"crew_name": "test_crew", "crew_name": "test_crew",
}, },
)
batch_manager.trace_batch_id = "test_batch_id_12345"
batch_manager.backend_initialized = True
# Mock the API responses
with (
patch.object(
batch_manager.plus_api,
"send_trace_events",
return_value=MagicMock(status_code=200),
),
patch.object(
batch_manager.plus_api,
"finalize_trace_batch",
return_value=MagicMock(status_code=500, text="Internal Server Error"),
),
patch.object(
batch_manager.plus_api,
"mark_trace_batch_as_failed",
) as mock_mark_failed,
):
# Call finalize_batch directly
batch_manager.finalize_batch()
# Verify that mark_trace_batch_as_failed was called with the error message
mock_mark_failed.assert_called_once_with(
"test_batch_id_12345", "Internal Server Error"
) )
batch_manager.trace_batch_id = "test_batch_id_12345"
batch_manager.backend_initialized = True
# Mock the API responses
with (
patch.object(
batch_manager.plus_api,
"send_trace_events",
return_value=MagicMock(status_code=200),
),
patch.object(
batch_manager.plus_api,
"finalize_trace_batch",
return_value=MagicMock(status_code=500, text="Internal Server Error"),
),
patch.object(
batch_manager.plus_api,
"mark_trace_batch_as_failed",
) as mock_mark_failed,
):
# Call finalize_batch directly
batch_manager.finalize_batch()
# Verify that mark_trace_batch_as_failed was called with the error message
mock_mark_failed.assert_called_once_with(
"test_batch_id_12345", "Internal Server Error"
)