tests: cassettes, threading for flow tests

This commit is contained in:
Greyson LaLonde
2025-10-21 13:48:21 -04:00
committed by GitHub
parent 01d8c189f0
commit f3a63be215
9 changed files with 5399 additions and 175 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1032,4 +1032,621 @@ interactions:
- req_e1e95e8f654254ef093113417ba6ab00
http_version: HTTP/1.1
status_code: 200
- request:
body: '{"trace_id": "c5146cc4-dcff-45cc-a71a-b82a83b7de73", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T17:02:41.380299+00:00"},
"ephemeral_trace_id": "c5146cc4-dcff-45cc-a71a-b82a83b7de73"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"ad4ac66f-7511-444c-aec3-a8c711ab4f54","ephemeral_trace_id":"c5146cc4-dcff-45cc-a71a-b82a83b7de73","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T17:02:41.683Z","updated_at":"2025-10-21T17:02:41.683Z","access_code":"TRACE-41ea39cb70","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 17:02:41 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"b46640957517118b3255a25e8f00184d"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 0590a968-276d-4342-85bb-0e488cf4f6bc
x-runtime:
- '0.073020'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
- request:
body: '{"events": [{"event_id": "ad62c6f4-6367-452c-bd91-5d3153e2e20a", "timestamp":
"2025-10-21T17:02:41.379061+00:00", "type": "crew_kickoff_started", "event_data":
{"timestamp": "2025-10-21T17:02:41.379061+00:00", "type": "crew_kickoff_started",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "inputs": null}}, {"event_id": "19c1acad-fa5b-4dc8-933b-bfc9036ce2eb",
"timestamp": "2025-10-21T17:02:41.381894+00:00", "type": "task_started", "event_data":
{"task_description": "Research a topic to teach a kid aged 6 about math.", "expected_output":
"A topic, explanation, angle, and examples.", "task_name": "Research a topic
to teach a kid aged 6 about math.", "context": "", "agent_role": "Researcher",
"task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13"}}, {"event_id": "a9c2bbc4-778e-4a5d-bda5-148f015e5fbe",
"timestamp": "2025-10-21T17:02:41.382167+00:00", "type": "memory_query_started",
"event_data": {"timestamp": "2025-10-21T17:02:41.382167+00:00", "type": "memory_query_started",
"source_fingerprint": null, "source_type": "long_term_memory", "fingerprint_metadata":
null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research
a topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "query":
"Research a topic to teach a kid aged 6 about math.", "limit": 2, "score_threshold":
null}}, {"event_id": "d946752e-87f1-496f-b26b-a4e1aaf58d49", "timestamp": "2025-10-21T17:02:41.382357+00:00",
"type": "memory_query_completed", "event_data": {"timestamp": "2025-10-21T17:02:41.382357+00:00",
"type": "memory_query_completed", "source_fingerprint": null, "source_type":
"long_term_memory", "fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "query": "Research a topic to teach a kid aged 6 about
math.", "results": null, "limit": 2, "score_threshold": null, "query_time_ms":
0.1468658447265625}}, {"event_id": "fec95c3e-6020-4ca5-9c8a-76d8fe2e69fc", "timestamp":
"2025-10-21T17:02:41.382390+00:00", "type": "memory_query_started", "event_data":
{"timestamp": "2025-10-21T17:02:41.382390+00:00", "type": "memory_query_started",
"source_fingerprint": null, "source_type": "short_term_memory", "fingerprint_metadata":
null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research
a topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "query":
"Research a topic to teach a kid aged 6 about math.", "limit": 5, "score_threshold":
0.6}}, {"event_id": "b4d9b241-3336-4e5b-902b-46ef4aff3a95", "timestamp": "2025-10-21T17:02:41.532761+00:00",
"type": "memory_query_completed", "event_data": {"timestamp": "2025-10-21T17:02:41.532761+00:00",
"type": "memory_query_completed", "source_fingerprint": null, "source_type":
"short_term_memory", "fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "query": "Research a topic to teach a kid aged 6 about
math.", "results": [], "limit": 5, "score_threshold": 0.6, "query_time_ms":
150.346040725708}}, {"event_id": "ede0e589-9609-4b27-ac6d-f02ab5d118c0", "timestamp":
"2025-10-21T17:02:41.532803+00:00", "type": "memory_query_started", "event_data":
{"timestamp": "2025-10-21T17:02:41.532803+00:00", "type": "memory_query_started",
"source_fingerprint": null, "source_type": "entity_memory", "fingerprint_metadata":
null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research
a topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "query":
"Research a topic to teach a kid aged 6 about math.", "limit": 5, "score_threshold":
0.6}}, {"event_id": "feca316d-4c1a-4502-bb73-e190b0ed3fee", "timestamp": "2025-10-21T17:02:41.539391+00:00",
"type": "memory_query_completed", "event_data": {"timestamp": "2025-10-21T17:02:41.539391+00:00",
"type": "memory_query_completed", "source_fingerprint": null, "source_type":
"entity_memory", "fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "query": "Research a topic to teach a kid aged 6 about
math.", "results": [], "limit": 5, "score_threshold": 0.6, "query_time_ms":
6.557941436767578}}, {"event_id": "c1d5f664-11bd-4d53-a250-bf998f28feb1", "timestamp":
"2025-10-21T17:02:41.539868+00:00", "type": "agent_execution_started", "event_data":
{"agent_role": "Researcher", "agent_goal": "You research about math.", "agent_backstory":
"You''re an expert in research and you love to learn new things."}}, {"event_id":
"72160300-cf34-4697-92c5-e19f9bb7aced", "timestamp": "2025-10-21T17:02:41.540118+00:00",
"type": "llm_call_started", "event_data": {"timestamp": "2025-10-21T17:02:41.540118+00:00",
"type": "llm_call_started", "source_fingerprint": null, "source_type": null,
"fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "model": "gpt-4o-mini", "messages": [{"role": "system",
"content": "You are Researcher. You''re an expert in research and you love to
learn new things.\nYour personal goal is: You research about math.\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: Research a topic to teach a kid aged 6 about math.\n\nThis
is the expected criteria for your final answer: A topic, explanation, angle,
and examples.\nyou MUST return the actual complete content as the final answer,
not a summary.\n\nYou MUST follow these instructions: \n - Incorporate specific
examples and case studies in initial outputs for clearer illustration of concepts.\n
- Engage more with current events or trends to enhance relevance, especially
in fields like remote work and decision-making.\n - Invite perspectives from
experts and stakeholders to add depth to discussions on ethical implications
and collaboration in creativity.\n - Use more precise language when discussing
topics, ensuring clarity and accessibility for readers.\n - Encourage exploration
of user experiences and testimonials to provide more relatable content, especially
in education and mental health contexts.\n\nBegin! This is VERY important to
you, use the tools available and give your best Final Answer, your job depends
on it!\n\nThought:"}], "tools": null, "callbacks": ["<crewai.utilities.token_counter_callback.TokenCalcHandler
object at 0x12e3e6d80>"], "available_functions": null}}, {"event_id": "83d91da9-2d3f-4638-9fdc-262371273149",
"timestamp": "2025-10-21T17:02:41.544497+00:00", "type": "llm_call_completed",
"event_data": {"timestamp": "2025-10-21T17:02:41.544497+00:00", "type": "llm_call_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research a
topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "messages":
[{"role": "system", "content": "You are Researcher. You''re an expert in research
and you love to learn new things.\nYour personal goal is: You research about
math.\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: Research a topic to teach a kid aged 6 about
math.\n\nThis is the expected criteria for your final answer: A topic, explanation,
angle, and examples.\nyou MUST return the actual complete content as the final
answer, not a summary.\n\nYou MUST follow these instructions: \n - Incorporate
specific examples and case studies in initial outputs for clearer illustration
of concepts.\n - Engage more with current events or trends to enhance relevance,
especially in fields like remote work and decision-making.\n - Invite perspectives
from experts and stakeholders to add depth to discussions on ethical implications
and collaboration in creativity.\n - Use more precise language when discussing
topics, ensuring clarity and accessibility for readers.\n - Encourage exploration
of user experiences and testimonials to provide more relatable content, especially
in education and mental health contexts.\n\nBegin! This is VERY important to
you, use the tools available and give your best Final Answer, your job depends
on it!\n\nThought:"}], "response": "I now can give a great answer \nFinal Answer:
\n\n**Topic: Introduction to Basic Addition**\n\n**Explanation:**\nBasic addition
is about combining two or more groups of things together to find out how many
there are in total. It''s one of the most fundamental concepts in math and is
a building block for all other math skills. Teaching addition to a 6-year-old
involves using simple numbers and relatable examples that help them visualize
and understand the concept of adding together.\n\n**Angle:**\nTo make the concept
of addition fun and engaging, we can use everyday objects that a child is familiar
with, such as toys, fruits, or drawing items. Incorporating visuals and interactive
elements will keep their attention and help reinforce the idea of combining
numbers.\n\n**Examples:**\n\n1. **Using Objects:**\n - **Scenario:** Let\u2019s
say you have 2 apples and your friend gives you 3 more apples.\n - **Visual**:
Arrange the apples in front of the child.\n - **Question:** \"How many apples
do you have now?\"\n - **Calculation:** 2 apples (your apples) + 3 apples
(friend''s apples) = 5 apples. \n - **Conclusion:** \"You now have 5 apples!\"\n\n2.
**Drawing Pictures:**\n - **Scenario:** Draw 4 stars on one side of the paper
and 2 stars on the other side.\n - **Activity:** Ask the child to count the
stars in the first group and then the second group.\n - **Question:** \"If
we put them together, how many stars do we have?\"\n - **Calculation:** 4
stars + 2 stars = 6 stars. \n - **Conclusion:** \"You drew 6 stars all together!\"\n\n3.
**Story Problems:**\n - **Scenario:** \"You have 5 toy cars, and you buy 3
more from the store. How many cars do you have?\"\n - **Interaction:** Create
a fun story around the toy cars (perhaps the cars are going on an adventure).\n -
**Calculation:** 5 toy cars + 3 toy cars = 8 toy cars. \n - **Conclusion:**
\"You now have a total of 8 toy cars for your adventure!\"\n\n4. **Games:**\n -
**Activity:** Play a simple game where you roll a pair of dice. Each die shows
a number.\n - **Task:** Ask the child to add the numbers on the dice together.\n -
**Example:** If one die shows 2 and the other shows 4, the child will say \u201c2
+ 4 = 6!\u201d\n - **Conclusion:** \u201cWhoever gets the highest number wins
a point!\u201d\n\nIn summary, when teaching a 6-year-old about basic addition,
it is essential to use simple numbers, real-life examples, visual aids, and
engaging activities. This ensures the child can grasp the concept while having
a fun learning experience. Making math relatable to their world helps build
a strong foundation for their future learning!", "call_type": "<LLMCallType.LLM_CALL:
''llm_call''>", "model": "gpt-4o-mini"}}, {"event_id": "7d008192-dc37-4798-99ca-d41b8674d085",
"timestamp": "2025-10-21T17:02:41.544571+00:00", "type": "memory_save_started",
"event_data": {"timestamp": "2025-10-21T17:02:41.544571+00:00", "type": "memory_save_started",
"source_fingerprint": null, "source_type": "short_term_memory", "fingerprint_metadata":
null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research
a topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "value":
"I now can give a great answer \nFinal Answer: \n\n**Topic: Introduction to
Basic Addition**\n\n**Explanation:**\nBasic addition is about combining two
or more groups of things together to find out how many there are in total. It''s
one of the most fundamental concepts in math and is a building block for all
other math skills. Teaching addition to a 6-year-old involves using simple numbers
and relatable examples that help them visualize and understand the concept of
adding together.\n\n**Angle:**\nTo make the concept of addition fun and engaging,
we can use everyday objects that a child is familiar with, such as toys, fruits,
or drawing items. Incorporating visuals and interactive elements will keep their
attention and help reinforce the idea of combining numbers.\n\n**Examples:**\n\n1.
**Using Objects:**\n - **Scenario:** Let\u2019s say you have 2 apples and
your friend gives you 3 more apples.\n - **Visual**: Arrange the apples in
front of the child.\n - **Question:** \"How many apples do you have now?\"\n -
**Calculation:** 2 apples (your apples) + 3 apples (friend''s apples) = 5 apples. \n -
**Conclusion:** \"You now have 5 apples!\"\n\n2. **Drawing Pictures:**\n -
**Scenario:** Draw 4 stars on one side of the paper and 2 stars on the other
side.\n - **Activity:** Ask the child to count the stars in the first group
and then the second group.\n - **Question:** \"If we put them together, how
many stars do we have?\"\n - **Calculation:** 4 stars + 2 stars = 6 stars. \n -
**Conclusion:** \"You drew 6 stars all together!\"\n\n3. **Story Problems:**\n -
**Scenario:** \"You have 5 toy cars, and you buy 3 more from the store. How
many cars do you have?\"\n - **Interaction:** Create a fun story around the
toy cars (perhaps the cars are going on an adventure).\n - **Calculation:**
5 toy cars + 3 toy cars = 8 toy cars. \n - **Conclusion:** \"You now have
a total of 8 toy cars for your adventure!\"\n\n4. **Games:**\n - **Activity:**
Play a simple game where you roll a pair of dice. Each die shows a number.\n -
**Task:** Ask the child to add the numbers on the dice together.\n - **Example:**
If one die shows 2 and the other shows 4, the child will say \u201c2 + 4 = 6!\u201d\n -
**Conclusion:** \u201cWhoever gets the highest number wins a point!\u201d\n\nIn
summary, when teaching a 6-year-old about basic addition, it is essential to
use simple numbers, real-life examples, visual aids, and engaging activities.
This ensures the child can grasp the concept while having a fun learning experience.
Making math relatable to their world helps build a strong foundation for their
future learning!", "metadata": {"observation": "Research a topic to teach a
kid aged 6 about math."}}}, {"event_id": "6ec950dc-be30-43b0-a1e6-5ee4de464689",
"timestamp": "2025-10-21T17:02:41.556337+00:00", "type": "memory_save_completed",
"event_data": {"timestamp": "2025-10-21T17:02:41.556337+00:00", "type": "memory_save_completed",
"source_fingerprint": null, "source_type": "short_term_memory", "fingerprint_metadata":
null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13", "task_name": "Research
a topic to teach a kid aged 6 about math.", "agent_id": "5b1ba567-c4c3-4327-9c2e-4215c53bffb6",
"agent_role": "Researcher", "from_task": null, "from_agent": null, "value":
"I now can give a great answer \nFinal Answer: \n\n**Topic: Introduction to
Basic Addition**\n\n**Explanation:**\nBasic addition is about combining two
or more groups of things together to find out how many there are in total. It''s
one of the most fundamental concepts in math and is a building block for all
other math skills. Teaching addition to a 6-year-old involves using simple numbers
and relatable examples that help them visualize and understand the concept of
adding together.\n\n**Angle:**\nTo make the concept of addition fun and engaging,
we can use everyday objects that a child is familiar with, such as toys, fruits,
or drawing items. Incorporating visuals and interactive elements will keep their
attention and help reinforce the idea of combining numbers.\n\n**Examples:**\n\n1.
**Using Objects:**\n - **Scenario:** Let\u2019s say you have 2 apples and
your friend gives you 3 more apples.\n - **Visual**: Arrange the apples in
front of the child.\n - **Question:** \"How many apples do you have now?\"\n -
**Calculation:** 2 apples (your apples) + 3 apples (friend''s apples) = 5 apples. \n -
**Conclusion:** \"You now have 5 apples!\"\n\n2. **Drawing Pictures:**\n -
**Scenario:** Draw 4 stars on one side of the paper and 2 stars on the other
side.\n - **Activity:** Ask the child to count the stars in the first group
and then the second group.\n - **Question:** \"If we put them together, how
many stars do we have?\"\n - **Calculation:** 4 stars + 2 stars = 6 stars. \n -
**Conclusion:** \"You drew 6 stars all together!\"\n\n3. **Story Problems:**\n -
**Scenario:** \"You have 5 toy cars, and you buy 3 more from the store. How
many cars do you have?\"\n - **Interaction:** Create a fun story around the
toy cars (perhaps the cars are going on an adventure).\n - **Calculation:**
5 toy cars + 3 toy cars = 8 toy cars. \n - **Conclusion:** \"You now have
a total of 8 toy cars for your adventure!\"\n\n4. **Games:**\n - **Activity:**
Play a simple game where you roll a pair of dice. Each die shows a number.\n -
**Task:** Ask the child to add the numbers on the dice together.\n - **Example:**
If one die shows 2 and the other shows 4, the child will say \u201c2 + 4 = 6!\u201d\n -
**Conclusion:** \u201cWhoever gets the highest number wins a point!\u201d\n\nIn
summary, when teaching a 6-year-old about basic addition, it is essential to
use simple numbers, real-life examples, visual aids, and engaging activities.
This ensures the child can grasp the concept while having a fun learning experience.
Making math relatable to their world helps build a strong foundation for their
future learning!", "metadata": {"observation": "Research a topic to teach a
kid aged 6 about math."}, "save_time_ms": 11.606931686401367}}, {"event_id":
"be3fce2b-9a2a-4222-b6b9-a03bae010470", "timestamp": "2025-10-21T17:02:41.688488+00:00",
"type": "memory_save_started", "event_data": {"timestamp": "2025-10-21T17:02:41.688488+00:00",
"type": "memory_save_started", "source_fingerprint": null, "source_type": "entity_memory",
"fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "value": null, "metadata": {"entity_count": 3}}},
{"event_id": "06b57cdf-ddd2-485f-a64e-660cd6fd8318", "timestamp": "2025-10-21T17:02:41.723732+00:00",
"type": "memory_save_completed", "event_data": {"timestamp": "2025-10-21T17:02:41.723732+00:00",
"type": "memory_save_completed", "source_fingerprint": null, "source_type":
"entity_memory", "fingerprint_metadata": null, "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"task_name": "Research a topic to teach a kid aged 6 about math.", "agent_id":
"5b1ba567-c4c3-4327-9c2e-4215c53bffb6", "agent_role": "Researcher", "from_task":
null, "from_agent": null, "value": "Saved 3 entities", "metadata": {"entity_count":
3, "errors": []}, "save_time_ms": 35.18795967102051}}, {"event_id": "4598e3fd-0b62-4c2f-ab7d-f709646223b3",
"timestamp": "2025-10-21T17:02:41.723816+00:00", "type": "agent_execution_completed",
"event_data": {"agent_role": "Researcher", "agent_goal": "You research about
math.", "agent_backstory": "You''re an expert in research and you love to learn
new things."}}, {"event_id": "92695721-2c95-478e-9cce-cd058fb93df3", "timestamp":
"2025-10-21T17:02:41.723915+00:00", "type": "task_completed", "event_data":
{"task_description": "Research a topic to teach a kid aged 6 about math.", "task_name":
"Research a topic to teach a kid aged 6 about math.", "task_id": "3283d0f7-7159-47a9-abf0-a1bfe4dafb13",
"output_raw": "**Topic: Introduction to Basic Addition**\n\n**Explanation:**\nBasic
addition is about combining two or more groups of things together to find out
how many there are in total. It''s one of the most fundamental concepts in math
and is a building block for all other math skills. Teaching addition to a 6-year-old
involves using simple numbers and relatable examples that help them visualize
and understand the concept of adding together.\n\n**Angle:**\nTo make the concept
of addition fun and engaging, we can use everyday objects that a child is familiar
with, such as toys, fruits, or drawing items. Incorporating visuals and interactive
elements will keep their attention and help reinforce the idea of combining
numbers.\n\n**Examples:**\n\n1. **Using Objects:**\n - **Scenario:** Let\u2019s
say you have 2 apples and your friend gives you 3 more apples.\n - **Visual**:
Arrange the apples in front of the child.\n - **Question:** \"How many apples
do you have now?\"\n - **Calculation:** 2 apples (your apples) + 3 apples
(friend''s apples) = 5 apples. \n - **Conclusion:** \"You now have 5 apples!\"\n\n2.
**Drawing Pictures:**\n - **Scenario:** Draw 4 stars on one side of the paper
and 2 stars on the other side.\n - **Activity:** Ask the child to count the
stars in the first group and then the second group.\n - **Question:** \"If
we put them together, how many stars do we have?\"\n - **Calculation:** 4
stars + 2 stars = 6 stars. \n - **Conclusion:** \"You drew 6 stars all together!\"\n\n3.
**Story Problems:**\n - **Scenario:** \"You have 5 toy cars, and you buy 3
more from the store. How many cars do you have?\"\n - **Interaction:** Create
a fun story around the toy cars (perhaps the cars are going on an adventure).\n -
**Calculation:** 5 toy cars + 3 toy cars = 8 toy cars. \n - **Conclusion:**
\"You now have a total of 8 toy cars for your adventure!\"\n\n4. **Games:**\n -
**Activity:** Play a simple game where you roll a pair of dice. Each die shows
a number.\n - **Task:** Ask the child to add the numbers on the dice together.\n -
**Example:** If one die shows 2 and the other shows 4, the child will say \u201c2
+ 4 = 6!\u201d\n - **Conclusion:** \u201cWhoever gets the highest number wins
a point!\u201d\n\nIn summary, when teaching a 6-year-old about basic addition,
it is essential to use simple numbers, real-life examples, visual aids, and
engaging activities. This ensures the child can grasp the concept while having
a fun learning experience. Making math relatable to their world helps build
a strong foundation for their future learning!", "output_format": "OutputFormat.RAW",
"agent_role": "Researcher"}}, {"event_id": "1a254c34-e055-46d2-99cb-7dfdfdcefc74",
"timestamp": "2025-10-21T17:02:41.725000+00:00", "type": "crew_kickoff_completed",
"event_data": {"timestamp": "2025-10-21T17:02:41.725000+00:00", "type": "crew_kickoff_completed",
"source_fingerprint": null, "source_type": null, "fingerprint_metadata": null,
"task_id": null, "task_name": null, "agent_id": null, "agent_role": null, "crew_name":
"crew", "crew": null, "output": {"description": "Research a topic to teach a
kid aged 6 about math.", "name": "Research a topic to teach a kid aged 6 about
math.", "expected_output": "A topic, explanation, angle, and examples.", "summary":
"Research a topic to teach a kid aged 6 about...", "raw": "**Topic: Introduction
to Basic Addition**\n\n**Explanation:**\nBasic addition is about combining two
or more groups of things together to find out how many there are in total. It''s
one of the most fundamental concepts in math and is a building block for all
other math skills. Teaching addition to a 6-year-old involves using simple numbers
and relatable examples that help them visualize and understand the concept of
adding together.\n\n**Angle:**\nTo make the concept of addition fun and engaging,
we can use everyday objects that a child is familiar with, such as toys, fruits,
or drawing items. Incorporating visuals and interactive elements will keep their
attention and help reinforce the idea of combining numbers.\n\n**Examples:**\n\n1.
**Using Objects:**\n - **Scenario:** Let\u2019s say you have 2 apples and
your friend gives you 3 more apples.\n - **Visual**: Arrange the apples in
front of the child.\n - **Question:** \"How many apples do you have now?\"\n -
**Calculation:** 2 apples (your apples) + 3 apples (friend''s apples) = 5 apples. \n -
**Conclusion:** \"You now have 5 apples!\"\n\n2. **Drawing Pictures:**\n -
**Scenario:** Draw 4 stars on one side of the paper and 2 stars on the other
side.\n - **Activity:** Ask the child to count the stars in the first group
and then the second group.\n - **Question:** \"If we put them together, how
many stars do we have?\"\n - **Calculation:** 4 stars + 2 stars = 6 stars. \n -
**Conclusion:** \"You drew 6 stars all together!\"\n\n3. **Story Problems:**\n -
**Scenario:** \"You have 5 toy cars, and you buy 3 more from the store. How
many cars do you have?\"\n - **Interaction:** Create a fun story around the
toy cars (perhaps the cars are going on an adventure).\n - **Calculation:**
5 toy cars + 3 toy cars = 8 toy cars. \n - **Conclusion:** \"You now have
a total of 8 toy cars for your adventure!\"\n\n4. **Games:**\n - **Activity:**
Play a simple game where you roll a pair of dice. Each die shows a number.\n -
**Task:** Ask the child to add the numbers on the dice together.\n - **Example:**
If one die shows 2 and the other shows 4, the child will say \u201c2 + 4 = 6!\u201d\n -
**Conclusion:** \u201cWhoever gets the highest number wins a point!\u201d\n\nIn
summary, when teaching a 6-year-old about basic addition, it is essential to
use simple numbers, real-life examples, visual aids, and engaging activities.
This ensures the child can grasp the concept while having a fun learning experience.
Making math relatable to their world helps build a strong foundation for their
future learning!", "pydantic": null, "json_dict": null, "agent": "Researcher",
"output_format": "raw"}, "total_tokens": 796}}], "batch_metadata": {"events_count":
18, "batch_sequence": 1, "is_final_batch": false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '27251'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/c5146cc4-dcff-45cc-a71a-b82a83b7de73/events
response:
body:
string: '{"events_created":18,"ephemeral_trace_batch_id":"ad4ac66f-7511-444c-aec3-a8c711ab4f54"}'
headers:
Connection:
- keep-alive
Content-Length:
- '87'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 17:02:42 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"b64593afe178f1c8f741a9b67ffdcd3a"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 65b0cea8-4eb3-4d77-a644-18bcce5cf785
x-runtime:
- '0.195421'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: '{"status": "completed", "duration_ms": 863, "final_event_count": 18}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '68'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/c5146cc4-dcff-45cc-a71a-b82a83b7de73/finalize
response:
body:
string: '{"id":"ad4ac66f-7511-444c-aec3-a8c711ab4f54","ephemeral_trace_id":"c5146cc4-dcff-45cc-a71a-b82a83b7de73","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"completed","duration_ms":863,"crewai_version":"1.0.0","total_events":18,"execution_context":{"crew_name":"crew","flow_name":null,"privacy_level":"standard","crewai_version":"1.0.0","crew_fingerprint":null},"created_at":"2025-10-21T17:02:41.683Z","updated_at":"2025-10-21T17:02:42.862Z","access_code":"TRACE-41ea39cb70","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '517'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 17:02:42 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"10c699106e5c1f4c4a75d76283291bbe"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 249b4327-c151-4c5f-84b7-16d1465ca035
x-runtime:
- '0.357280'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,101 @@
interactions:
- request:
body: '{"trace_id": "a15aa156-bf49-4b5e-90aa-b1d749de00f7", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T14:16:55.776884+00:00"},
"ephemeral_trace_id": "a15aa156-bf49-4b5e-90aa-b1d749de00f7"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"802f2398-9dac-459b-95c5-83c1121b1c4a","ephemeral_trace_id":"a15aa156-bf49-4b5e-90aa-b1d749de00f7","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T14:16:56.502Z","updated_at":"2025-10-21T14:16:56.502Z","access_code":"TRACE-a7c706bf5c","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:16:56 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"d71af423072b7e3a94f3fa25c73280e2"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- d36aca42-3eee-4eb9-a857-025197641016
x-runtime:
- '0.091579'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
version: 1

View File

@@ -0,0 +1,101 @@
interactions:
- request:
body: '{"trace_id": "06a3540b-6fa4-4066-bcd0-7eb6f9370f19", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T14:17:40.843919+00:00"},
"ephemeral_trace_id": "06a3540b-6fa4-4066-bcd0-7eb6f9370f19"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"f01eb268-68a3-4711-b457-165dbfbf28d8","ephemeral_trace_id":"06a3540b-6fa4-4066-bcd0-7eb6f9370f19","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T14:17:41.359Z","updated_at":"2025-10-21T14:17:41.359Z","access_code":"TRACE-91b88a5fb5","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:17:41 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"0af4d78caa068ff6a18bc41ed4176d51"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- a1283599-535d-4ae2-99d8-a5b4987bf951
x-runtime:
- '0.088882'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
version: 1

View File

@@ -0,0 +1,101 @@
interactions:
- request:
body: '{"trace_id": "48baf84b-6f03-4e2e-b69a-36f2e6298da6", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T14:19:57.504164+00:00"},
"ephemeral_trace_id": "48baf84b-6f03-4e2e-b69a-36f2e6298da6"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"789714f7-716c-4a0c-a6f6-3142aac81766","ephemeral_trace_id":"48baf84b-6f03-4e2e-b69a-36f2e6298da6","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T14:19:57.950Z","updated_at":"2025-10-21T14:19:57.950Z","access_code":"TRACE-2e6a3ca401","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:19:57 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"b8a7fe4a39ec1a557b05f0e3526227b0"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- c84a3ad3-2bf4-431c-8a1b-c117a015fa60
x-runtime:
- '0.087470'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
version: 1

View File

@@ -0,0 +1,477 @@
interactions:
- request:
body: '{"trace_id": "fabb9e5b-b761-4b21-8514-cd4d3c937d09", "execution_type":
"flow", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": null, "flow_name": "MyFlow", "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T14:26:37.988214+00:00"},
"ephemeral_trace_id": "fabb9e5b-b761-4b21-8514-cd4d3c937d09"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '490'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"fe167fd8-d9b8-4faa-bb28-ed13f10e8d2e","ephemeral_trace_id":"fabb9e5b-b761-4b21-8514-cd4d3c937d09","execution_type":"flow","crew_name":null,"flow_name":"MyFlow","status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":null,"flow_name":"MyFlow","crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T14:26:38.410Z","updated_at":"2025-10-21T14:26:38.410Z","access_code":"TRACE-8b1efdc7b5","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '519'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:26:38 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"3ccda5b1eea02b7d1edeeb99b7968370"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- b3682ed8-18b9-485a-8171-74e61d843589
x-runtime:
- '0.064552'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
- request:
body: '{"events": [{"event_id": "c6d1cb65-7e55-40a5-9319-766591bcd1ae", "timestamp":
"2025-10-21T14:26:37.986131+00:00", "type": "flow_started", "event_data": {"timestamp":
"2025-10-21T14:26:37.986131+00:00", "type": "flow_started", "source_fingerprint":
null, "source_type": null, "fingerprint_metadata": null, "task_id": null, "task_name":
null, "agent_id": null, "agent_role": null, "flow_name": "MyFlow", "inputs":
null}}, {"event_id": "17621b79-f10a-497f-9eb1-c567f8ca43f1", "timestamp": "2025-10-21T14:26:37.986545+00:00",
"type": "method_execution_started", "event_data": {"timestamp": "2025-10-21T14:26:37.986545+00:00",
"type": "method_execution_started", "source_fingerprint": null, "source_type":
null, "fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "flow_name": "MyFlow", "method_name": "start", "state":
{"id": "c1c5fe64-dcf4-43b2-9081-c4a513770607"}, "params": {}}}, {"event_id":
"60654efd-c07b-4171-a75d-9b943863e4bf", "timestamp": "2025-10-21T14:26:37.989677+00:00",
"type": "method_execution_finished", "event_data": {"timestamp": "2025-10-21T14:26:37.989677+00:00",
"type": "method_execution_finished", "source_fingerprint": null, "source_type":
null, "fingerprint_metadata": null, "task_id": null, "task_name": null, "agent_id":
null, "agent_role": null, "flow_name": "MyFlow", "method_name": "start", "result":
{"parent_flow": "<tests.test_crew.test_sets_parent_flow_when_inside_flow.<locals>.MyFlow
object at 0x12b835520>", "name": "crew", "cache": true, "tasks": [{"used_tools":
"0", "tools_errors": "0", "delegations": "0", "i18n": "{''prompt_file'': None}",
"name": "None", "prompt_context": "None", "description": "''Task 1''", "expected_output":
"''output''", "config": "None", "callback": "None", "agent": "{''id'': UUID(''7fadf38e-4090-4643-9fcf-bd24b07e05e1''),
''role'': ''Researcher'', ''goal'': ''Make the best research and analysis on
content about AI and AI agents'', ''backstory'': \"You''re an expert researcher,
specialized in technology, software engineering, AI and startups. You work as
a freelancer and is now working on doing research and analysis for a new customer.\",
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b973fe0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
None, ''knowledge_storage'': None, ''security_config'': {''fingerprint'': {''metadata'':
{}}}, ''callbacks'': [], ''adapted_agent'': False, ''knowledge_config'': None,
''apps'': None, ''mcps'': None}", "context": "NOT_SPECIFIED", "async_execution":
"False", "output_json": "None", "output_pydantic": "None", "output_file": "None",
"create_directory": "True", "output": "None", "tools": "[]", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "id": "UUID(''d8c03737-58d2-4c8e-929e-d9e0bf022a3b'')",
"human_input": "False", "markdown": "False", "converter_cls": "None", "processed_by_agents":
"set()", "guardrail": "None", "guardrails": "None", "max_retries": "None", "guardrail_max_retries":
"3", "retry_count": "0", "start_time": "None", "end_time": "None", "allow_crewai_trigger_context":
"None"}, {"used_tools": "0", "tools_errors": "0", "delegations": "0", "i18n":
"{''prompt_file'': None}", "name": "None", "prompt_context": "None", "description":
"''Task 2''", "expected_output": "''output''", "config": "None", "callback":
"None", "agent": "{''id'': UUID(''49785d1e-2cfa-4967-a503-da9f6fea46df''), ''role'':
''Senior Writer'', ''goal'': ''Write the best content about AI and AI agents.'',
''backstory'': \"You''re a senior writer, specialized in technology, software
engineering, AI and startups. You work as a freelancer and are now working on
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b7bbbf0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
None, ''knowledge_storage'': None, ''security_config'': {''fingerprint'': {''metadata'':
{}}}, ''callbacks'': [], ''adapted_agent'': False, ''knowledge_config'': None,
''apps'': None, ''mcps'': None}", "context": "NOT_SPECIFIED", "async_execution":
"False", "output_json": "None", "output_pydantic": "None", "output_file": "None",
"create_directory": "True", "output": "None", "tools": "[]", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "id": "UUID(''530f34b2-29dd-4ba8-a4e0-f68ba958890b'')",
"human_input": "False", "markdown": "False", "converter_cls": "None", "processed_by_agents":
"set()", "guardrail": "None", "guardrails": "None", "max_retries": "None", "guardrail_max_retries":
"3", "retry_count": "0", "start_time": "None", "end_time": "None", "allow_crewai_trigger_context":
"None"}], "agents": [{"id": "UUID(''7fadf38e-4090-4643-9fcf-bd24b07e05e1'')",
"role": "''Researcher''", "goal": "''Make the best research and analysis on
content about AI and AI agents''", "backstory": "\"You''re an expert researcher,
specialized in technology, software engineering, AI and startups. You work as
a freelancer and is now working on doing research and analysis for a new customer.\"",
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b973fe0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
"None", "knowledge_sources": "None", "knowledge_storage": "None", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "callbacks": "[]", "adapted_agent":
"False", "knowledge_config": "None", "apps": "None", "mcps": "None"}, {"id":
"UUID(''49785d1e-2cfa-4967-a503-da9f6fea46df'')", "role": "''Senior Writer''",
"goal": "''Write the best content about AI and AI agents.''", "backstory": "\"You''re
a senior writer, specialized in technology, software engineering, AI and startups.
You work as a freelancer and are now working on writing content for a new customer.\"",
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b7bbbf0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
"None", "knowledge_sources": "None", "knowledge_storage": "None", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "callbacks": "[]", "adapted_agent":
"False", "knowledge_config": "None", "apps": "None", "mcps": "None"}], "process":
"sequential", "verbose": false, "memory": false, "short_term_memory": null,
"long_term_memory": null, "entity_memory": null, "external_memory": null, "embedder":
null, "usage_metrics": null, "manager_llm": null, "manager_agent": null, "function_calling_llm":
null, "config": null, "id": "5a10d62b-4eab-47e7-b91f-6878b682acb5", "share_crew":
false, "step_callback": null, "task_callback": null, "before_kickoff_callbacks":
[], "after_kickoff_callbacks": [], "max_rpm": null, "prompt_file": null, "output_log_file":
null, "planning": false, "planning_llm": null, "task_execution_output_json_files":
null, "execution_logs": [], "knowledge_sources": null, "chat_llm": null, "knowledge":
null, "security_config": {"fingerprint": {"metadata": "{}"}}, "token_usage":
null, "tracing": false}, "state": {"id": "c1c5fe64-dcf4-43b2-9081-c4a513770607"}}},
{"event_id": "191d1d3e-8d9d-40cf-a7e4-48c44b05c2d3", "timestamp": "2025-10-21T14:26:37.989913+00:00",
"type": "flow_finished", "event_data": {"timestamp": "2025-10-21T14:26:37.989913+00:00",
"type": "flow_finished", "source_fingerprint": null, "source_type": null, "fingerprint_metadata":
null, "task_id": null, "task_name": null, "agent_id": null, "agent_role": null,
"flow_name": "MyFlow", "result": {"parent_flow": "<tests.test_crew.test_sets_parent_flow_when_inside_flow.<locals>.MyFlow
object at 0x12b835520>", "name": "crew", "cache": true, "tasks": [{"used_tools":
"0", "tools_errors": "0", "delegations": "0", "i18n": "{''prompt_file'': None}",
"name": "None", "prompt_context": "None", "description": "''Task 1''", "expected_output":
"''output''", "config": "None", "callback": "None", "agent": "{''id'': UUID(''7fadf38e-4090-4643-9fcf-bd24b07e05e1''),
''role'': ''Researcher'', ''goal'': ''Make the best research and analysis on
content about AI and AI agents'', ''backstory'': \"You''re an expert researcher,
specialized in technology, software engineering, AI and startups. You work as
a freelancer and is now working on doing research and analysis for a new customer.\",
''cache'': True, ''verbose'': False, ''max_rpm'': None, ''allow_delegation'':
False, ''tools'': [], ''max_iter'': 25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b973fe0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b910290>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b9934d0>,
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
None, ''knowledge_storage'': None, ''security_config'': {''fingerprint'': {''metadata'':
{}}}, ''callbacks'': [], ''adapted_agent'': False, ''knowledge_config'': None,
''apps'': None, ''mcps'': None}", "context": "NOT_SPECIFIED", "async_execution":
"False", "output_json": "None", "output_pydantic": "None", "output_file": "None",
"create_directory": "True", "output": "None", "tools": "[]", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "id": "UUID(''d8c03737-58d2-4c8e-929e-d9e0bf022a3b'')",
"human_input": "False", "markdown": "False", "converter_cls": "None", "processed_by_agents":
"set()", "guardrail": "None", "guardrails": "None", "max_retries": "None", "guardrail_max_retries":
"3", "retry_count": "0", "start_time": "None", "end_time": "None", "allow_crewai_trigger_context":
"None"}, {"used_tools": "0", "tools_errors": "0", "delegations": "0", "i18n":
"{''prompt_file'': None}", "name": "None", "prompt_context": "None", "description":
"''Task 2''", "expected_output": "''output''", "config": "None", "callback":
"None", "agent": "{''id'': UUID(''49785d1e-2cfa-4967-a503-da9f6fea46df''), ''role'':
''Senior Writer'', ''goal'': ''Write the best content about AI and AI agents.'',
''backstory'': \"You''re a senior writer, specialized in technology, software
engineering, AI and startups. You work as a freelancer and are now working on
writing content for a new customer.\", ''cache'': True, ''verbose'': False,
''max_rpm'': None, ''allow_delegation'': False, ''tools'': [], ''max_iter'':
25, ''agent_executor'': <crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b7bbbf0>, ''llm'': <crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b9903b0>, ''crew'': None, ''i18n'': {''prompt_file'': None}, ''cache_handler'':
{}, ''tools_handler'': <crewai.agents.tools_handler.ToolsHandler object at 0x12b631bb0>,
''tools_results'': [], ''max_tokens'': None, ''knowledge'': None, ''knowledge_sources'':
None, ''knowledge_storage'': None, ''security_config'': {''fingerprint'': {''metadata'':
{}}}, ''callbacks'': [], ''adapted_agent'': False, ''knowledge_config'': None,
''apps'': None, ''mcps'': None}", "context": "NOT_SPECIFIED", "async_execution":
"False", "output_json": "None", "output_pydantic": "None", "output_file": "None",
"create_directory": "True", "output": "None", "tools": "[]", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "id": "UUID(''530f34b2-29dd-4ba8-a4e0-f68ba958890b'')",
"human_input": "False", "markdown": "False", "converter_cls": "None", "processed_by_agents":
"set()", "guardrail": "None", "guardrails": "None", "max_retries": "None", "guardrail_max_retries":
"3", "retry_count": "0", "start_time": "None", "end_time": "None", "allow_crewai_trigger_context":
"None"}], "agents": [{"id": "UUID(''7fadf38e-4090-4643-9fcf-bd24b07e05e1'')",
"role": "''Researcher''", "goal": "''Make the best research and analysis on
content about AI and AI agents''", "backstory": "\"You''re an expert researcher,
specialized in technology, software engineering, AI and startups. You work as
a freelancer and is now working on doing research and analysis for a new customer.\"",
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b973fe0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b910290>", "crew": "None", "i18n": "{''prompt_file'': None}",
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
object at 0x12b9934d0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
"None", "knowledge_sources": "None", "knowledge_storage": "None", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "callbacks": "[]", "adapted_agent":
"False", "knowledge_config": "None", "apps": "None", "mcps": "None"}, {"id":
"UUID(''49785d1e-2cfa-4967-a503-da9f6fea46df'')", "role": "''Senior Writer''",
"goal": "''Write the best content about AI and AI agents.''", "backstory": "\"You''re
a senior writer, specialized in technology, software engineering, AI and startups.
You work as a freelancer and are now working on writing content for a new customer.\"",
"cache": "True", "verbose": "False", "max_rpm": "None", "allow_delegation":
"False", "tools": "[]", "max_iter": "25", "agent_executor": "<crewai.agents.crew_agent_executor.CrewAgentExecutor
object at 0x12b7bbbf0>", "llm": "<crewai.llms.providers.openai.completion.OpenAICompletion
object at 0x12b9903b0>", "crew": "None", "i18n": "{''prompt_file'': None}",
"cache_handler": "{}", "tools_handler": "<crewai.agents.tools_handler.ToolsHandler
object at 0x12b631bb0>", "tools_results": "[]", "max_tokens": "None", "knowledge":
"None", "knowledge_sources": "None", "knowledge_storage": "None", "security_config":
"{''fingerprint'': {''metadata'': {}}}", "callbacks": "[]", "adapted_agent":
"False", "knowledge_config": "None", "apps": "None", "mcps": "None"}], "process":
"sequential", "verbose": false, "memory": false, "short_term_memory": null,
"long_term_memory": null, "entity_memory": null, "external_memory": null, "embedder":
null, "usage_metrics": null, "manager_llm": null, "manager_agent": null, "function_calling_llm":
null, "config": null, "id": "5a10d62b-4eab-47e7-b91f-6878b682acb5", "share_crew":
false, "step_callback": null, "task_callback": null, "before_kickoff_callbacks":
[], "after_kickoff_callbacks": [], "max_rpm": null, "prompt_file": null, "output_log_file":
null, "planning": false, "planning_llm": null, "task_execution_output_json_files":
null, "execution_logs": [], "knowledge_sources": null, "chat_llm": null, "knowledge":
null, "security_config": {"fingerprint": {"metadata": "{}"}}, "token_usage":
null, "tracing": false}}}], "batch_metadata": {"events_count": 4, "batch_sequence":
1, "is_final_batch": false}}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '15841'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/fabb9e5b-b761-4b21-8514-cd4d3c937d09/events
response:
body:
string: '{"events_created":4,"ephemeral_trace_batch_id":"fe167fd8-d9b8-4faa-bb28-ed13f10e8d2e"}'
headers:
Connection:
- keep-alive
Content-Length:
- '86'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:26:38 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"31af819a6bb47947663469e423c6c943"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 7e1b0d5e-c0c3-4745-aebd-6f86f9292bdd
x-runtime:
- '0.141007'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
- request:
body: '{"status": "completed", "duration_ms": 856, "final_event_count": 4}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '67'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: PATCH
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches/fabb9e5b-b761-4b21-8514-cd4d3c937d09/finalize
response:
body:
string: '{"id":"fe167fd8-d9b8-4faa-bb28-ed13f10e8d2e","ephemeral_trace_id":"fabb9e5b-b761-4b21-8514-cd4d3c937d09","execution_type":"flow","crew_name":null,"flow_name":"MyFlow","status":"completed","duration_ms":856,"crewai_version":"1.0.0","total_events":4,"execution_context":{"crew_name":null,"flow_name":"MyFlow","privacy_level":"standard","crewai_version":"1.0.0","crew_fingerprint":null},"created_at":"2025-10-21T14:26:38.410Z","updated_at":"2025-10-21T14:26:39.268Z","access_code":"TRACE-8b1efdc7b5","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '520'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:26:39 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"dfa32cefa9e9282e5792820119ebc7f4"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 58bc91dd-a0a8-4299-be3a-16f998de8786
x-runtime:
- '0.061567'
x-xss-protection:
- 1; mode=block
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,101 @@
interactions:
- request:
body: '{"trace_id": "487e5cbc-9483-4cda-9ceb-3a4eade22f9b", "execution_type":
"crew", "user_identifier": null, "execution_context": {"crew_fingerprint": null,
"crew_name": "crew", "flow_name": null, "crewai_version": "1.0.0", "privacy_level":
"standard"}, "execution_metadata": {"expected_duration_estimate": 300, "agent_count":
0, "task_count": 0, "flow_method_count": 0, "execution_started_at": "2025-10-21T14:25:56.570899+00:00"},
"ephemeral_trace_id": "487e5cbc-9483-4cda-9ceb-3a4eade22f9b"}'
headers:
Accept:
- '*/*'
Accept-Encoding:
- gzip, deflate, zstd
Connection:
- keep-alive
Content-Length:
- '488'
Content-Type:
- application/json
User-Agent:
- CrewAI-CLI/1.0.0
X-Crewai-Version:
- 1.0.0
method: POST
uri: https://app.crewai.com/crewai_plus/api/v1/tracing/ephemeral/batches
response:
body:
string: '{"id":"75d59a82-2468-4e95-917d-8f00c3a22995","ephemeral_trace_id":"487e5cbc-9483-4cda-9ceb-3a4eade22f9b","execution_type":"crew","crew_name":"crew","flow_name":null,"status":"running","duration_ms":null,"crewai_version":"1.0.0","total_events":0,"execution_context":{"crew_fingerprint":null,"crew_name":"crew","flow_name":null,"crewai_version":"1.0.0","privacy_level":"standard"},"created_at":"2025-10-21T14:25:57.071Z","updated_at":"2025-10-21T14:25:57.071Z","access_code":"TRACE-5c2eb0158e","user_identifier":null}'
headers:
Connection:
- keep-alive
Content-Length:
- '515'
Content-Type:
- application/json; charset=utf-8
Date:
- Tue, 21 Oct 2025 14:25:57 GMT
cache-control:
- no-store
content-security-policy:
- 'default-src ''self'' *.app.crewai.com app.crewai.com; script-src ''self''
''unsafe-inline'' *.app.crewai.com app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts
https://www.gstatic.com https://run.pstmn.io https://apis.google.com https://apis.google.com/js/api.js
https://accounts.google.com https://accounts.google.com/gsi/client https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css.map
https://*.google.com https://docs.google.com https://slides.google.com https://js.hs-scripts.com
https://js.sentry-cdn.com https://browser.sentry-cdn.com https://www.googletagmanager.com
https://js-na1.hs-scripts.com https://js.hubspot.com http://js-na1.hs-scripts.com
https://bat.bing.com https://cdn.amplitude.com https://cdn.segment.com https://d1d3n03t5zntha.cloudfront.net/
https://descriptusercontent.com https://edge.fullstory.com https://googleads.g.doubleclick.net
https://js.hs-analytics.net https://js.hs-banner.com https://js.hsadspixel.net
https://js.hscollectedforms.net https://js.usemessages.com https://snap.licdn.com
https://static.cloudflareinsights.com https://static.reo.dev https://www.google-analytics.com
https://share.descript.com/; style-src ''self'' ''unsafe-inline'' *.app.crewai.com
app.crewai.com https://cdn.jsdelivr.net/npm/apexcharts; img-src ''self'' data:
*.app.crewai.com app.crewai.com https://zeus.tools.crewai.com https://dashboard.tools.crewai.com
https://cdn.jsdelivr.net https://forms.hsforms.com https://track.hubspot.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://www.google.com
https://www.google.com.br; font-src ''self'' data: *.app.crewai.com app.crewai.com;
connect-src ''self'' *.app.crewai.com app.crewai.com https://zeus.tools.crewai.com
https://connect.useparagon.com/ https://zeus.useparagon.com/* https://*.useparagon.com/*
https://run.pstmn.io https://connect.tools.crewai.com/ https://*.sentry.io
https://www.google-analytics.com https://edge.fullstory.com https://rs.fullstory.com
https://api.hubspot.com https://forms.hscollectedforms.net https://api.hubapi.com
https://px.ads.linkedin.com https://px4.ads.linkedin.com https://google.com/pagead/form-data/16713662509
https://google.com/ccm/form-data/16713662509 https://www.google.com/ccm/collect
https://worker-actionkit.tools.crewai.com https://api.reo.dev; frame-src ''self''
*.app.crewai.com app.crewai.com https://connect.useparagon.com/ https://zeus.tools.crewai.com
https://zeus.useparagon.com/* https://connect.tools.crewai.com/ https://docs.google.com
https://drive.google.com https://slides.google.com https://accounts.google.com
https://*.google.com https://app.hubspot.com/ https://td.doubleclick.net https://www.googletagmanager.com/
https://www.youtube.com https://share.descript.com'
etag:
- W/"fd7de54de56e26a00d67fe4ea0f9bb62"
expires:
- '0'
permissions-policy:
- camera=(), microphone=(self), geolocation=()
pragma:
- no-cache
referrer-policy:
- strict-origin-when-cross-origin
strict-transport-security:
- max-age=63072000; includeSubDomains
vary:
- Accept
x-content-type-options:
- nosniff
x-frame-options:
- SAMEORIGIN
x-permitted-cross-domain-policies:
- none
x-request-id:
- 92521ff4-b389-4b4b-b2f6-9d40ee75cd4b
x-runtime:
- '0.071078'
x-xss-protection:
- 1; mode=block
status:
code: 201
message: Created
version: 1

