diff --git a/lib/crewai/src/crewai/task.py b/lib/crewai/src/crewai/task.py index cfcb01799..fb0275364 100644 --- a/lib/crewai/src/crewai/task.py +++ b/lib/crewai/src/crewai/task.py @@ -1,6 +1,7 @@ from __future__ import annotations import asyncio +import contextvars from concurrent.futures import Future from copy import copy as shallow_copy import datetime @@ -524,10 +525,11 @@ class Task(BaseModel): ) -> Future[TaskOutput]: """Execute the task asynchronously.""" future: Future[TaskOutput] = Future() + ctx = contextvars.copy_context() threading.Thread( daemon=True, - target=self._execute_task_async, - args=(agent, context, tools, future), + target=ctx.run, + args=(self._execute_task_async, agent, context, tools, future), ).start() return future diff --git a/lib/crewai/src/crewai/utilities/streaming.py b/lib/crewai/src/crewai/utilities/streaming.py index 8f43e8ef0..ded67527d 100644 --- a/lib/crewai/src/crewai/utilities/streaming.py +++ b/lib/crewai/src/crewai/utilities/streaming.py @@ -2,6 +2,7 @@ import asyncio from collections.abc import AsyncIterator, Callable, Iterator +import contextvars import queue import threading from typing import Any, NamedTuple @@ -240,7 +241,8 @@ def create_chunk_generator( Yields: StreamChunk objects as they arrive. """ - thread = threading.Thread(target=run_func, daemon=True) + ctx = contextvars.copy_context() + thread = threading.Thread(target=ctx.run, args=(run_func,), daemon=True) thread.start() try: