66from activity_call_tracker import ActivityCallTracker
77from model_invoker import ModelInvoker , ActivityModelInput
88import event_loop
9+ from functools import wraps
910
1011
1112app = func .FunctionApp (http_auth_level = func .AuthLevel .FUNCTION )
1213
14+
15+ def durable_openai_agent_orchestrator (func ):
16+ @wraps (func )
17+ def wrapper (context ):
18+ event_loop .ensure_event_loop ()
19+ activity_call_tracker = ActivityCallTracker (context )
20+ durable_openai_runner = DurableOpenAIRunner (activity_call_tracker = activity_call_tracker )
21+ set_default_agent_runner (durable_openai_runner )
22+
23+ try :
24+ result = func (context )
25+ return result
26+ except YieldException as e :
27+ yield from activity_call_tracker .yield_and_clear_tasks ()
28+ yield e .task
29+ finally :
30+ yield from activity_call_tracker .yield_and_clear_tasks ()
31+
32+ return wrapper
33+
34+
1335@app .route (route = "orchestrators/{functionName}" )
1436@app .durable_client_input (client_name = "client" )
1537async def orchestration_starter (req : func .HttpRequest , client ):
@@ -20,21 +42,11 @@ async def orchestration_starter(req: func.HttpRequest, client):
2042
2143
2244@app .orchestration_trigger (context_name = "context" )
45+ @durable_openai_agent_orchestrator
2346def basic_hello_world_orchestrator (context ):
24- event_loop .ensure_event_loop ()
25- activity_call_tracker = ActivityCallTracker (context )
26- durable_openai_runner = DurableOpenAIRunner (activity_call_tracker = activity_call_tracker )
27- set_default_agent_runner (durable_openai_runner )
28-
29- try :
30- from basic .hello_world import main
31- result = main ()
32- return result
33- except YieldException as e :
34- yield from activity_call_tracker .yield_and_clear_tasks ()
35- yield e .task
36- finally :
37- yield from activity_call_tracker .yield_and_clear_tasks ()
47+ from basic .hello_world import main
48+ result = main ()
49+ return result
3850
3951
4052@app .activity_trigger (input_name = "input" )
0 commit comments