Compare commits

..
Author SHA1 Message Date
Lucas Gomide e68cad380e Merge remote-tracking branch 'origin/main' into devin/1744191265-fix-taskoutput-import 2025-04-09 11:21:16 -03:00
Lucas Gomide 96a78a97f0 Merge pull request #2336 from sakunkun/bug_fix
fix: retrieve function_calling_llm from registered LLMs in CrewBase
2025-04-09 09:59:38 -03:00
Lucas Gomide 337d2b634b Merge branch 'main' into bug_fix 2025-04-09 09:43:28 -03:00
Devin AIandJoe Moura 475b704f95 Fix #2547: Add TaskOutput and CrewOutput to public exports
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-04-09 09:35:05 +00:00
João Moura b992ee9d6b small comments 2025-04-08 10:27:02 -07:00
Lucas GomideandLorenze Jay d7fa8464c7 Add support for External Memory (the future replacement for UserMemory) (#2510)
* fix: surfacing properly supported types by Mem0Storage

* feat: prepare Mem0Storage to accept config paramenter

We're planning to remove `memory_config` soon. This commit kindly prepare this storage to accept the config provided directly

* feat: add external memory

* fix: cleanup Mem0 warning while adding messages to the memory

* feat: support set the current crew in memory

This can be useful when a memory is initialized before the crew, but the crew might still be a very relevant attribute

* fix: allow to reset only an external_memory from crew

* test: add external memory test

* test: ensure the config takes precedence over memory_config when setting mem0

* fix: support to provide a custom storage to External Memory

* docs: add docs about external memory

* chore: add warning messages about the deprecation of UserMemory

* fix: fix typing check

---------

Co-authored-by: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com>
2025-04-07 10:40:35 -07:00
João Moura 918c0589eb adding new docs 2025-04-07 02:46:40 -04:00
sakunkun c9d3eb7ccf fix ruff check error of project_test.py 2025-04-07 10:08:40 +08:00
Tony Kipkemboi d216edb022 Merge pull request #2520 from exiao/main
Fix title and position in docs for Arize Phoenix
2025-04-05 18:01:20 -04:00
exiao afa8783750 Update arize-phoenix-observability.mdx 2025-04-03 13:03:39 -04:00
exiao a661050464 Merge branch 'crewAIInc:main' into main 2025-04-03 11:34:29 -04:00
exiao c14f990098 Update docs.json 2025-04-03 11:33:51 -04:00
exiao 26ccaf78ec Update arize-phoenix-observability.mdx 2025-04-03 11:33:18 -04:00
exiao 12e98e1f3c Update and rename phoenix-observability.mdx to arize-phoenix-observability.mdx 2025-04-03 11:32:56 -04:00
efe27bd570 Feat/individual react agent (#2483)
* WIP

* WIP

* wip

* wip

* WIP

* More WIP

* Its working but needs a massive clean up

* output type works now

* Usage metrics fixed

* more testing

* WIP

* cleaning up

* Update logger

* 99% done. Need to make docs match new example

* cleanup

* drop hard coded examples

* docs

* Clean up

* Fix errors

* Trying to fix CI issues

* more type checker fixes

* More type checking fixes

* Update LiteAgent documentation for clarity and consistency; replace WebsiteSearchTool with SerperDevTool, and improve formatting in examples.

* fix fingerprinting issues

* fix type-checker

* Fix type-checker issue by adding type ignore comment for cache read in ToolUsage class

* Add optional agent parameter to CrewAgentParser and enhance action handling logic

* Remove unused parameters from ToolUsage instantiation in tests and clean up debug print statement in CrewAgentParser.

* Remove deprecated test files and examples for LiteAgent; add comprehensive tests for LiteAgent functionality, including tool usage and structured output handling.

* Remove unused variable 'result' from ToolUsage class to clean up code.

* Add initialization for 'result' variable in ToolUsage class to resolve type-checker warnings

* Refactor agent_utils.py by removing unused event imports and adding missing commas in function definitions. Update test_events.py to reflect changes in expected event counts and adjust assertions accordingly. Modify test_tools_emits_error_events.yaml to include new headers and update response content for consistency with recent API changes.

* Enhance tests in crew_test.py by verifying cache behavior in test_tools_with_custom_caching and ensuring proper agent initialization with added commas in test_crew_kickoff_for_each_works_with_manager_agent_copy.

* Update agent tests to reflect changes in expected call counts and improve response formatting in YAML cassette. Adjusted mock call count from 2 to 3 and refined interaction formats for clarity and consistency.

* Refactor agent tests to update model versions and improve response formatting in YAML cassettes. Changed model references from 'o1-preview' to 'o3-mini' and adjusted interaction formats for consistency. Enhanced error handling in context length tests and refined mock setups for better clarity.

* Update tool usage logging to ensure tool arguments are consistently formatted as strings. Adjust agent test cases to reflect changes in maximum iterations and expected outputs, enhancing clarity in assertions. Update YAML cassettes to align with new response formats and improve overall consistency across tests.

* Update YAML cassette for LLM tests to reflect changes in response structure and model version. Adjusted request and response headers, including updated content length and user agent. Enhanced token limits and request counts for improved testing accuracy.

* Update tool usage logging to store tool arguments as native types instead of strings, enhancing data integrity and usability.

* Refactor agent tests by removing outdated test cases and updating YAML cassettes to reflect changes in tool usage and response formats. Adjusted request and response headers, including user agent and content length, for improved accuracy in testing. Enhanced interaction formats for consistency across tests.

* Add Excalidraw diagram file for visual representation of input-output flow

Created a new Excalidraw file that includes a diagram illustrating the input box, database, and output box with connecting arrows. This visual aid enhances understanding of the data flow within the application.

* Remove redundant error handling for action and final answer in CrewAgentParser. Update tests to reflect this change by deleting the corresponding test case.

---------

Co-authored-by: Lorenze Jay <63378463+lorenzejay@users.noreply.github.com>
Co-authored-by: Lorenze Jay <lorenzejaytech@gmail.com>
2025-04-02 08:54:46 -07:00
Lucas Gomide 403ea385d7 Merge branch 'main' into bug_fix 2025-04-02 10:00:53 -03:00
sakunkun 7c67c2c6af fix project_test.py 2025-03-26 14:02:04 +08:00
sakunkun e4f5c7cdf2 Merge branch 'crewAIInc:main' into bug_fix 2025-03-26 10:50:15 +08:00
sakunkun 448d31cad9 Fix the failing test of project_test.py 2025-03-22 11:28:27 +08:00
Brandon Hancock (bhancock_ai) b3667a8c09 Merge branch 'main' into bug_fix 2025-03-21 13:08:09 -04:00
sakunkun 313038882c fix: retrieve function_calling_llm from registered LLMs in CrewBase 2025-03-11 11:40:33 +00:00
35 changed files with 4040 additions and 104 deletions

No files matched your search

+2 -1
View File
@@ -25,4 +25,5 @@ agentops.log
test_flow.html
crewairules.mdc
plan.md
conceptual_plan.md
conceptual_plan.md
build_image
+13 -1
View File
@@ -18,6 +18,18 @@ In the CrewAI framework, an `Agent` is an autonomous unit that can:
Think of an agent as a specialized team member with specific skills, expertise, and responsibilities. For example, a `Researcher` agent might excel at gathering and analyzing information, while a `Writer` agent might be better at creating content.
</Tip>
<Note type="info" title="Enterprise Enhancement: Visual Agent Builder">
CrewAI Enterprise includes a Visual Agent Builder that simplifies agent creation and configuration without writing code. Design your agents visually and test them in real-time.
![Visual Agent Builder Screenshot](../images/enterprise/crew-studio-quickstart)
The Visual Agent Builder enables:
- Intuitive agent configuration with form-based interfaces
- Real-time testing and validation
- Template library with pre-configured agent types
- Easy customization of agent attributes and behaviors
</Note>
## Agent Attributes
| Attribute | Parameter | Type | Description |
@@ -233,7 +245,7 @@ custom_agent = Agent(
#### Code Execution
- `allow_code_execution`: Must be True to run code
- `code_execution_mode`:
- `code_execution_mode`:
- `"safe"`: Uses Docker (recommended for production)
- `"unsafe"`: Direct execution (use only in trusted environments)
+21 -7
View File
@@ -18,6 +18,20 @@ CrewAI uses an event bus architecture to emit events throughout the execution li
When specific actions occur in CrewAI (like a Crew starting execution, an Agent completing a task, or a tool being used), the system emits corresponding events. You can register handlers for these events to execute custom code when they occur.
<Note type="info" title="Enterprise Enhancement: Prompt Tracing">
CrewAI Enterprise provides a built-in Prompt Tracing feature that leverages the event system to track, store, and visualize all prompts, completions, and associated metadata. This provides powerful debugging capabilities and transparency into your agent operations.
![Prompt Tracing Dashboard](../images/enterprise/prompt-tracing.png)
With Prompt Tracing you can:
- View the complete history of all prompts sent to your LLM
- Track token usage and costs
- Debug agent reasoning failures
- Share prompt sequences with your team
- Compare different prompt strategies
- Export traces for compliance and auditing
</Note>
## Creating a Custom Event Listener
To create a custom event listener, you need to:
@@ -40,17 +54,17 @@ from crewai.utilities.events.base_event_listener import BaseEventListener
class MyCustomListener(BaseEventListener):
def __init__(self):
super().__init__()
def setup_listeners(self, crewai_event_bus):
@crewai_event_bus.on(CrewKickoffStartedEvent)
def on_crew_started(source, event):
print(f"Crew '{event.crew_name}' has started execution!")
@crewai_event_bus.on(CrewKickoffCompletedEvent)
def on_crew_completed(source, event):
print(f"Crew '{event.crew_name}' has completed execution!")
print(f"Output: {event.output}")
@crewai_event_bus.on(AgentExecutionCompletedEvent)
def on_agent_execution_completed(source, event):
print(f"Agent '{event.agent.role}' completed task")
@@ -83,7 +97,7 @@ my_listener = MyCustomListener()
class MyCustomCrew:
# Your crew implementation...
def crew(self):
return Crew(
agents=[...],
@@ -106,7 +120,7 @@ my_listener = MyCustomListener()
class MyCustomFlow(Flow):
# Your flow implementation...
@start()
def first_step(self):
# ...
@@ -324,9 +338,9 @@ with crewai_event_bus.scoped_handlers():
@crewai_event_bus.on(CrewKickoffStartedEvent)
def temp_handler(source, event):
print("This handler only exists within this context")
# Do something that emits events
# Outside the context, the temporary handler is removed
```
+98 -1
View File
@@ -18,7 +18,8 @@ reason, and learn from past interactions.
| **Long-Term Memory** | Preserves valuable insights and learnings from past executions, allowing agents to build and refine their knowledge over time. |
| **Entity Memory** | Captures and organizes information about entities (people, places, concepts) encountered during tasks, facilitating deeper understanding and relationship mapping. Uses `RAG` for storing entity information. |
| **Contextual Memory**| Maintains the context of interactions by combining `ShortTermMemory`, `LongTermMemory`, and `EntityMemory`, aiding in the coherence and relevance of agent responses over a sequence of tasks or a conversation. |
| **User Memory** | Stores user-specific information and preferences, enhancing personalization and user experience. |
| **External Memory** | Enables integration with external memory systems and providers (like Mem0), allowing for specialized memory storage and retrieval across different applications. Supports custom storage implementations for flexible memory management. |
| **User Memory** | ⚠️ **DEPRECATED**: This component is deprecated and will be removed in a future version. Please use [External Memory](#using-external-memory) instead. |
## How Memory Systems Empower Agents
@@ -274,6 +275,102 @@ crew = Crew(
)
```
### Using External Memory
External Memory is a powerful feature that allows you to integrate external memory systems with your CrewAI applications. This is particularly useful when you want to use specialized memory providers or maintain memory across different applications.
#### Basic Usage with Mem0
The most common way to use External Memory is with Mem0 as the provider:
```python
from crewai import Agent, Crew, Process, Task
from crewai.memory.external.external_memory import ExternalMemory
agent = Agent(
role="You are a helpful assistant",
goal="Plan a vacation for the user",
backstory="You are a helpful assistant that can plan a vacation for the user",
verbose=True,
)
task = Task(
description="Give things related to the user's vacation",
expected_output="A plan for the vacation",
agent=agent,
)
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True,
process=Process.sequential,
memory=True,
external_memory=ExternalMemory(
embedder_config={"provider": "mem0", "config": {"user_id": "U-123"}} # you can provide an entire Mem0 configuration
),
)
crew.kickoff(
inputs={"question": "which destination is better for a beach vacation?"}
)
```
#### Using External Memory with Custom Storage
You can also create custom storage implementations for External Memory. Here's an example of how to create a custom storage:
```python
from crewai import Agent, Crew, Process, Task
from crewai.memory.external.external_memory import ExternalMemory
from crewai.memory.storage.interface import Storage
class CustomStorage(Storage):
def __init__(self):
self.memories = []
def save(self, value, metadata=None, agent=None):
self.memories.append({"value": value, "metadata": metadata, "agent": agent})
def search(self, query, limit=10, score_threshold=0.5):
# Implement your search logic here
return []
def reset(self):
self.memories = []
# Create external memory with custom storage
external_memory = ExternalMemory(
storage=CustomStorage(),
embedder_config={"provider": "mem0", "config": {"user_id": "U-123"}},
)
agent = Agent(
role="You are a helpful assistant",
goal="Plan a vacation for the user",
backstory="You are a helpful assistant that can plan a vacation for the user",
verbose=True,
)
task = Task(
description="Give things related to the user's vacation",
expected_output="A plan for the vacation",
agent=agent,
)
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True,
process=Process.sequential,
memory=True,
external_memory=external_memory,
)
crew.kickoff(
inputs={"question": "which destination is better for a beach vacation?"}
)
```
## Additional Embedding Providers
+14 -2
View File
@@ -12,6 +12,18 @@ Tasks provide all necessary details for execution, such as a description, the ag
Tasks within CrewAI can be collaborative, requiring multiple agents to work together. This is managed through the task properties and orchestrated by the Crew's process, enhancing teamwork and efficiency.
<Note type="info" title="Enterprise Enhancement: Visual Task Builder">
CrewAI Enterprise includes a Visual Task Builder in Crew Studio that simplifies complex task creation and chaining. Design your task flows visually and test them in real-time without writing code.
![Task Builder Screenshot](../images/enterprise/crew-studio-quickstart.png)
The Visual Task Builder enables:
- Drag-and-drop task creation
- Visual task dependencies and flow
- Real-time testing and validation
- Easy sharing and collaboration
</Note>
### Task Execution Flow
Tasks can be executed in two ways:
@@ -414,7 +426,7 @@ It's also important to note that the output of the final task of a crew becomes
### Using `output_pydantic`
The `output_pydantic` property allows you to define a Pydantic model that the task output should conform to. This ensures that the output is not only structured but also validated according to the Pydantic model.
Here’s an example demonstrating how to use output_pydantic:
Here's an example demonstrating how to use output_pydantic:
```python Code
import json
@@ -495,7 +507,7 @@ In this example:
### Using `output_json`
The `output_json` property allows you to define the expected output in JSON format. This ensures that the task's output is a valid JSON structure that can be easily parsed and used in your application.
Here’s an example demonstrating how to use `output_json`:
Here's an example demonstrating how to use `output_json`:
```python Code
import json
+14 -2
View File
@@ -15,6 +15,18 @@ A tool in CrewAI is a skill or function that agents can utilize to perform vario
This includes tools from the [CrewAI Toolkit](https://github.com/joaomdmoura/crewai-tools) and [LangChain Tools](https://python.langchain.com/docs/integrations/tools),
enabling everything from simple searches to complex interactions and effective teamwork among agents.
<Note type="info" title="Enterprise Enhancement: Tools Repository">
CrewAI Enterprise provides a comprehensive Tools Repository with pre-built integrations for common business systems and APIs. Deploy agents with enterprise tools in minutes instead of days.
![Tools Repository Screenshot](../images/enterprise/tools-repository.png)
The Enterprise Tools Repository includes:
- Pre-built connectors for popular enterprise systems
- Custom tool creation interface
- Version control and sharing capabilities
- Security and compliance features
</Note>
## Key Characteristics of Tools
- **Utility**: Crafted for tasks such as web searching, data analysis, content generation, and agent collaboration.
@@ -79,7 +91,7 @@ research = Task(
)
write = Task(
description='Write an engaging blog post about the AI industry, based on the research analyst’s summary. Draw inspiration from the latest blog posts in the directory.',
description='Write an engaging blog post about the AI industry, based on the research analyst's summary. Draw inspiration from the latest blog posts in the directory.',
expected_output='A 4-paragraph blog post formatted in markdown with engaging, informative, and accessible content, avoiding complex jargon.',
agent=writer,
output_file='blog-posts/new_post.md' # The final blog post will be saved here
@@ -141,7 +153,7 @@ Here is a list of the available tools and their descriptions:
## Creating your own Tools
<Tip>
Developers can craft `custom tools` tailored for their agent’s needs or
Developers can craft `custom tools` tailored for their agent's needs or
utilize pre-built options.
</Tip>
+1 -1
View File
@@ -105,12 +105,12 @@
"group": "Agent Monitoring & Observability",
"pages": [
"how-to/agentops-observability",
"how-to/arize-phoenix-observability",
"how-to/langfuse-observability",
"how-to/langtrace-observability",
"how-to/mlflow-observability",
"how-to/openlit-observability",
"how-to/opik-observability",
"how-to/phoenix-observability",
"how-to/portkey-observability",
"how-to/weave-integration"
]
@@ -1,10 +1,10 @@
---
title: Agent Monitoring with Arize Phoenix
description: Learn how to integrate Arize Phoenix with CrewAI via OpenTelemetry using OpenInference
title: Arize Phoenix
description: Arize Phoenix integration for CrewAI with OpenTelemetry and OpenInference
icon: magnifying-glass-chart
---
# Integrate Arize Phoenix with CrewAI
# Arize Phoenix Integration
This guide demonstrates how to integrate **Arize Phoenix** with **CrewAI** using OpenTelemetry via the [OpenInference](https://github.com/openinference/openinference) SDK. By the end of this guide, you will be able to trace your CrewAI agents and easily debug your agents.
+23 -2
View File
@@ -6,12 +6,12 @@ icon: wrench
<Note>
**Python Version Requirements**
CrewAI requires `Python >=3.10 and <3.13`. Here's how to check your version:
```bash
python3 --version
```
If you need to update Python, visit [python.org/downloads](https://python.org/downloads)
</Note>
@@ -140,6 +140,27 @@ We recommend using the `YAML` template scaffolding for a structured approach to
</Step>
</Steps>
## Enterprise Installation Options
<Note type="info">
For teams and organizations, CrewAI offers enterprise deployment options that eliminate setup complexity:
### CrewAI Enterprise (SaaS)
- Zero installation required - just sign up for free at [app.crewai.com](https://app.crewai.com)
- Automatic updates and maintenance
- Managed infrastructure and scaling
- Build Crews with no Code
### CrewAI Factory (Self-hosted)
- Containerized deployment for your infrastructure
- Supports any hyperscaler including on prem depployments
- Integration with your existing security systems
<Card title="Explore Enterprise Options" icon="building" href="https://crewai.com/enterprise">
Learn about CrewAI's enterprise offerings and schedule a demo
</Card>
</Note>
## Next Steps
<CardGroup cols={2}>
+1
View File
@@ -15,6 +15,7 @@ CrewAI empowers developers with both high-level simplicity and precise low-level
With over 100,000 developers certified through our community courses, CrewAI is rapidly becoming the standard for enterprise-ready AI automation.
## How Crews Work
<Note>
+17 -1
View File
@@ -200,6 +200,22 @@ Follow the steps below to get Crewing! 🚣‍♂️
```
</CodeGroup>
</Step>
<Step title="Enterprise Alternative: Create in Crew Studio">
For CrewAI Enterprise users, you can create the same crew without writing code:
1. Log in to your CrewAI Enterprise account (create a free account at [app.crewai.com](https://app.crewai.com))
2. Open Crew Studio
3. Type what is the automation you're tryign to build
4. Create your tasks visually and connect them in sequence
5. Configure your inputs and click "Download Code" or "Deploy"
![Crew Studio Quickstart](../images/enterprise/crew-studio-quickstart.png)
<Card title="Try CrewAI Enterprise" icon="rocket" href="https://app.crewai.com">
Start your free account at CrewAI Enterprise
</Card>
</Step>
<Step title="View your final report">
You should see the output in the console and the `report.md` file should be created in the root of your project with the final report.
@@ -271,7 +287,7 @@ Follow the steps below to get Crewing! 🚣‍♂️
</Steps>
<Check>
Congratulations!
Congratulations!
You have successfully set up your crew project and are ready to start building your own agentic workflows!
</Check>
+4
View File
@@ -2,12 +2,14 @@ import warnings
from crewai.agent import Agent
from crewai.crew import Crew
from crewai.crews.crew_output import CrewOutput
from crewai.flow.flow import Flow
from crewai.knowledge.knowledge import Knowledge
from crewai.llm import LLM
from crewai.llms.base_llm import BaseLLM
from crewai.process import Process
from crewai.task import Task
from crewai.tasks.task_output import TaskOutput
warnings.filterwarnings(
"ignore",
@@ -19,10 +21,12 @@ __version__ = "0.108.0"
__all__ = [
"Agent",
"Crew",
"CrewOutput",
"Process",
"Task",
"LLM",
"BaseLLM",
"Flow",
"Knowledge",
"TaskOutput",
]
+1
View File
@@ -207,6 +207,7 @@ class Agent(BaseAgent):
self.crew._long_term_memory,
self.crew._entity_memory,
self.crew._user_memory,
self.crew._external_memory,
)
memory = contextual_memory.build_context_for_task(task, context)
if memory.strip() != "":
@@ -47,6 +47,27 @@ class CrewAgentExecutorMixin:
print(f"Failed to add to short term memory: {e}")
pass
def _create_external_memory(self, output) -> None:
"""Create and save a external-term memory item if conditions are met."""
if (
self.crew
and self.agent
and self.task
and hasattr(self.crew, "_external_memory")
and self.crew._external_memory
):
try:
self.crew._external_memory.save(
value=output.text,
metadata={
"description": self.task.description,
},
agent=self.agent.role,
)
except Exception as e:
print(f"Failed to add to external memory: {e}")
pass
def _create_long_term_memory(self, output) -> None:
"""Create and save long-term and entity memory items based on evaluation."""
if (
+1
View File
@@ -129,6 +129,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
self._create_short_term_memory(formatted_answer)
self._create_long_term_memory(formatted_answer)
self._create_external_memory(formatted_answer)
return {"output": formatted_answer.output}
def _invoke_loop(self) -> AgentFinish:
+4
View File
@@ -3,6 +3,10 @@ import subprocess
import click
# Be mindful about changing this.
# on some enviorments we don't use this command but instead uv sync directly
# so if you expect this to support more things you will need to replicate it there
# ask @joaomdmoura if you are unsure
def install_crew(proxy_options: list[str]) -> None:
"""
Install the crew by running the UV command to lock and install.
+24 -1
View File
@@ -28,6 +28,7 @@ from crewai.knowledge.knowledge import Knowledge
from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
from crewai.llm import LLM, BaseLLM
from crewai.memory.entity.entity_memory import EntityMemory
from crewai.memory.external.external_memory import ExternalMemory
from crewai.memory.long_term.long_term_memory import LongTermMemory
from crewai.memory.short_term.short_term_memory import ShortTermMemory
from crewai.memory.user.user_memory import UserMemory
@@ -105,6 +106,7 @@ class Crew(BaseModel):
_long_term_memory: Optional[InstanceOf[LongTermMemory]] = PrivateAttr()
_entity_memory: Optional[InstanceOf[EntityMemory]] = PrivateAttr()
_user_memory: Optional[InstanceOf[UserMemory]] = PrivateAttr()
_external_memory: Optional[InstanceOf[ExternalMemory]] = PrivateAttr()
_train: Optional[bool] = PrivateAttr(default=False)
_train_iteration: Optional[int] = PrivateAttr()
_inputs: Optional[Dict[str, Any]] = PrivateAttr(default=None)
@@ -145,6 +147,10 @@ class Crew(BaseModel):
default=None,
description="An instance of the UserMemory to be used by the Crew to store/fetch memories of a specific user.",
)
external_memory: Optional[InstanceOf[ExternalMemory]] = Field(
default=None,
description="An Instance of the ExternalMemory to be used by the Crew",
)
embedder: Optional[dict] = Field(
default=None,
description="Configuration for the embedder to be used for the crew.",
@@ -289,6 +295,12 @@ class Crew(BaseModel):
if self.entity_memory
else EntityMemory(crew=self, embedder_config=self.embedder)
)
self._external_memory = (
# External memory doesn’t support a default value since it was designed to be managed entirely externally
self.external_memory.set_crew(self)
if self.external_memory
else None
)
if (
self.memory_config
and "user_memory" in self.memory_config
@@ -1167,6 +1179,7 @@ class Crew(BaseModel):
"_short_term_memory",
"_long_term_memory",
"_entity_memory",
"_external_memory",
"_telemetry",
"agents",
"tasks",
@@ -1313,7 +1326,15 @@ class Crew(BaseModel):
RuntimeError: If memory reset operation fails.
"""
VALID_TYPES = frozenset(
["long", "short", "entity", "knowledge", "kickoff_outputs", "all"]
[
"long",
"short",
"entity",
"knowledge",
"kickoff_outputs",
"all",
"external",
]
)
if command_type not in VALID_TYPES:
@@ -1339,6 +1360,7 @@ class Crew(BaseModel):
memory_systems = [
("short term", getattr(self, "_short_term_memory", None)),
("entity", getattr(self, "_entity_memory", None)),
("external", getattr(self, "_external_memory", None)),
("long term", getattr(self, "_long_term_memory", None)),
("task output", getattr(self, "_task_output_handler", None)),
("knowledge", getattr(self, "knowledge", None)),
@@ -1366,6 +1388,7 @@ class Crew(BaseModel):
"entity": (self._entity_memory, "entity"),
"knowledge": (self.knowledge, "knowledge"),
"kickoff_outputs": (self._task_output_handler, "task output"),
"external": (self._external_memory, "external"),
}
memory_system, name = reset_functions[memory_type]
+8 -1
View File
@@ -2,5 +2,12 @@ from .entity.entity_memory import EntityMemory
from .long_term.long_term_memory import LongTermMemory
from .short_term.short_term_memory import ShortTermMemory
from .user.user_memory import UserMemory
from .external.external_memory import ExternalMemory
__all__ = ["UserMemory", "EntityMemory", "LongTermMemory", "ShortTermMemory"]
__all__ = [
"UserMemory",
"EntityMemory",
"LongTermMemory",
"ShortTermMemory",
"ExternalMemory",
]
@@ -1,6 +1,12 @@
from typing import Any, Dict, Optional
from crewai.memory import EntityMemory, LongTermMemory, ShortTermMemory, UserMemory
from crewai.memory import (
EntityMemory,
ExternalMemory,
LongTermMemory,
ShortTermMemory,
UserMemory,
)
class ContextualMemory:
@@ -11,6 +17,7 @@ class ContextualMemory:
ltm: LongTermMemory,
em: EntityMemory,
um: UserMemory,
exm: ExternalMemory,
):
if memory_config is not None:
self.memory_provider = memory_config.get("provider")
@@ -20,6 +27,7 @@ class ContextualMemory:
self.ltm = ltm
self.em = em
self.um = um
self.exm = exm
def build_context_for_task(self, task, context) -> str:
"""
@@ -35,6 +43,7 @@ class ContextualMemory:
context.append(self._fetch_ltm_context(task.description))
context.append(self._fetch_stm_context(query))
context.append(self._fetch_entity_context(query))
context.append(self._fetch_external_context(query))
if self.memory_provider == "mem0":
context.append(self._fetch_user_context(query))
return "\n".join(filter(None, context))
@@ -106,3 +115,24 @@ class ContextualMemory:
f"- {result['memory']}" for result in user_memories
)
return f"User memories/preferences:\n{formatted_memories}"
def _fetch_external_context(self, query: str) -> str:
"""
Fetches and formats relevant information from External Memory.
Args:
query (str): The search query to find relevant information.
Returns:
str: Formatted information as bullet points, or an empty string if none found.
"""
if self.exm is None:
return ""
external_memories = self.exm.search(query)
if not external_memories:
return ""
formatted_memories = "\n".join(
f"- {result['memory']}" for result in external_memories
)
return f"External memories:\n{formatted_memories}"
View File
Whitespace-only changes.
+61
View File
@@ -0,0 +1,61 @@
from typing import TYPE_CHECKING, Any, Dict, Optional, Self
from crewai.memory.external.external_memory_item import ExternalMemoryItem
from crewai.memory.memory import Memory
from crewai.memory.storage.interface import Storage
if TYPE_CHECKING:
from crewai.memory.storage.mem0_storage import Mem0Storage
class ExternalMemory(Memory):
def __init__(self, storage: Optional[Storage] = None, **data: Any):
super().__init__(storage=storage, **data)
@staticmethod
def _configure_mem0(crew: Any, config: Dict[str, Any]) -> "Mem0Storage":
from crewai.memory.storage.mem0_storage import Mem0Storage
return Mem0Storage(type="external", crew=crew, config=config)
@staticmethod
def external_supported_storages() -> Dict[str, Any]:
return {
"mem0": ExternalMemory._configure_mem0,
}
@staticmethod
def create_storage(crew: Any, embedder_config: Optional[Dict[str, Any]]) -> Storage:
if not embedder_config:
raise ValueError("embedder_config is required")
if "provider" not in embedder_config:
raise ValueError("embedder_config must include a 'provider' key")
provider = embedder_config["provider"]
supported_storages = ExternalMemory.external_supported_storages()
if provider not in supported_storages:
raise ValueError(f"Provider {provider} not supported")
return supported_storages[provider](crew, embedder_config.get("config", {}))
def save(
self,
value: Any,
metadata: Optional[Dict[str, Any]] = None,
agent: Optional[str] = None,
) -> None:
"""Saves a value into the external storage."""
item = ExternalMemoryItem(value=value, metadata=metadata, agent=agent)
super().save(value=item.value, metadata=item.metadata, agent=item.agent)
def reset(self) -> None:
self.storage.reset()
def set_crew(self, crew: Any) -> Self:
super().set_crew(crew)
if not self.storage:
self.storage = self.create_storage(crew, self.embedder_config)
return self
+13
View File
@@ -0,0 +1,13 @@
from typing import Any, Dict, Optional
class ExternalMemoryItem:
def __init__(
self,
value: Any,
metadata: Optional[Dict[str, Any]] = None,
agent: Optional[str] = None,
):
self.value = value
self.metadata = metadata
self.agent = agent
+6 -1
View File
@@ -1,4 +1,4 @@
from typing import Any, Dict, List, Optional
from typing import Any, Dict, List, Optional, Self
from pydantic import BaseModel
@@ -9,6 +9,7 @@ class Memory(BaseModel):
"""
embedder_config: Optional[Dict[str, Any]] = None
crew: Optional[Any] = None
storage: Any
@@ -36,3 +37,7 @@ class Memory(BaseModel):
return self.storage.search(
query=query, limit=limit, score_threshold=score_threshold
)
def set_crew(self, crew: Any) -> Self:
self.crew = crew
return self
+54 -39
View File
@@ -11,15 +11,20 @@ class Mem0Storage(Storage):
Extends Storage to handle embedding and searching across entities using Mem0.
"""
def __init__(self, type, crew=None):
def __init__(self, type, crew=None, config=None):
super().__init__()
if type not in ["user", "short_term", "long_term", "entities"]:
raise ValueError("Invalid type for Mem0Storage. Must be 'user' or 'agent'.")
supported_types = ["user", "short_term", "long_term", "entities", "external"]
if type not in supported_types:
raise ValueError(
f"Invalid type '{type}' for Mem0Storage. Must be one of: "
+ ", ".join(supported_types)
)
self.memory_type = type
self.crew = crew
self.memory_config = crew.memory_config
self.config = config or {}
# TODO: Memory config will be removed in the future the config will be passed as a parameter
self.memory_config = self.config or getattr(crew, "memory_config", {}) or {}
# User ID is required for user memory type "user" since it's used as a unique identifier for the user.
user_id = self._get_user_id()
@@ -27,7 +32,7 @@ class Mem0Storage(Storage):
raise ValueError("User ID is required for user memory type")
# API key in memory config overrides the environment variable
config = self.memory_config.get("config", {})
config = self._get_config()
mem0_api_key = config.get("api_key") or os.getenv("MEM0_API_KEY")
mem0_org_id = config.get("org_id")
mem0_project_id = config.get("project_id")
@@ -56,26 +61,34 @@ class Mem0Storage(Storage):
def save(self, value: Any, metadata: Dict[str, Any]) -> None:
user_id = self._get_user_id()
agent_name = self._get_agent_name()
if self.memory_type == "user":
self.memory.add(value, user_id=user_id, metadata={**metadata})
elif self.memory_type == "short_term":
agent_name = self._get_agent_name()
self.memory.add(
value, agent_id=agent_name, metadata={"type": "short_term", **metadata}
)
params = None
if self.memory_type == "short_term":
params = {
"agent_id": agent_name,
"infer": False,
"metadata": {"type": "short_term", **metadata},
}
elif self.memory_type == "long_term":
agent_name = self._get_agent_name()
self.memory.add(
value,
agent_id=agent_name,
infer=False,
metadata={"type": "long_term", **metadata},
)
params = {
"agent_id": agent_name,
"infer": False,
"metadata": {"type": "long_term", **metadata},
}
elif self.memory_type == "entities":
entity_name = self._get_agent_name()
self.memory.add(
value, user_id=entity_name, metadata={"type": "entity", **metadata}
)
params = {
"agent_id": agent_name,
"infer": False,
"metadata": {"type": "entity", **metadata},
}
elif self.memory_type == "external":
params = {
"user_id": user_id,
"agent_id": agent_name,
"metadata": {"type": "external", **metadata},
}
if params:
self.memory.add(value, **params | {"output_format": "v1.1"})
def search(
self,
@@ -84,41 +97,43 @@ class Mem0Storage(Storage):
score_threshold: float = 0.35,
) -> List[Any]:
params = {"query": query, "limit": limit}
if self.memory_type == "user":
user_id = self._get_user_id()
if user_id := self._get_user_id():
params["user_id"] = user_id
elif self.memory_type == "short_term":
agent_name = self._get_agent_name()
agent_name = self._get_agent_name()
if self.memory_type == "short_term":
params["agent_id"] = agent_name
params["metadata"] = {"type": "short_term"}
elif self.memory_type == "long_term":
agent_name = self._get_agent_name()
params["agent_id"] = agent_name
params["metadata"] = {"type": "long_term"}
elif self.memory_type == "entities":
agent_name = self._get_agent_name()
params["agent_id"] = agent_name
params["metadata"] = {"type": "entity"}
elif self.memory_type == "external":
params["agent_id"] = agent_name
params["metadata"] = {"type": "external"}
# Discard the filters for now since we create the filters
# automatically when the crew is created.
results = self.memory.search(**params)
return [r for r in results if r["score"] >= score_threshold]
def _get_user_id(self):
if self.memory_type == "user":
if hasattr(self, "memory_config") and self.memory_config is not None:
return self.memory_config.get("config", {}).get("user_id")
else:
return None
return None
def _get_user_id(self) -> str:
return self._get_config().get("user_id", "")
def _get_agent_name(self):
agents = self.crew.agents if self.crew else []
def _get_agent_name(self) -> str:
if not self.crew:
return ""
agents = self.crew.agents
agents = [self._sanitize_role(agent.role) for agent in agents]
agents = "_".join(agents)
return agents
def _get_config(self) -> Dict[str, Any]:
return self.config or getattr(self, "memory_config", {}).get("config", {}) or {}
def reset(self):
if self.memory:
self.memory.reset()
+8 -3
View File
@@ -1,3 +1,4 @@
import warnings
from typing import Any, Dict, Optional
from crewai.memory.memory import Memory
@@ -12,6 +13,12 @@ class UserMemory(Memory):
"""
def __init__(self, crew=None):
warnings.warn(
"UserMemory is deprecated and will be removed in a future version. "
"Please use ExternalMemory instead.",
DeprecationWarning,
stacklevel=2,
)
try:
from crewai.memory.storage.mem0_storage import Mem0Storage
except ImportError:
@@ -48,6 +55,4 @@ class UserMemory(Memory):
try:
self.storage.reset()
except Exception as e:
raise Exception(
f"An error occurred while resetting the user memory: {e}"
)
raise Exception(f"An error occurred while resetting the user memory: {e}")
+4 -6
View File
@@ -137,13 +137,11 @@ def CrewBase(cls: T) -> T:
all_functions, "is_cache_handler"
)
callbacks = self._filter_functions(all_functions, "is_callback")
agents = self._filter_functions(all_functions, "is_agent")
for agent_name, agent_info in self.agents_config.items():
self._map_agent_variables(
agent_name,
agent_info,
agents,
llms,
tool_functions,
cache_handler_functions,
@@ -154,7 +152,6 @@ def CrewBase(cls: T) -> T:
self,
agent_name: str,
agent_info: Dict[str, Any],
agents: Dict[str, Callable],
llms: Dict[str, Callable],
tool_functions: Dict[str, Callable],
cache_handler_functions: Dict[str, Callable],
@@ -172,9 +169,10 @@ def CrewBase(cls: T) -> T:
]
if function_calling_llm := agent_info.get("function_calling_llm"):
self.agents_config[agent_name]["function_calling_llm"] = agents[
function_calling_llm
]()
try:
self.agents_config[agent_name]["function_calling_llm"] = llms[function_calling_llm]()
except KeyError:
self.agents_config[agent_name]["function_calling_llm"] = function_calling_llm
if step_callback := agent_info.get("step_callback"):
self.agents_config[agent_name]["step_callback"] = callbacks[
+3 -1
View File
@@ -8,6 +8,7 @@ researcher:
developments in {topic}. Known for your ability to find the most relevant
information and present it in a clear and concise manner.
verbose: true
function_calling_llm: "local_llm"
reporting_analyst:
role: >
@@ -18,4 +19,5 @@ reporting_analyst:
You're a meticulous analyst with a keen eye for detail. You're known for
your ability to turn complex data into clear and concise reports, making
it easy for others to understand and act on the information you provide.
verbose: true
verbose: true
function_calling_llm: "online_llm"
+15
View File
@@ -0,0 +1,15 @@
"""Test that all public API classes are properly importable."""
def test_task_output_import():
"""Test that TaskOutput can be imported from crewai."""
from crewai import TaskOutput
assert TaskOutput is not None
def test_crew_output_import():
"""Test that CrewOutput can be imported from crewai."""
from crewai import CrewOutput
assert CrewOutput is not None
@@ -0,0 +1,652 @@
interactions:
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929ab3937d457e01-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:05:28 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=kDn7w.xxhfUOdeywOX91X.QPh7jJ.MWIdK59RMswo4I-1743537928-1.0.1.1-fsXh4ayfrGxPX9d7yv7wOTJao.R7zWidYJkbOjSnLbNrs5DIziftd8U4EkvHFafefe4dS33kmwVZZvBBsSA0iTNy8kTCh4ouZCTCBGdqiJM;
path=/; expires=Tue, 01-Apr-25 20:35:28 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=jlKaHr6Qf4Cpn7uR7FBiNw0lhnPCPxgSGLHX33FTNZY-1743537928631-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '196'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-68459c4c98-rcmtr
x-envoy-upstream-service-time:
- '165'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_4e0afe109cad076a0738b5c0cf2d3325
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929ab3965ba47dfb-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:05:28 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=5_dVmaW1w6ShSd0cQsx_6UToMPBGZYGCn4AuQqRKApI-1743537928-1.0.1.1-YIeREsG1o9zTcT.Da4V5YgMnEFTLJSubxSv2Xcrby4js5WOWsqkwEmd0mTErAR4yN_tlR_lkbq6eyVvjW4Qr9qCtlB1sdZR9q9sKHTfQTLc;
path=/; expires=Tue, 01-Apr-25 20:35:28 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=NCI5ttxt2Z4JzyWS0cwOIKu4mvXXODEDgwZ4n6e3Bw4-1743537928979-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '103'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-779fc7d87c-zw8xf
x-envoy-upstream-service-time:
- '74'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_d5345faa4b8024f93e46c9695cff0375
http_version: HTTP/1.1
status_code: 200
- request:
body: !!binary |
CtoMCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkSsQwKEgoQY3Jld2FpLnRl
bGVtZXRyeRKXCAoQm8h3kcZlX+KG8GXz4BaguxIIpiZBM32xbrMqDENyZXcgQ3JlYXRlZDABOagr
ERR8SjIYQdgDQBR8SjIYShsKDmNyZXdhaV92ZXJzaW9uEgkKBzAuMTA4LjBKGgoOcHl0aG9uX3Zl
cnNpb24SCAoGMy4xMi45Si4KCGNyZXdfa2V5EiIKIDA3YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhk
MjgzMmM2SjEKB2NyZXdfaWQSJgokY2EyZDBlMmUtMDY3NS00Yjk3LTljNGItMjllN2UxMGY3YTE5
ShwKDGNyZXdfcHJvY2VzcxIMCgpzZXF1ZW50aWFsShEKC2NyZXdfbWVtb3J5EgIQAUoaChRjcmV3
X251bWJlcl9vZl90YXNrcxICGAFKGwoVY3Jld19udW1iZXJfb2ZfYWdlbnRzEgIYAUo6ChBjcmV3
X2ZpbmdlcnByaW50EiYKJDVhYzNjN2JlLWMxZWUtNDRmYS1iMzEzLTVmMzRjODA3ZDAwYko7Chtj
cmV3X2ZpbmdlcnByaW50X2NyZWF0ZWRfYXQSHAoaMjAyNS0wNC0wMVQxNzowNTowMS45OTIwODlK
ywIKC2NyZXdfYWdlbnRzErsCCrgCW3sia2V5IjogIjAyZGYxM2UzNjcxMmFiZjUxZDIzOGZlZWJh
YjFjYTI2IiwgImlkIjogIjJiZDZmZTY1LTRkYWItNDVhYy04ZTMxLTljNzU2NThlOTdiOCIsICJy
b2xlIjogIlJlc2VhcmNoZXIiLCAidmVyYm9zZT8iOiB0cnVlLCAibWF4X2l0ZXIiOiAyNSwgIm1h
eF9ycG0iOiBudWxsLCAiZnVuY3Rpb25fY2FsbGluZ19sbG0iOiAiIiwgImxsbSI6ICJncHQtNG8i
LCAiZGVsZWdhdGlvbl9lbmFibGVkPyI6IGZhbHNlLCAiYWxsb3dfY29kZV9leGVjdXRpb24/Ijog
ZmFsc2UsICJtYXhfcmV0cnlfbGltaXQiOiAyLCAidG9vbHNfbmFtZXMiOiBbXX1dSv8BCgpjcmV3
X3Rhc2tzEvABCu0BW3sia2V5IjogIjdiNDJkZjNjM2M3NGMyMWM4OTQ4MGUwYzA3MDUzODVmIiwg
ImlkIjogIjcwMTEzZTAwLWRlN2EtNGY0Ny1iZTBmLTU2ZWE1YmFhYTA4MiIsICJhc3luY19leGVj
dXRpb24/IjogZmFsc2UsICJodW1hbl9pbnB1dD8iOiBmYWxzZSwgImFnZW50X3JvbGUiOiAiUmVz
ZWFyY2hlciIsICJhZ2VudF9rZXkiOiAiMDJkZjEzZTM2NzEyYWJmNTFkMjM4ZmVlYmFiMWNhMjYi
LCAidG9vbHNfbmFtZXMiOiBbXX1degIYAYUBAAEAABKABAoQUIi202VgKCuffOL3MDckcxIIvGhx
5lv94IYqDFRhc2sgQ3JlYXRlZDABOVDbgRR8SjIYQWjLgxR8SjIYSi4KCGNyZXdfa2V5EiIKIDA3
YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhkMjgzMmM2SjEKB2NyZXdfaWQSJgokY2EyZDBlMmUtMDY3
NS00Yjk3LTljNGItMjllN2UxMGY3YTE5Si4KCHRhc2tfa2V5EiIKIDdiNDJkZjNjM2M3NGMyMWM4
OTQ4MGUwYzA3MDUzODVmSjEKB3Rhc2tfaWQSJgokNzAxMTNlMDAtZGU3YS00ZjQ3LWJlMGYtNTZl
YTViYWFhMDgySjoKEGNyZXdfZmluZ2VycHJpbnQSJgokNWFjM2M3YmUtYzFlZS00NGZhLWIzMTMt
NWYzNGM4MDdkMDBiSjoKEHRhc2tfZmluZ2VycHJpbnQSJgokZTFiNGYwNTUtNTI4Ny00YmQ1LWJh
YzUtOGE0MjQ2M2I0OTRmSjsKG3Rhc2tfZmluZ2VycHJpbnRfY3JlYXRlZF9hdBIcChoyMDI1LTA0
LTAxVDE3OjA1OjAxLjk5MTM1NEo7ChFhZ2VudF9maW5nZXJwcmludBImCiRiM2M0ODhkOC1kOTEz
LTQ0ZTEtYWE4NC05ZWRlMmY4ZmQ1N2V6AhgBhQEAAQAA
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '1629'
Content-Type:
- application/x-protobuf
User-Agent:
- OTel-OTLP-Exporter-Python/1.31.1
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:
- Tue, 01 Apr 2025 20:05:29 GMT
status:
code: 200
message: OK
- request:
body: '{"messages": [{"role": "system", "content": "You are Researcher. You are
a researcher at a leading tech think tank.\nYour personal goal is: Search relevant
data and provide results\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: Perform a search
on specific topics.\n\nThis is the expected criteria for your final answer:
A list of relevant URLs based on the search query.\nyou MUST return the actual
complete content as the final answer, not a summary.\n\n# Useful context: \nExternal
memories:\n\n\nBegin! This is VERY important to you, use the tools available
and give your best Final Answer, your job depends on it!\n\nThought:"}], "model":
"gpt-4o", "stop": ["\nObservation:"]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '984'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHc9RXfB5Sj2QaKl5AVUIW2X08Lfc\",\n \"object\":
\"chat.completion\",\n \"created\": 1743537929,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"Thought: I now can give a great answer\\nFinal
Answer: I am unable to access external websites directly to extract URLs or
search the internet; however, I can guide you on how to search for the required
topics using search engines like Google. You would typically input your specific
query into the search engine to receive a list of URLs and content related to
your topic. Here\u2019s a step-by-step approach:\\n\\n1. Go to a search engine
like Google.\\n2. Enter your specific search query in the search bar.\\n3. Review
the search results and identify URLs that are relevant to your topic.\\n4. Click
on the links to access the actual content from those URLs.\\n\\nRemember to
use specific keywords and phrases that are closely related to your research
topic to narrow down your search results for more relevant URLs.\",\n \"refusal\":
null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\":
\"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 185,\n \"completion_tokens\":
161,\n \"total_tokens\": 346,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n
\ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929ab399fe8d7dee-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:05:31 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=Hxm6ignpjzUPY4_F0hNOxDI6blf0OOBnlpX09HJLkXw-1743537931-1.0.1.1-EnMojyC4HcsGaIfLZ3AM11JeKT5P2fCrPy4P_cEuqem7t6aJ66exdhSjbXn7cY_0WGDzFZMXOd2FiX1cdOOotV7bTaiKamm_kbxZ2AeH0DI;
path=/; expires=Tue, 01-Apr-25 20:35:31 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=0tT0dhP6be3yJlOYI.zGaiYhO_s63uZ7L9h2mjFuTUI-1743537931401-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '1966'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999788'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_868c5ea7787c0215cc80eb9106f87605
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["Thought: I now can give a great answer Final Answer: I am unable
to access external websites directly to extract URLs or search the internet;
however, I can guide you on how to search for the required topics using search
engines like Google. You would typically input your specific query into the
search engine to receive a list of URLs and content related to your topic. Here\u2019s
a step-by-step approach: 1. Go to a search engine like Google. 2. Enter your
specific search query in the search bar. 3. Review the search results and identify
URLs that are relevant to your topic. 4. Click on the links to access the actual
content from those URLs. Remember to use specific keywords and phrases that
are closely related to your research topic to narrow down your search results
for more relevant URLs."], "model": "text-embedding-3-small", "encoding_format":
"base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '883'
content-type:
- application/json
cookie:
- __cf_bm=kDn7w.xxhfUOdeywOX91X.QPh7jJ.MWIdK59RMswo4I-1743537928-1.0.1.1-fsXh4ayfrGxPX9d7yv7wOTJao.R7zWidYJkbOjSnLbNrs5DIziftd8U4EkvHFafefe4dS33kmwVZZvBBsSA0iTNy8kTCh4ouZCTCBGdqiJM;
_cfuvid=jlKaHr6Qf4Cpn7uR7FBiNw0lhnPCPxgSGLHX33FTNZY-1743537928631-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
165,\n \"total_tokens\": 165\n }\n}\n"
headers:
CF-RAY:
- 929ab3a78f7f7e01-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:05:31 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '304'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-7c6fb6444f-lqx4h
x-envoy-upstream-service-time:
- '224'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999800'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 1ms
x-request-id:
- req_19ca925c719a9aa87da5ac6e9daf0f40
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"messages": [{"role": "user", "content": "Assess the quality of the task
completed based on the description, expected output, and actual results.\n\nTask
Description:\nPerform a search on specific topics.\n\nExpected Output:\nA list
of relevant URLs based on the search query.\n\nActual Output:\nThought: I now
can give a great answer\nFinal Answer: I am unable to access external websites
directly to extract URLs or search the internet; however, I can guide you on
how to search for the required topics using search engines like Google. You
would typically input your specific query into the search engine to receive
a list of URLs and content related to your topic. Here\u2019s a step-by-step
approach:\n\n1. Go to a search engine like Google.\n2. Enter your specific search
query in the search bar.\n3. Review the search results and identify URLs that
are relevant to your topic.\n4. Click on the links to access the actual content
from those URLs.\n\nRemember to use specific keywords and phrases that are closely
related to your research topic to narrow down your search results for more relevant
URLs.\n\nPlease provide:\n- Bullet points suggestions to improve future similar
tasks\n- A score from 0 to 10 evaluating on completion, quality, and overall
performance- Entities extracted from the task output, if any, their type, description,
and relationships"}], "model": "gpt-4o", "tool_choice": {"type": "function",
"function": {"name": "TaskEvaluation"}}, "tools": [{"type": "function", "function":
{"name": "TaskEvaluation", "description": "Correctly extracted `TaskEvaluation`
with all the required parameters with correct types", "parameters": {"$defs":
{"Entity": {"properties": {"name": {"description": "The name of the entity.",
"title": "Name", "type": "string"}, "type": {"description": "The type of the
entity.", "title": "Type", "type": "string"}, "description": {"description":
"Description of the entity.", "title": "Description", "type": "string"}, "relationships":
{"description": "Relationships of the entity.", "items": {"type": "string"},
"title": "Relationships", "type": "array"}}, "required": ["name", "type", "description",
"relationships"], "title": "Entity", "type": "object"}}, "properties": {"suggestions":
{"description": "Suggestions to improve future similar tasks.", "items": {"type":
"string"}, "title": "Suggestions", "type": "array"}, "quality": {"description":
"A score from 0 to 10 evaluating on completion, quality, and overall performance,
all taking into account the task description, expected output, and the result
of the task.", "title": "Quality", "type": "number"}, "entities": {"description":
"Entities extracted from the task output.", "items": {"$ref": "#/$defs/Entity"},
"title": "Entities", "type": "array"}}, "required": ["entities", "quality",
"suggestions"], "type": "object"}}}]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '2840'
content-type:
- application/json
cookie:
- __cf_bm=Hxm6ignpjzUPY4_F0hNOxDI6blf0OOBnlpX09HJLkXw-1743537931-1.0.1.1-EnMojyC4HcsGaIfLZ3AM11JeKT5P2fCrPy4P_cEuqem7t6aJ66exdhSjbXn7cY_0WGDzFZMXOd2FiX1cdOOotV7bTaiKamm_kbxZ2AeH0DI;
_cfuvid=0tT0dhP6be3yJlOYI.zGaiYhO_s63uZ7L9h2mjFuTUI-1743537931401-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHc9UaTUKHm9gIb6VtuzFmJ3Iyr5x\",\n \"object\":
\"chat.completion\",\n \"created\": 1743537932,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n
\ \"id\": \"call_AB2zpwuaUHg5nDz8O27x9EGw\",\n \"type\":
\"function\",\n \"function\": {\n \"name\": \"TaskEvaluation\",\n
\ \"arguments\": \"{\\\"suggestions\\\":[\\\"Ensure that the system
has the capability to access external websites or clarify such limitations in
the task description.\\\",\\\"Consider using web scraping tools or APIs to fetch
URLs directly if direct access is not possible.\\\",\\\"If the task only involves
providing guidance, make sure to adjust the expectations to match the output
type.\\\",\\\"Provide a clear and realistic expected output based on the known
capabilities of the system.\\\"],\\\"quality\\\":3,\\\"entities\\\":[]}\"\n
\ }\n }\n ],\n \"refusal\": null,\n \"annotations\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 443,\n \"completion_tokens\":
87,\n \"total_tokens\": 530,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n
\ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929ab3ab8cf37dee-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:05:34 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '2114'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999672'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_0a3d97c857f26c689ef0840a21ad6dc3
http_version: HTTP/1.1
status_code: 200
version: 1
@@ -0,0 +1,650 @@
interactions:
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929abaf15acd7df9-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:30 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=JcjzeNadYektCKxz.qAt_Iu9W82BXw8zXu9IzahTzL4-1743538230-1.0.1.1-zltiq2Kl.WZlrShHKUBPQrPv0dX2jM_mrIEDEv58Na6s2GSfEgAQbiffMTPHtElo6HoDyJX5g8sjIacSnLyZSswTCjtL4C75K1IK09Or9mo;
path=/; expires=Tue, 01-Apr-25 20:40:30 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=cqy59cJ9.MxM3ogPzubxDJvueA5vj1ZPlpD5x5e3hdA-1743538230508-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '66'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-7c6fb6444f-cxmk8
x-envoy-upstream-service-time:
- '32'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_8ec9a4a21a4dda1d560d7002327e9bf5
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929abaf509b47deb-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:30 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=xm0wOFZcQAyJrMSiOz3MZOr_g5T3TyUhPvPR4mQpdeA-1743538230-1.0.1.1-kOKoGCRupMuPeKOGl9Uu0Gwt07QZKWJwMBg7JzariAfNaVs.AnqEQ__712GZsReNyqiOzUE0Qeykvt11gEEyFHX9VyyvNJcb6uHADLpyLLI;
path=/; expires=Tue, 01-Apr-25 20:40:30 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=.x6X1bgu02i.2_qawj3TiVXv0.G8azhdA2QeTcj83tY-1743538230900-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '108'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-8486ff7cdd-dskkc
x-envoy-upstream-service-time:
- '93'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_7570e7930cbf7583a5c482bc9a9829cd
http_version: HTTP/1.1
status_code: 200
- request:
body: !!binary |
CtoMCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkSsQwKEgoQY3Jld2FpLnRl
bGVtZXRyeRKXCAoQoIk4ztsSW1VcQBoGyvUEwRII42yueEHaLpkqDENyZXcgQ3JlYXRlZDABOaDB
SlvCSjIYQai+bVvCSjIYShsKDmNyZXdhaV92ZXJzaW9uEgkKBzAuMTA4LjBKGgoOcHl0aG9uX3Zl
cnNpb24SCAoGMy4xMi45Si4KCGNyZXdfa2V5EiIKIDA3YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhk
MjgzMmM2SjEKB2NyZXdfaWQSJgokMWI2YjUxZGEtMzgxMy00YjI1LTljN2EtOGM1ODkwM2NkMjk1
ShwKDGNyZXdfcHJvY2VzcxIMCgpzZXF1ZW50aWFsShEKC2NyZXdfbWVtb3J5EgIQAUoaChRjcmV3
X251bWJlcl9vZl90YXNrcxICGAFKGwoVY3Jld19udW1iZXJfb2ZfYWdlbnRzEgIYAUo6ChBjcmV3
X2ZpbmdlcnByaW50EiYKJDFjNGQ3MTZhLTA3YjktNDFjNi05NTk0LWI2ZDJmZmJiNDMxZEo7Chtj
cmV3X2ZpbmdlcnByaW50X2NyZWF0ZWRfYXQSHAoaMjAyNS0wNC0wMVQxNzoxMDowMy45NTQwNjRK
ywIKC2NyZXdfYWdlbnRzErsCCrgCW3sia2V5IjogIjAyZGYxM2UzNjcxMmFiZjUxZDIzOGZlZWJh
YjFjYTI2IiwgImlkIjogIjFmNzNlM2ZiLThmMWEtNGVjYy05ZWY0LWMxZjgxMWU3ZGQ1MyIsICJy
b2xlIjogIlJlc2VhcmNoZXIiLCAidmVyYm9zZT8iOiB0cnVlLCAibWF4X2l0ZXIiOiAyNSwgIm1h
eF9ycG0iOiBudWxsLCAiZnVuY3Rpb25fY2FsbGluZ19sbG0iOiAiIiwgImxsbSI6ICJncHQtNG8i
LCAiZGVsZWdhdGlvbl9lbmFibGVkPyI6IGZhbHNlLCAiYWxsb3dfY29kZV9leGVjdXRpb24/Ijog
ZmFsc2UsICJtYXhfcmV0cnlfbGltaXQiOiAyLCAidG9vbHNfbmFtZXMiOiBbXX1dSv8BCgpjcmV3
X3Rhc2tzEvABCu0BW3sia2V5IjogIjdiNDJkZjNjM2M3NGMyMWM4OTQ4MGUwYzA3MDUzODVmIiwg
ImlkIjogImU0OGY1MDYwLWM5MjYtNGQ3ZC04M2NhLTk4MzQ0ZDU5OGJmMyIsICJhc3luY19leGVj
dXRpb24/IjogZmFsc2UsICJodW1hbl9pbnB1dD8iOiBmYWxzZSwgImFnZW50X3JvbGUiOiAiUmVz
ZWFyY2hlciIsICJhZ2VudF9rZXkiOiAiMDJkZjEzZTM2NzEyYWJmNTFkMjM4ZmVlYmFiMWNhMjYi
LCAidG9vbHNfbmFtZXMiOiBbXX1degIYAYUBAAEAABKABAoQWFKbmOfdsTZ4sp84HAkrQRIIQ5oa
A8zScp4qDFRhc2sgQ3JlYXRlZDABOaiGoFvCSjIYQbBPolvCSjIYSi4KCGNyZXdfa2V5EiIKIDA3
YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhkMjgzMmM2SjEKB2NyZXdfaWQSJgokMWI2YjUxZGEtMzgx
My00YjI1LTljN2EtOGM1ODkwM2NkMjk1Si4KCHRhc2tfa2V5EiIKIDdiNDJkZjNjM2M3NGMyMWM4
OTQ4MGUwYzA3MDUzODVmSjEKB3Rhc2tfaWQSJgokZTQ4ZjUwNjAtYzkyNi00ZDdkLTgzY2EtOTgz
NDRkNTk4YmYzSjoKEGNyZXdfZmluZ2VycHJpbnQSJgokMWM0ZDcxNmEtMDdiOS00MWM2LTk1OTQt
YjZkMmZmYmI0MzFkSjoKEHRhc2tfZmluZ2VycHJpbnQSJgokNDY1NmIwOTctMDdkMy00Zjg2LWE1
OTgtYWQ1YmJiN2YwM2JlSjsKG3Rhc2tfZmluZ2VycHJpbnRfY3JlYXRlZF9hdBIcChoyMDI1LTA0
LTAxVDE3OjEwOjAzLjk1MjM3NUo7ChFhZ2VudF9maW5nZXJwcmludBImCiRkNGQyYzEzMy1hNmE4
LTQ5YjktYTI0OS1iNzcwNDlkZjZlZWV6AhgBhQEAAQAA
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '1629'
Content-Type:
- application/x-protobuf
User-Agent:
- OTel-OTLP-Exporter-Python/1.31.1
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:
- Tue, 01 Apr 2025 20:10:32 GMT
status:
code: 200
message: OK
- request:
body: '{"messages": [{"role": "system", "content": "You are Researcher. You are
a researcher at a leading tech think tank.\nYour personal goal is: Search relevant
data and provide results\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: Perform a search
on specific topics.\n\nThis is the expected criteria for your final answer:
A list of relevant URLs based on the search query.\nyou MUST return the actual
complete content as the final answer, not a summary.\n\n# Useful context: \nExternal
memories:\n\n\nBegin! This is VERY important to you, use the tools available
and give your best Final Answer, your job depends on it!\n\nThought:"}], "model":
"gpt-4o", "stop": ["\nObservation:"]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '984'
content-type:
- application/json
cookie:
- __cf_bm=26AntG8LjHgDcgN0MYB7TgUTXmoUsQqg8yChWws9CAE-1743538222-1.0.1.1-jo5QRov4A_6L5CaGwhXx2I2aGHzSN6wvrS5Lt2yDpcV5vfTu3FlroYl2d4LBq.ySrtNMDxGQgpsA6fMg0z4iEOXpD5DT7CrJKWRNr4H7Y_k;
_cfuvid=.HNP7WFC.O40eZMPSJZ4USQu9SYczq5v794aRx34sZg-1743538222787-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHcEJeQt9RxZ492mqpQIcZVupQH1c\",\n \"object\":
\"chat.completion\",\n \"created\": 1743538231,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"My current task is to perform a search
on specific topics and return a list of relevant URLs. I don't have access to
external internet tools to fetch live data, but I can guide on how to find information
based on specific search queries.\\n\\n1. Identify the specific topics or keywords
for the search.\\n2. Use a search engine like Google to input these keywords.\\n3.
Look for credible sources, such as academic publications, news outlets, or specialized
websites, that provide relevant and reliable information.\\n4. Compile the URLs
from credible sources that directly relate to your search query.\\n\\nThought:
I now can give a great answer\\nFinal Answer: To obtain a list of relevant URLs,
you would need to perform a live search on a search engine using the specific
keywords related to your topics of interest and collect URLs from credible sources
such as academic journals, government websites, or reputable news outlets.\",\n
\ \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\":
null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\":
185,\n \"completion_tokens\": 177,\n \"total_tokens\": 362,\n \"prompt_tokens_details\":
{\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\":
{\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929abaf84c1a7dfa-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:34 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '2937'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999788'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_c8e37cceac4fcca65da1c883d29cd816
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["My current task is to perform a search on specific topics and
return a list of relevant URLs. I don''t have access to external internet tools
to fetch live data, but I can guide on how to find information based on specific
search queries. 1. Identify the specific topics or keywords for the search.
2. Use a search engine like Google to input these keywords. 3. Look for credible
sources, such as academic publications, news outlets, or specialized websites,
that provide relevant and reliable information. 4. Compile the URLs from credible
sources that directly relate to your search query. Thought: I now can give
a great answer Final Answer: To obtain a list of relevant URLs, you would need
to perform a live search on a search engine using the specific keywords related
to your topics of interest and collect URLs from credible sources such as academic
journals, government websites, or reputable news outlets."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '995'
content-type:
- application/json
cookie:
- __cf_bm=JcjzeNadYektCKxz.qAt_Iu9W82BXw8zXu9IzahTzL4-1743538230-1.0.1.1-zltiq2Kl.WZlrShHKUBPQrPv0dX2jM_mrIEDEv58Na6s2GSfEgAQbiffMTPHtElo6HoDyJX5g8sjIacSnLyZSswTCjtL4C75K1IK09Or9mo;
_cfuvid=cqy59cJ9.MxM3ogPzubxDJvueA5vj1ZPlpD5x5e3hdA-1743538230508-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
182,\n \"total_tokens\": 182\n }\n}\n"
headers:
CF-RAY:
- 929abb0bee737df9-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:34 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '86'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-bbb94bf85-txxsl
x-envoy-upstream-service-time:
- '78'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999770'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 1ms
x-request-id:
- req_7ea6db6200478758c413eeb853e93f15
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"messages": [{"role": "user", "content": "Assess the quality of the task
completed based on the description, expected output, and actual results.\n\nTask
Description:\nPerform a search on specific topics.\n\nExpected Output:\nA list
of relevant URLs based on the search query.\n\nActual Output:\nMy current task
is to perform a search on specific topics and return a list of relevant URLs.
I don''t have access to external internet tools to fetch live data, but I can
guide on how to find information based on specific search queries.\n\n1. Identify
the specific topics or keywords for the search.\n2. Use a search engine like
Google to input these keywords.\n3. Look for credible sources, such as academic
publications, news outlets, or specialized websites, that provide relevant and
reliable information.\n4. Compile the URLs from credible sources that directly
relate to your search query.\n\nThought: I now can give a great answer\nFinal
Answer: To obtain a list of relevant URLs, you would need to perform a live
search on a search engine using the specific keywords related to your topics
of interest and collect URLs from credible sources such as academic journals,
government websites, or reputable news outlets.\n\nPlease provide:\n- Bullet
points suggestions to improve future similar tasks\n- A score from 0 to 10 evaluating
on completion, quality, and overall performance- Entities extracted from the
task output, if any, their type, description, and relationships"}], "model":
"gpt-4o", "tool_choice": {"type": "function", "function": {"name": "TaskEvaluation"}},
"tools": [{"type": "function", "function": {"name": "TaskEvaluation", "description":
"Correctly extracted `TaskEvaluation` with all the required parameters with
correct types", "parameters": {"$defs": {"Entity": {"properties": {"name": {"description":
"The name of the entity.", "title": "Name", "type": "string"}, "type": {"description":
"The type of the entity.", "title": "Type", "type": "string"}, "description":
{"description": "Description of the entity.", "title": "Description", "type":
"string"}, "relationships": {"description": "Relationships of the entity.",
"items": {"type": "string"}, "title": "Relationships", "type": "array"}}, "required":
["name", "type", "description", "relationships"], "title": "Entity", "type":
"object"}}, "properties": {"suggestions": {"description": "Suggestions to improve
future similar tasks.", "items": {"type": "string"}, "title": "Suggestions",
"type": "array"}, "quality": {"description": "A score from 0 to 10 evaluating
on completion, quality, and overall performance, all taking into account the
task description, expected output, and the result of the task.", "title": "Quality",
"type": "number"}, "entities": {"description": "Entities extracted from the
task output.", "items": {"$ref": "#/$defs/Entity"}, "title": "Entities", "type":
"array"}}, "required": ["entities", "quality", "suggestions"], "type": "object"}}}]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '2952'
content-type:
- application/json
cookie:
- __cf_bm=26AntG8LjHgDcgN0MYB7TgUTXmoUsQqg8yChWws9CAE-1743538222-1.0.1.1-jo5QRov4A_6L5CaGwhXx2I2aGHzSN6wvrS5Lt2yDpcV5vfTu3FlroYl2d4LBq.ySrtNMDxGQgpsA6fMg0z4iEOXpD5DT7CrJKWRNr4H7Y_k;
_cfuvid=.HNP7WFC.O40eZMPSJZ4USQu9SYczq5v794aRx34sZg-1743538222787-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHcEMcdhPRL3gLo2olJ4aUutrNfLv\",\n \"object\":
\"chat.completion\",\n \"created\": 1743538234,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n
\ \"id\": \"call_rzy02tsLLurMdGuEiul9lHF8\",\n \"type\":
\"function\",\n \"function\": {\n \"name\": \"TaskEvaluation\",\n
\ \"arguments\": \"{\\\"suggestions\\\":[\\\"Ensure access to the
internet or appropriate APIs to perform live searches in future tasks.\\\",\\\"Consider
simulating a response with example URLs if live search capability is unavailable.\\\",\\\"Provide
a disclaimer regarding the unavailability of live data retrieval.\\\",\\\"Indicate
clearly that the task cannot be completed as expected due to limitations.\\\"],\\\"quality\\\":3,\\\"entities\\\":[]}\"\n
\ }\n }\n ],\n \"refusal\": null,\n \"annotations\":
[]\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n
\ }\n ],\n \"usage\": {\n \"prompt_tokens\": 459,\n \"completion_tokens\":
71,\n \"total_tokens\": 530,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n
\ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929abb0f2d587dfa-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:36 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '1657'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999644'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_ff90eb4514605cbdd86933a230691b6b
http_version: HTTP/1.1
status_code: 200
version: 1
@@ -0,0 +1,836 @@
interactions:
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929abab459817e07-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:20 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=wQNqc3BNcaCzhFR4owoCJRMIvs7PWqvy7xmWaIr4k.A-1743538220-1.0.1.1-AIxSGyU_kRiSsc4DYqsunqMwAlAn0fhT.P.7_bBBWTyHeVrexxOSRpm5yj6QmiIVcYwEgdJqk9EsHBy9LfadhgMJ5w8LIrHF_sxBFAXOOxc;
path=/; expires=Tue, 01-Apr-25 20:40:20 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=g5w7.LJsKZSYhPzW6M1n.OyrMWQSUF5zX.cFK1vZrQI-1743538220809-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '308'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-68459c4c98-bfmcm
x-envoy-upstream-service-time:
- '243'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_51cfe3e45d22af953af55f6708e77623
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["Perform a search on specific topics."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '115'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
7,\n \"total_tokens\": 7\n }\n}\n"
headers:
CF-RAY:
- 929abab86d4a7e1b-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:21 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=MCDkRAmvHC26iz7BEoKzXwq4j5v_FEX5IQepnW5ARp4-1743538221-1.0.1.1-GXJkwk8HCFy9W0tA9R.s3NWzCNJ7wCiaUFu4YCbra4nQNVJa_mN3jdnmfREeET4QfWbYGCQXuM5GHffwtQZ_W1EV3mUC4JFa3w5CCDqO41Y;
path=/; expires=Tue, 01-Apr-25 20:40:21 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=mRF3.ZghYObsvTKqmSfcqSbJFV0SBPVk2Psc.9DVGlE-1743538221434-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '156'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-7c6fb6444f-m8b65
x-envoy-upstream-service-time:
- '132'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999991'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_463b788a4cc327763e9544976b2fe7ce
http_version: HTTP/1.1
status_code: 200
- request:
body: !!binary |
CtoMCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkSsQwKEgoQY3Jld2FpLnRl
bGVtZXRyeRKXCAoQllrSJs4siWPoysCAkdyzdhIIeP9LvWGg1D0qDENyZXcgQ3JlYXRlZDABOeAu
xRLASjIYQUh77RLASjIYShsKDmNyZXdhaV92ZXJzaW9uEgkKBzAuMTA4LjBKGgoOcHl0aG9uX3Zl
cnNpb24SCAoGMy4xMi45Si4KCGNyZXdfa2V5EiIKIDA3YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhk
MjgzMmM2SjEKB2NyZXdfaWQSJgokOWUwNDE3NDgtZTg2MS00M2YzLWE4ZTYtMTA4N2I3NjA1MTE1
ShwKDGNyZXdfcHJvY2VzcxIMCgpzZXF1ZW50aWFsShEKC2NyZXdfbWVtb3J5EgIQAUoaChRjcmV3
X251bWJlcl9vZl90YXNrcxICGAFKGwoVY3Jld19udW1iZXJfb2ZfYWdlbnRzEgIYAUo6ChBjcmV3
X2ZpbmdlcnByaW50EiYKJDlhODQwMjI3LTQwY2UtNDU4OC1iYTAzLTBlYzZlMjQzMDdjMUo7Chtj
cmV3X2ZpbmdlcnByaW50X2NyZWF0ZWRfYXQSHAoaMjAyNS0wNC0wMVQxNzowOTo1NC4xMzIwMzlK
ywIKC2NyZXdfYWdlbnRzErsCCrgCW3sia2V5IjogIjAyZGYxM2UzNjcxMmFiZjUxZDIzOGZlZWJh
YjFjYTI2IiwgImlkIjogImNlMjE2ZTU4LTY1MDgtNDQ0My1iZTY0LWUwNzVhNTQ5YzMzZCIsICJy
b2xlIjogIlJlc2VhcmNoZXIiLCAidmVyYm9zZT8iOiB0cnVlLCAibWF4X2l0ZXIiOiAyNSwgIm1h
eF9ycG0iOiBudWxsLCAiZnVuY3Rpb25fY2FsbGluZ19sbG0iOiAiIiwgImxsbSI6ICJncHQtNG8i
LCAiZGVsZWdhdGlvbl9lbmFibGVkPyI6IGZhbHNlLCAiYWxsb3dfY29kZV9leGVjdXRpb24/Ijog
ZmFsc2UsICJtYXhfcmV0cnlfbGltaXQiOiAyLCAidG9vbHNfbmFtZXMiOiBbXX1dSv8BCgpjcmV3
X3Rhc2tzEvABCu0BW3sia2V5IjogIjdiNDJkZjNjM2M3NGMyMWM4OTQ4MGUwYzA3MDUzODVmIiwg
ImlkIjogImVmMDNjMDliLTIwNGQtNGU2Yy04NDIwLTQyNmNmOWM4OGFmYyIsICJhc3luY19leGVj
dXRpb24/IjogZmFsc2UsICJodW1hbl9pbnB1dD8iOiBmYWxzZSwgImFnZW50X3JvbGUiOiAiUmVz
ZWFyY2hlciIsICJhZ2VudF9rZXkiOiAiMDJkZjEzZTM2NzEyYWJmNTFkMjM4ZmVlYmFiMWNhMjYi
LCAidG9vbHNfbmFtZXMiOiBbXX1degIYAYUBAAEAABKABAoQZo4JZzOQlEm7ZP/lMPxN9hIIymaC
IpHXF4cqDFRhc2sgQ3JlYXRlZDABObhUIRPASjIYQQgSIxPASjIYSi4KCGNyZXdfa2V5EiIKIDA3
YTcxNzY4Y2M0YzkzZWFiM2IzMWUzYzhkMjgzMmM2SjEKB2NyZXdfaWQSJgokOWUwNDE3NDgtZTg2
MS00M2YzLWE4ZTYtMTA4N2I3NjA1MTE1Si4KCHRhc2tfa2V5EiIKIDdiNDJkZjNjM2M3NGMyMWM4
OTQ4MGUwYzA3MDUzODVmSjEKB3Rhc2tfaWQSJgokZWYwM2MwOWItMjA0ZC00ZTZjLTg0MjAtNDI2
Y2Y5Yzg4YWZjSjoKEGNyZXdfZmluZ2VycHJpbnQSJgokOWE4NDAyMjctNDBjZS00NTg4LWJhMDMt
MGVjNmUyNDMwN2MxSjoKEHRhc2tfZmluZ2VycHJpbnQSJgokNzcwMDBjZjktZjVlNC00MDJhLTg1
MTgtNzFhMzZhZTc2MmQwSjsKG3Rhc2tfZmluZ2VycHJpbnRfY3JlYXRlZF9hdBIcChoyMDI1LTA0
LTAxVDE3OjA5OjU0LjEzMTE4NUo7ChFhZ2VudF9maW5nZXJwcmludBImCiQ0Y2Y4OTc4Yy1iN2M4
LTRiMjUtODYxMC1lNWE4NmMxOTYwNzB6AhgBhQEAAQAA
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
Content-Length:
- '1629'
Content-Type:
- application/x-protobuf
User-Agent:
- OTel-OTLP-Exporter-Python/1.31.1
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:
- Tue, 01 Apr 2025 20:10:22 GMT
status:
code: 200
message: OK
- request:
body: '{"messages": [{"role": "system", "content": "You are Researcher. You are
a researcher at a leading tech think tank.\nYour personal goal is: Search relevant
data and provide results\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: Perform a search
on specific topics.\n\nThis is the expected criteria for your final answer:
A list of relevant URLs based on the search query.\nyou MUST return the actual
complete content as the final answer, not a summary.\n\n# Useful context: \nExternal
memories:\n\n\nBegin! This is VERY important to you, use the tools available
and give your best Final Answer, your job depends on it!\n\nThought:"}], "model":
"gpt-4o", "stop": ["\nObservation:"]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '984'
content-type:
- application/json
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHcE9342OpU72PR82mknhgcVzhK5H\",\n \"object\":
\"chat.completion\",\n \"created\": 1743538221,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": \"Thought: I need to gather relevant URLs
based on the search query provided in order to fulfill the task requirements.\\n\\nFinal
Answer: The search query or topics were not specified. Please provide specific
topics or search query to perform a search for relevant URLs.\",\n \"refusal\":
null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\":
\"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 185,\n \"completion_tokens\":
50,\n \"total_tokens\": 235,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n
\ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929ababcdf9c7dfa-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:22 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=26AntG8LjHgDcgN0MYB7TgUTXmoUsQqg8yChWws9CAE-1743538222-1.0.1.1-jo5QRov4A_6L5CaGwhXx2I2aGHzSN6wvrS5Lt2yDpcV5vfTu3FlroYl2d4LBq.ySrtNMDxGQgpsA6fMg0z4iEOXpD5DT7CrJKWRNr4H7Y_k;
path=/; expires=Tue, 01-Apr-25 20:40:22 GMT; domain=.api.openai.com; HttpOnly;
Secure; SameSite=None
- _cfuvid=.HNP7WFC.O40eZMPSJZ4USQu9SYczq5v794aRx34sZg-1743538222787-0.0.1.1-604800000;
path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '860'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999788'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_bf03af6c68765e4393cb60521c5d99ec
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["Thought: I need to gather relevant URLs based on the search
query provided in order to fulfill the task requirements. Final Answer: The
search query or topics were not specified. Please provide specific topics or
search query to perform a search for relevant URLs."], "model": "text-embedding-3-small",
"encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '344'
content-type:
- application/json
cookie:
- __cf_bm=wQNqc3BNcaCzhFR4owoCJRMIvs7PWqvy7xmWaIr4k.A-1743538220-1.0.1.1-AIxSGyU_kRiSsc4DYqsunqMwAlAn0fhT.P.7_bBBWTyHeVrexxOSRpm5yj6QmiIVcYwEgdJqk9EsHBy9LfadhgMJ5w8LIrHF_sxBFAXOOxc;
_cfuvid=g5w7.LJsKZSYhPzW6M1n.OyrMWQSUF5zX.cFK1vZrQI-1743538220809-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
50,\n \"total_tokens\": 50\n }\n}\n"
headers:
CF-RAY:
- 929abac4a8fc7e07-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:24 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '1403'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-69ff67f767-88tkx
x-envoy-upstream-service-time:
- '1369'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999934'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_5a1b9f49c2d200641e58e8cd95ef063a
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"messages": [{"role": "user", "content": "Assess the quality of the task
completed based on the description, expected output, and actual results.\n\nTask
Description:\nPerform a search on specific topics.\n\nExpected Output:\nA list
of relevant URLs based on the search query.\n\nActual Output:\nThought: I need
to gather relevant URLs based on the search query provided in order to fulfill
the task requirements.\n\nFinal Answer: The search query or topics were not
specified. Please provide specific topics or search query to perform a search
for relevant URLs.\n\nPlease provide:\n- Bullet points suggestions to improve
future similar tasks\n- A score from 0 to 10 evaluating on completion, quality,
and overall performance- Entities extracted from the task output, if any, their
type, description, and relationships"}], "model": "gpt-4o", "tool_choice": {"type":
"function", "function": {"name": "TaskEvaluation"}}, "tools": [{"type": "function",
"function": {"name": "TaskEvaluation", "description": "Correctly extracted `TaskEvaluation`
with all the required parameters with correct types", "parameters": {"$defs":
{"Entity": {"properties": {"name": {"description": "The name of the entity.",
"title": "Name", "type": "string"}, "type": {"description": "The type of the
entity.", "title": "Type", "type": "string"}, "description": {"description":
"Description of the entity.", "title": "Description", "type": "string"}, "relationships":
{"description": "Relationships of the entity.", "items": {"type": "string"},
"title": "Relationships", "type": "array"}}, "required": ["name", "type", "description",
"relationships"], "title": "Entity", "type": "object"}}, "properties": {"suggestions":
{"description": "Suggestions to improve future similar tasks.", "items": {"type":
"string"}, "title": "Suggestions", "type": "array"}, "quality": {"description":
"A score from 0 to 10 evaluating on completion, quality, and overall performance,
all taking into account the task description, expected output, and the result
of the task.", "title": "Quality", "type": "number"}, "entities": {"description":
"Entities extracted from the task output.", "items": {"$ref": "#/$defs/Entity"},
"title": "Entities", "type": "array"}}, "required": ["entities", "quality",
"suggestions"], "type": "object"}}}]}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '2295'
content-type:
- application/json
cookie:
- __cf_bm=26AntG8LjHgDcgN0MYB7TgUTXmoUsQqg8yChWws9CAE-1743538222-1.0.1.1-jo5QRov4A_6L5CaGwhXx2I2aGHzSN6wvrS5Lt2yDpcV5vfTu3FlroYl2d4LBq.ySrtNMDxGQgpsA6fMg0z4iEOXpD5DT7CrJKWRNr4H7Y_k;
_cfuvid=.HNP7WFC.O40eZMPSJZ4USQu9SYczq5v794aRx34sZg-1743538222787-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-raw-response:
- 'true'
x-stainless-read-timeout:
- '600.0'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/chat/completions
response:
content: "{\n \"id\": \"chatcmpl-BHcEDk89V0nWfSxs0BaUsqqVYrVxj\",\n \"object\":
\"chat.completion\",\n \"created\": 1743538225,\n \"model\": \"gpt-4o-2024-08-06\",\n
\ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\":
\"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n
\ \"id\": \"call_39zVeoea7WZ0hceVZTcAut7Z\",\n \"type\":
\"function\",\n \"function\": {\n \"name\": \"TaskEvaluation\",\n
\ \"arguments\": \"{\\\"suggestions\\\":[\\\"Ensure that the search
query or specific topics are provided before starting the task.\\\",\\\"Implement
error handling to provide more useful output or alternatives when input is insufficient.\\\",\\\"Provide
a fallback or a default set of topics in case none are provided.\\\",\\\"Clarify
task requirements with stakeholders if the input parameters are unclear.\\\"],\\\"quality\\\":2,\\\"entities\\\":[{\\\"name\\\":\\\"search
query\\\",\\\"type\\\":\\\"Requirement\\\",\\\"description\\\":\\\"A parameter
needed to perform the search operation.\\\",\\\"relationships\\\":[\\\"Without
this entity, the task cannot be completed.\\\"]},{\\\"name\\\":\\\"URLs\\\",\\\"type\\\":\\\"Output\\\",\\\"description\\\":\\\"The
expected result from executing the search.\\\",\\\"relationships\\\":[\\\"Expected
output when the search query is provided.\\\"]}]}\"\n }\n }\n
\ ],\n \"refusal\": null,\n \"annotations\": []\n },\n
\ \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n
\ \"usage\": {\n \"prompt_tokens\": 332,\n \"completion_tokens\": 137,\n
\ \"total_tokens\": 469,\n \"prompt_tokens_details\": {\n \"cached_tokens\":
0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n
\ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\":
0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\":
\"default\",\n \"system_fingerprint\": \"fp_898ac29719\"\n}\n"
headers:
CF-RAY:
- 929abad21a6b7dfa-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:27 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '2597'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
x-ratelimit-limit-requests:
- '50000'
x-ratelimit-limit-tokens:
- '150000000'
x-ratelimit-remaining-requests:
- '49999'
x-ratelimit-remaining-tokens:
- '149999807'
x-ratelimit-reset-requests:
- 1ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_a5c36be883759cbc3fec575604f8746e
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["search query(Requirement): A parameter needed to perform the
search operation."], "model": "text-embedding-3-small", "encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '157'
content-type:
- application/json
cookie:
- __cf_bm=MCDkRAmvHC26iz7BEoKzXwq4j5v_FEX5IQepnW5ARp4-1743538221-1.0.1.1-GXJkwk8HCFy9W0tA9R.s3NWzCNJ7wCiaUFu4YCbra4nQNVJa_mN3jdnmfREeET4QfWbYGCQXuM5GHffwtQZ_W1EV3mUC4JFa3w5CCDqO41Y;
_cfuvid=mRF3.ZghYObsvTKqmSfcqSbJFV0SBPVk2Psc.9DVGlE-1743538221434-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
14,\n \"total_tokens\": 14\n }\n}\n"
headers:
CF-RAY:
- 929abae38c117df4-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:28 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '557'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-d44cf9799-vc45q
x-envoy-upstream-service-time:
- '531'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999980'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_91c495419e7c55b5f7396854da1588bc
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"input": ["URLs(Output): The expected result from executing the search."],
"model": "text-embedding-3-small", "encoding_format": "base64"}'
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate
connection:
- keep-alive
content-length:
- '139'
content-type:
- application/json
cookie:
- __cf_bm=MCDkRAmvHC26iz7BEoKzXwq4j5v_FEX5IQepnW5ARp4-1743538221-1.0.1.1-GXJkwk8HCFy9W0tA9R.s3NWzCNJ7wCiaUFu4YCbra4nQNVJa_mN3jdnmfREeET4QfWbYGCQXuM5GHffwtQZ_W1EV3mUC4JFa3w5CCDqO41Y;
_cfuvid=mRF3.ZghYObsvTKqmSfcqSbJFV0SBPVk2Psc.9DVGlE-1743538221434-0.0.1.1-604800000
host:
- api.openai.com
user-agent:
- OpenAI/Python 1.68.2
x-stainless-arch:
- x64
x-stainless-async:
- 'false'
x-stainless-lang:
- python
x-stainless-os:
- MacOS
x-stainless-package-version:
- 1.68.2
x-stainless-read-timeout:
- '600'
x-stainless-retry-count:
- '0'
x-stainless-runtime:
- CPython
x-stainless-runtime-version:
- 3.12.9
method: POST
uri: https://api.openai.com/v1/embeddings
response:
content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\":
\"embedding\",\n \"index\": 0,\n \"embedding\": \"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 truncated
\ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\":
12,\n \"total_tokens\": 12\n }\n}\n"
headers:
CF-RAY:
- 929abae938887df4-GRU
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Apr 2025 20:10:29 GMT
Server:
- cloudflare
Transfer-Encoding:
- chunked
X-Content-Type-Options:
- nosniff
access-control-allow-origin:
- '*'
access-control-expose-headers:
- X-Request-ID
alt-svc:
- h3=":443"; ma=86400
cf-cache-status:
- DYNAMIC
openai-model:
- text-embedding-3-small
openai-organization:
- crewai-iuxna1
openai-processing-ms:
- '199'
openai-version:
- '2020-10-01'
strict-transport-security:
- max-age=31536000; includeSubDomains; preload
via:
- envoy-router-f47df6cdf-hhnd7
x-envoy-upstream-service-time:
- '105'
x-ratelimit-limit-requests:
- '10000'
x-ratelimit-limit-tokens:
- '10000000'
x-ratelimit-remaining-requests:
- '9999'
x-ratelimit-remaining-tokens:
- '9999984'
x-ratelimit-reset-requests:
- 6ms
x-ratelimit-reset-tokens:
- 0s
x-request-id:
- req_cfdd836532f45e9c2f03d332153438f6
http_version: HTTP/1.1
status_code: 200
version: 1
File diff suppressed because it is too large. Load diff
+180
View File
@@ -0,0 +1,180 @@
from unittest.mock import MagicMock, patch
import pytest
from mem0.memory.main import Memory
from crewai.agent import Agent
from crewai.crew import Crew, Process
from crewai.memory.external.external_memory import ExternalMemory
from crewai.memory.external.external_memory_item import ExternalMemoryItem
from crewai.memory.storage.interface import Storage
from crewai.task import Task
@pytest.fixture
def mock_mem0_memory():
mock_memory = MagicMock(spec=Memory)
return mock_memory
@pytest.fixture
def patch_configure_mem0(mock_mem0_memory):
with patch(
"crewai.memory.external.external_memory.ExternalMemory._configure_mem0",
return_value=mock_mem0_memory,
) as mocked:
yield mocked
@pytest.fixture
def external_memory_with_mocked_config(patch_configure_mem0):
embedder_config = {"provider": "mem0"}
external_memory = ExternalMemory(embedder_config=embedder_config)
return external_memory
@pytest.fixture
def crew_with_external_memory(external_memory_with_mocked_config, patch_configure_mem0):
agent = Agent(
role="Researcher",
goal="Search relevant data and provide results",
backstory="You are a researcher at a leading tech think tank.",
tools=[],
verbose=True,
)
task = Task(
description="Perform a search on specific topics.",
expected_output="A list of relevant URLs based on the search query.",
agent=agent,
)
crew = Crew(
agents=[agent],
tasks=[task],
verbose=True,
process=Process.sequential,
memory=True,
external_memory=external_memory_with_mocked_config,
)
return crew
def test_external_memory_initialization(external_memory_with_mocked_config):
assert external_memory_with_mocked_config is not None
assert isinstance(external_memory_with_mocked_config, ExternalMemory)
def test_external_memory_save(external_memory_with_mocked_config):
memory_item = ExternalMemoryItem(
value="test value", metadata={"task": "test_task"}, agent="test_agent"
)
with patch.object(ExternalMemory, "save") as mock_save:
external_memory_with_mocked_config.save(
value=memory_item.value,
metadata=memory_item.metadata,
agent=memory_item.agent,
)
mock_save.assert_called_once_with(
value=memory_item.value,
metadata=memory_item.metadata,
agent=memory_item.agent,
)
def test_external_memory_reset(external_memory_with_mocked_config):
with patch(
"crewai.memory.external.external_memory.ExternalMemory.reset"
) as mock_reset:
external_memory_with_mocked_config.reset()
mock_reset.assert_called_once()
def test_external_memory_supported_storages():
supported_storages = ExternalMemory.external_supported_storages()
assert "mem0" in supported_storages
assert callable(supported_storages["mem0"])
def test_external_memory_create_storage_invalid_provider():
embedder_config = {"provider": "invalid_provider", "config": {}}
with pytest.raises(ValueError, match="Provider invalid_provider not supported"):
ExternalMemory.create_storage(None, embedder_config)
def test_external_memory_create_storage_missing_provider():
embedder_config = {"config": {}}
with pytest.raises(
ValueError, match="embedder_config must include a 'provider' key"
):
ExternalMemory.create_storage(None, embedder_config)
def test_external_memory_create_storage_missing_config():
with pytest.raises(ValueError, match="embedder_config is required"):
ExternalMemory.create_storage(None, None)
def test_crew_with_external_memory_initialization(crew_with_external_memory):
assert crew_with_external_memory._external_memory is not None
assert isinstance(crew_with_external_memory._external_memory, ExternalMemory)
assert crew_with_external_memory._external_memory.crew == crew_with_external_memory
@pytest.mark.parametrize("mem_type", ["external", "all"])
def test_crew_external_memory_reset(mem_type, crew_with_external_memory):
with patch(
"crewai.memory.external.external_memory.ExternalMemory.reset"
) as mock_reset:
crew_with_external_memory.reset_memories(mem_type)
mock_reset.assert_called_once()
@pytest.mark.parametrize("mem_method", ["search", "save"])
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_external_memory_save(mem_method, crew_with_external_memory):
with patch(
f"crewai.memory.external.external_memory.ExternalMemory.{mem_method}"
) as mock_method:
crew_with_external_memory.kickoff()
assert mock_method.call_count > 0
def test_external_memory_custom_storage(crew_with_external_memory):
class CustomStorage(Storage):
def __init__(self):
self.memories = []
def save(self, value, metadata=None, agent=None):
self.memories.append({"value": value, "metadata": metadata, "agent": agent})
def search(self, query, limit=10, score_threshold=0.5):
return self.memories
def reset(self):
self.memories = []
custom_storage = CustomStorage()
external_memory = ExternalMemory(storage=custom_storage)
# by ensuring the crew is set, we can test that the storage is used
external_memory.set_crew(crew_with_external_memory)
test_value = "test value"
test_metadata = {"source": "test"}
test_agent = "test_agent"
external_memory.save(value=test_value, metadata=test_metadata, agent=test_agent)
results = external_memory.search("test")
assert len(results) == 1
assert results[0]["value"] == test_value
assert results[0]["metadata"] == test_metadata | {"agent": test_agent}
external_memory.reset()
results = external_memory.search("test")
assert len(results) == 0
+31 -1
View File
@@ -2,7 +2,16 @@ import pytest
from crewai.agent import Agent
from crewai.crew import Crew
from crewai.project import CrewBase, after_kickoff, agent, before_kickoff, crew, task
from crewai.llm import LLM
from crewai.project import (
CrewBase,
after_kickoff,
agent,
before_kickoff,
crew,
llm,
task,
)
from crewai.task import Task
@@ -31,6 +40,13 @@ class InternalCrew:
agents_config = "config/agents.yaml"
tasks_config = "config/tasks.yaml"
@llm
def local_llm(self):
return LLM(
model='openai/model_name',
api_key="None",
base_url="http://xxx.xxx.xxx.xxx:8000/v1")
@agent
def researcher(self):
return Agent(config=self.agents_config["researcher"])
@@ -105,6 +121,20 @@ def test_task_name():
), "Custom task name is not being set as expected"
def test_agent_function_calling_llm():
crew = InternalCrew()
llm = crew.local_llm()
obj_llm_agent = crew.researcher()
assert (
obj_llm_agent.function_calling_llm is llm
), "agent's function_calling_llm is incorrect"
str_llm_agent = crew.reporting_analyst()
assert (
str_llm_agent.function_calling_llm.model == "online_llm"
), "agent's function_calling_llm is incorrect"
@pytest.mark.vcr(filter_headers=["authorization"])
def test_before_kickoff_modification():
crew = InternalCrew()
+70 -29
View File
@@ -29,41 +29,32 @@ def mem0_storage_with_mocked_config(mock_mem0_memory):
"""Fixture to create a Mem0Storage instance with mocked dependencies"""
# Patch the Memory class to return our mock
with patch('mem0.memory.main.Memory.from_config', return_value=mock_mem0_memory):
with patch("mem0.memory.main.Memory.from_config", return_value=mock_mem0_memory):
config = {
"vector_store": {
"provider": "mock_vector_store",
"config": {
"host": "localhost",
"port": 6333
}
"config": {"host": "localhost", "port": 6333},
},
"llm": {
"provider": "mock_llm",
"config": {
"api_key": "mock-api-key",
"model": "mock-model"
}
"config": {"api_key": "mock-api-key", "model": "mock-model"},
},
"embedder": {
"provider": "mock_embedder",
"config": {
"api_key": "mock-api-key",
"model": "mock-model"
}
"config": {"api_key": "mock-api-key", "model": "mock-model"},
},
"graph_store": {
"provider": "mock_graph_store",
"config": {
"url": "mock-url",
"username": "mock-user",
"password": "mock-password"
}
"password": "mock-password",
},
},
"history_db_path": "/mock/path",
"version": "test-version",
"custom_fact_extraction_prompt": "mock prompt 1",
"custom_update_memory_prompt": "mock prompt 2"
"custom_update_memory_prompt": "mock prompt 2",
}
# Instantiate the class with memory_config
@@ -92,23 +83,73 @@ def mock_mem0_memory_client():
@pytest.fixture
def mem0_storage_with_memory_client(mock_mem0_memory_client):
def mem0_storage_with_memory_client_using_config_from_crew(mock_mem0_memory_client):
"""Fixture to create a Mem0Storage instance with mocked dependencies"""
# We need to patch the MemoryClient before it's instantiated
with patch.object(MemoryClient, '__new__', return_value=mock_mem0_memory_client):
crew = MockCrew(
memory_config={
"provider": "mem0",
"config": {"user_id": "test_user", "api_key": "ABCDEFGH", "org_id": "my_org_id", "project_id": "my_project_id"},
}
)
with patch.object(MemoryClient, "__new__", return_value=mock_mem0_memory_client):
crew = MockCrew(
memory_config={
"provider": "mem0",
"config": {
"user_id": "test_user",
"api_key": "ABCDEFGH",
"org_id": "my_org_id",
"project_id": "my_project_id",
},
}
)
mem0_storage = Mem0Storage(type="short_term", crew=crew)
return mem0_storage
mem0_storage = Mem0Storage(type="short_term", crew=crew)
return mem0_storage
def test_mem0_storage_with_memory_client_initialization(mem0_storage_with_memory_client, mock_mem0_memory_client):
@pytest.fixture
def mem0_storage_with_memory_client_using_explictly_config(mock_mem0_memory_client):
"""Fixture to create a Mem0Storage instance with mocked dependencies"""
# We need to patch the MemoryClient before it's instantiated
with patch.object(MemoryClient, "__new__", return_value=mock_mem0_memory_client):
crew = MockCrew(
memory_config={
"provider": "mem0",
"config": {
"user_id": "test_user",
"api_key": "ABCDEFGH",
"org_id": "my_org_id",
"project_id": "my_project_id",
},
}
)
new_config = {"provider": "mem0", "config": {"api_key": "new-api-key"}}
mem0_storage = Mem0Storage(type="short_term", crew=crew, config=new_config)
return mem0_storage
def test_mem0_storage_with_memory_client_initialization(
mem0_storage_with_memory_client_using_config_from_crew, mock_mem0_memory_client
):
"""Test Mem0Storage initialization with MemoryClient"""
assert mem0_storage_with_memory_client.memory_type == "short_term"
assert mem0_storage_with_memory_client.memory is mock_mem0_memory_client
assert (
mem0_storage_with_memory_client_using_config_from_crew.memory_type
== "short_term"
)
assert (
mem0_storage_with_memory_client_using_config_from_crew.memory
is mock_mem0_memory_client
)
def test_mem0_storage_with_explict_config(
mem0_storage_with_memory_client_using_explictly_config,
):
expected_config = {"provider": "mem0", "config": {"api_key": "new-api-key"}}
assert (
mem0_storage_with_memory_client_using_explictly_config.config == expected_config
)
assert (
mem0_storage_with_memory_client_using_explictly_config.memory_config
== expected_config
)