View File

@@ -6,10 +6,11 @@ from collections import defaultdict
from concurrent.futures import Future
from hashlib import md5
import re
from unittest import mock
from unittest.mock import ANY, MagicMock, patch
from unittest.mock import ANY, MagicMock, call, patch
from crewai.agent import Agent
from crewai.agents import CacheHandler
from crewai.agents.agent_builder.base_agent import BaseAgent
from crewai.crew import Crew
from crewai.crews.crew_output import CrewOutput
from crewai.events.event_bus import crewai_event_bus
@@ -29,6 +30,7 @@ from crewai.events.types.memory_events import (
MemorySaveFailedEvent,
MemorySaveStartedEvent,
)
from crewai.flow import Flow, start
from crewai.knowledge.knowledge import Knowledge
from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
from crewai.llm import LLM
@@ -37,19 +39,21 @@ 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.process import Process
from crewai.project import CrewBase, agent, before_kickoff, crew, task
from crewai.task import Task
from crewai.tasks.conditional_task import ConditionalTask
from crewai.tasks.output_format import OutputFormat
from crewai.tasks.task_output import TaskOutput
from crewai.tools import BaseTool, tool
from crewai.tools.agent_tools.add_image_tool import AddImageTool
from crewai.types.usage_metrics import UsageMetrics
from crewai.utilities.rpm_controller import RPMController
from crewai.utilities.task_output_storage_handler import TaskOutputStorageHandler
from crewai_tools import CodeInterpreterTool
from pydantic import BaseModel, Field
import pydantic_core
import pytest
from crewai.agents import CacheHandler
from crewai.flow import Flow, start
@pytest.fixture
def ceo():
@@ -575,10 +579,6 @@ def test_crew_with_delegating_agents(ceo, writer):
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_with_delegating_agents_should_not_override_task_tools(ceo, writer):
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
class TestToolInput(BaseModel):
"""Input schema for TestTool."""
@@ -635,10 +635,6 @@ def test_crew_with_delegating_agents_should_not_override_task_tools(ceo, writer)
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_with_delegating_agents_should_not_override_agent_tools(ceo, writer):
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
class TestToolInput(BaseModel):
"""Input schema for TestTool."""
@@ -697,10 +693,6 @@ def test_crew_with_delegating_agents_should_not_override_agent_tools(ceo, writer
@pytest.mark.vcr(filter_headers=["authorization"])
def test_task_tools_override_agent_tools(researcher):
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
class TestToolInput(BaseModel):
"""Input schema for TestTool."""
@@ -753,11 +745,6 @@ def test_task_tools_override_agent_tools_with_allow_delegation(researcher, write
"""
Test that task tools override agent tools while preserving delegation tools when allow_delegation=True
"""
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
class TestToolInput(BaseModel):
query: str = Field(..., description="Query to process")
@@ -876,10 +863,6 @@ def test_crew_verbose_output(researcher, writer, capsys):
@pytest.mark.vcr(filter_headers=["authorization"])
def test_cache_hitting_between_agents(researcher, writer, ceo):
from unittest.mock import call, patch
from crewai.tools import tool
@tool
def multiplier(first_number: int, second_number: int) -> float:
"""Useful for when you need to multiply two numbers together."""
@@ -934,8 +917,6 @@ def test_cache_hitting_between_agents(researcher, writer, ceo):
@pytest.mark.vcr(filter_headers=["authorization"])
def test_api_calls_throttling(capsys):
from crewai.tools import tool
@tool
def get_final_answer() -> float:
"""Get the final answer but don't give it yet, just re-use this
@@ -1216,8 +1197,6 @@ async def test_crew_async_kickoff():
@pytest.mark.asyncio
@pytest.mark.vcr(filter_headers=["authorization"])
async def test_async_task_execution_call_count(researcher, writer):
from unittest.mock import MagicMock, patch
list_ideas = Task(
description="Give me a list of 5 interesting ideas to explore for na article, what makes them unique and interesting.",
expected_output="Bullet point list of 5 important events.",
@@ -1575,9 +1554,6 @@ def test_dont_set_agents_step_callback_if_already_set():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_function_calling_llm():
from crewai import LLM
from crewai.tools import tool
llm = LLM(model="gpt-4o-mini")
@tool
@@ -1607,8 +1583,6 @@ def test_crew_function_calling_llm():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_task_with_no_arguments():
from crewai.tools import tool
@tool
def return_data() -> str:
"Useful to get the sales related data"
@@ -1635,11 +1609,6 @@ def test_task_with_no_arguments():
def test_code_execution_flag_adds_code_tool_upon_kickoff():
try:
from crewai_tools import CodeInterpreterTool
except (ImportError, Exception):
pytest.skip("crewai_tools not available or cannot be imported")
# Mock Docker validation for the entire test
with patch.object(Agent, "_validate_docker_installation"):
programmer = Agent(
@@ -2061,8 +2030,6 @@ def test_crew_does_not_interpolate_without_inputs():
def test_task_callback_on_crew():
from unittest.mock import MagicMock, patch
researcher_agent = Agent(
role="Researcher",
goal="Make the best research and analysis on content about AI and AI agents",
@@ -2097,8 +2064,6 @@ def test_task_callback_on_crew():
def test_task_callback_both_on_task_and_crew():
from unittest.mock import MagicMock, patch
mock_callback_on_task = MagicMock()
mock_callback_on_crew = MagicMock()
@@ -2134,8 +2099,6 @@ def test_task_callback_both_on_task_and_crew():
def test_task_same_callback_both_on_task_and_crew():
from unittest.mock import MagicMock, patch
mock_callback = MagicMock()
researcher_agent = Agent(
@@ -2170,8 +2133,6 @@ def test_task_same_callback_both_on_task_and_crew():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_tools_with_custom_caching():
from crewai.tools import tool
@tool
def multiplcation_tool(first_number: int, second_number: int) -> int:
"""Useful for when you need to multiply two numbers together."""
@@ -2477,7 +2438,7 @@ def test_using_contextual_memory():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_memory_events_are_emitted():
events = defaultdict(list)
event_received = threading.Event()
condition = threading.Condition()
@crewai_event_bus.on(MemorySaveStartedEvent)
def handle_memory_save_started(source, event):
@@ -2509,8 +2470,9 @@ def test_memory_events_are_emitted():
@crewai_event_bus.on(MemoryRetrievalCompletedEvent)
def handle_memory_retrieval_completed(source, event):
events["MemoryRetrievalCompletedEvent"].append(event)
event_received.set()
with condition:
events["MemoryRetrievalCompletedEvent"].append(event)
condition.notify()
math_researcher = Agent(
role="Researcher",
@@ -2533,7 +2495,12 @@ def test_memory_events_are_emitted():
crew.kickoff()
assert event_received.wait(timeout=5), "Timeout waiting for memory events"
with condition:
success = condition.wait_for(
lambda: len(events["MemoryRetrievalCompletedEvent"]) >= 1, timeout=5
)
assert success, "Timeout waiting for memory events"
assert len(events["MemorySaveStartedEvent"]) == 3
assert len(events["MemorySaveCompletedEvent"]) == 3
assert len(events["MemorySaveFailedEvent"]) == 0
@@ -2797,6 +2764,7 @@ def test_crew_output_file_validation_failures():
Crew(agents=[agent], tasks=[task]).kickoff()
@pytest.mark.vcr(filter_headers=["authorization"])
def test_manager_agent(researcher, writer):
task = Task(
description="Come up with a list of 5 interesting ideas to explore for an article, then write one amazing paragraph highlight for each idea that showcases how good an article about this topic could be. Return the list of ideas with their paragraph and your notes.",
@@ -2855,9 +2823,8 @@ def test_manager_agent_in_agents_raises_exception(researcher, writer):
)
@pytest.mark.vcr(filter_headers=["authorization"])
def test_manager_agent_with_tools_raises_exception(researcher, writer):
from crewai.tools import tool
@tool
def testing_tool(first_number: int, second_number: int) -> int:
"""Useful for when you need to multiply two numbers together."""
@@ -2887,13 +2854,8 @@ def test_manager_agent_with_tools_raises_exception(researcher, writer):
crew.kickoff()
@patch("crewai.crew.Crew.kickoff")
@patch("crewai.crew.CrewTrainingHandler")
@patch("crewai.crew.TaskEvaluator")
@patch("crewai.crew.Crew.copy")
def test_crew_train_success(
copy_mock, task_evaluator, crew_training_handler, kickoff_mock, researcher, writer
):
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_train_success(researcher, writer):
task = Task(
description="Come up with a list of 5 interesting ideas to explore for an article, then write one amazing paragraph highlight for each idea that showcases how good an article about this topic could be. Return the list of ideas with their paragraph and your notes.",
expected_output="5 bullet points with a paragraph for each idea.",
@@ -2905,79 +2867,39 @@ def test_crew_train_success(
tasks=[task],
)
# Create a mock for the copied crew
copy_mock.return_value = crew
received_events = []
lock = threading.Lock()
all_events_received = threading.Event()
condition = threading.Condition()
@crewai_event_bus.on(CrewTrainStartedEvent)
def on_crew_train_started(source, event: CrewTrainStartedEvent):
with lock:
with condition:
received_events.append(event)
if len(received_events) == 2:
all_events_received.set()
condition.notify()
@crewai_event_bus.on(CrewTrainCompletedEvent)
def on_crew_train_completed(source, event: CrewTrainCompletedEvent):
with lock:
with condition:
received_events.append(event)
if len(received_events) == 2:
all_events_received.set()
condition.notify()
crew.train(
n_iterations=2, inputs={"topic": "AI"}, filename="trained_agents_data.pkl"
)
# Mock human input to avoid blocking during training
with patch("builtins.input", return_value="Great work!"):
crew.train(
n_iterations=2, inputs={"topic": "AI"}, filename="trained_agents_data.pkl"
)
assert all_events_received.wait(timeout=5), "Timeout waiting for all train events"
# Ensure kickoff is called on the copied crew
kickoff_mock.assert_has_calls(
[mock.call(inputs={"topic": "AI"}), mock.call(inputs={"topic": "AI"})]
)
task_evaluator.assert_has_calls(
[
mock.call(researcher),
mock.call().evaluate_training_data(
training_data=crew_training_handler().load(),
agent_id=str(researcher.id),
),
mock.call().evaluate_training_data().model_dump(),
mock.call(writer),
mock.call().evaluate_training_data(
training_data=crew_training_handler().load(),
agent_id=str(writer.id),
),
mock.call().evaluate_training_data().model_dump(),
]
)
crew_training_handler.assert_any_call("training_data.pkl")
crew_training_handler().load.assert_called()
crew_training_handler.assert_any_call("trained_agents_data.pkl")
crew_training_handler().load.assert_called()
crew_training_handler().save_trained_data.assert_has_calls(
[
mock.call(
agent_id="Researcher",
trained_data=task_evaluator().evaluate_training_data().model_dump(),
),
mock.call(
agent_id="Senior Writer",
trained_data=task_evaluator().evaluate_training_data().model_dump(),
),
]
)
with condition:
success = condition.wait_for(lambda: len(received_events) == 2, timeout=5)
assert success, "Timeout waiting for all train events"
assert len(received_events) == 2
assert isinstance(received_events[0], CrewTrainStartedEvent)
assert isinstance(received_events[1], CrewTrainCompletedEvent)
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_train_error(researcher, writer):
task = Task(
description="Come up with a list of 5 interesting ideas to explore for an article",
@@ -3277,6 +3199,7 @@ def test_replay_with_context():
assert crew.tasks[1].context[0].output.raw == "context raw output"
@pytest.mark.vcr(filter_headers=["authorization"])
def test_replay_with_context_set_to_nullable():
agent = Agent(role="test_agent", backstory="Test Description", goal="Test Goal")
task1 = Task(
@@ -3716,10 +3639,8 @@ def test_conditional_should_execute(researcher, writer):
assert mock_execute_sync.call_count == 2
@mock.patch("crewai.crew.CrewEvaluator")
@mock.patch("crewai.crew.Crew.copy")
@mock.patch("crewai.crew.Crew.kickoff")
def test_crew_testing_function(kickoff_mock, copy_mock, crew_evaluator, researcher):
@pytest.mark.vcr(filter_headers=["authorization"])
def test_crew_testing_function(researcher):
task = Task(
description="Come up with a list of 5 interesting ideas to explore for an article, then write one amazing paragraph highlight for each idea that showcases how good an article about this topic could be. Return the list of ideas with their paragraph and your notes.",
expected_output="5 bullet points with a paragraph for each idea.",
@@ -3731,48 +3652,32 @@ def test_crew_testing_function(kickoff_mock, copy_mock, crew_evaluator, research
tasks=[task],
)
# Create a mock for the copied crew
copy_mock.return_value = crew
n_iterations = 2
llm_instance = LLM("gpt-4o-mini")
received_events = []
lock = threading.Lock()
all_events_received = threading.Event()
condition = threading.Condition()
@crewai_event_bus.on(CrewTestStartedEvent)
def on_crew_test_started(source, event: CrewTestStartedEvent):
with lock:
with condition:
received_events.append(event)
if len(received_events) == 2:
all_events_received.set()
condition.notify()
@crewai_event_bus.on(CrewTestCompletedEvent)
def on_crew_test_completed(source, event: CrewTestCompletedEvent):
with lock:
with condition:
received_events.append(event)
if len(received_events) == 2:
all_events_received.set()
condition.notify()
crew.test(n_iterations, llm_instance, inputs={"topic": "AI"})
assert all_events_received.wait(timeout=5), "Timeout waiting for all test events"
# Ensure kickoff is called on the copied crew
kickoff_mock.assert_has_calls(
[mock.call(inputs={"topic": "AI"}), mock.call(inputs={"topic": "AI"})]
)
crew_evaluator.assert_has_calls(
[
mock.call(crew, llm_instance),
mock.call().set_iteration(1),
mock.call().set_iteration(2),
mock.call().print_crew_evaluation_result(),
]
)
with condition:
success = condition.wait_for(lambda: len(received_events) == 2, timeout=5)
assert success, "Timeout waiting for all test events"
assert len(received_events) == 2
assert isinstance(received_events[0], CrewTestStartedEvent)
assert isinstance(received_events[1], CrewTestCompletedEvent)
@@ -3843,15 +3748,11 @@ def test_fetch_inputs():
)
@pytest.mark.vcr(filter_headers=["authorization"])
def test_task_tools_preserve_code_execution_tools():
"""
Test that task tools don't override code execution tools when allow_code_execution=True
"""
from crewai_tools import CodeInterpreterTool
from pydantic import BaseModel, Field
from crewai.tools import BaseTool
class TestToolInput(BaseModel):
"""Input schema for TestTool."""
@@ -3865,23 +3766,25 @@ def test_task_tools_preserve_code_execution_tools():
def _run(self, query: str) -> str:
return f"Processed: {query}"
# Create a programmer agent with code execution enabled
programmer = Agent(
role="Programmer",
goal="Write code to solve problems.",
backstory="You're a programmer who loves to solve problems with code.",
allow_delegation=True,
allow_code_execution=True,
)
# Mock Docker validation for the entire test
with patch.object(Agent, "_validate_docker_installation"):
# Create a programmer agent with code execution enabled
programmer = Agent(
role="Programmer",
goal="Write code to solve problems.",
backstory="You're a programmer who loves to solve problems with code.",
allow_delegation=True,
allow_code_execution=True,
)
# Create a code reviewer agent
reviewer = Agent(
role="Code Reviewer",
goal="Review code for bugs and improvements",
backstory="You're an experienced code reviewer who ensures code quality and best practices.",
allow_delegation=True,
allow_code_execution=True,
)
# Create a code reviewer agent
reviewer = Agent(
role="Code Reviewer",
goal="Review code for bugs and improvements",
backstory="You're an experienced code reviewer who ensures code quality and best practices.",
allow_delegation=True,
allow_code_execution=True,
)
# Create a task with its own tools
task = Task(
@@ -3932,8 +3835,6 @@ def test_multimodal_flag_adds_multimodal_tools():
"""
Test that an agent with multimodal=True automatically has multimodal tools added to the task execution.
"""
from crewai.tools.agent_tools.add_image_tool import AddImageTool
# Create an agent that supports multimodal
multimodal_agent = Agent(
role="Multimodal Analyst",
@@ -4247,13 +4148,8 @@ def test_crew_guardrail_feedback_in_context():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_before_kickoff_callback():
from crewai.project import CrewBase
@CrewBase
class TestCrewClass:
from crewai.agents.agent_builder.base_agent import BaseAgent
from crewai.project import CrewBase, agent, before_kickoff, crew, task
agents: list[BaseAgent]
tasks: list[Task]
@@ -4309,12 +4205,8 @@ def test_before_kickoff_callback():
@pytest.mark.vcr(filter_headers=["authorization"])
def test_before_kickoff_without_inputs():
from crewai.project import CrewBase, agent, before_kickoff, task
@CrewBase
class TestCrewClass:
from crewai.project import crew
agents_config = None
tasks_config = None
@@ -4518,6 +4410,7 @@ def test_sets_parent_flow_when_outside_flow(researcher, writer):
assert crew.parent_flow is None
@pytest.mark.vcr(filter_headers=["authorization"])
def test_sets_parent_flow_when_inside_flow(researcher, writer):
class MyFlow(Flow):
@start()