File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11"""Private async execution utilities."""
22
33import asyncio
4+ import contextvars
45from concurrent .futures import ThreadPoolExecutor
56from typing import Awaitable , Callable , TypeVar
67
@@ -27,5 +28,6 @@ def execute() -> T:
2728 return asyncio .run (execute_async ())
2829
2930 with ThreadPoolExecutor () as executor :
30- future = executor .submit (execute )
31+ context = contextvars .copy_context ()
32+ future = executor .submit (context .run , execute )
3133 return future .result ()
Original file line number Diff line number Diff line change 1+ import contextvars
2+
3+ import pytest
4+
5+ from strands import Agent , tool
6+
7+
8+ @pytest .fixture
9+ def result ():
10+ return {}
11+
12+
13+ @pytest .fixture
14+ def contextvar ():
15+ return contextvars .ContextVar ("agent" )
16+
17+
18+ @pytest .fixture
19+ def context_tool (result , contextvar ):
20+ @tool (name = "context_tool" )
21+ def tool_ ():
22+ result ["context_value" ] = contextvar .get ("local_context" )
23+
24+ return tool_
25+
26+
27+ @pytest .fixture
28+ def agent (context_tool ):
29+ return Agent (tools = [context_tool ])
30+
31+
32+ def test_agent_invoke_context_sharing (result , contextvar , agent ):
33+ contextvar .set ("shared_context" )
34+ agent ("Execute context_tool" )
35+
36+ tru_context = result ["context_value" ]
37+ exp_context = contextvar .get ()
38+ assert tru_context == exp_context
39+
40+
41+ def test_tool_call_context_sharing (result , contextvar , agent ):
42+ contextvar .set ("shared_context" )
43+ agent .tool .context_tool ()
44+
45+ tru_context = result ["context_value" ]
46+ exp_context = contextvar .get ()
47+ assert tru_context == exp_context
You can’t perform that action at this time.
0 commit comments