6
6
from activity_call_tracker import ActivityCallTracker
7
7
from model_invoker import ModelInvoker , ActivityModelInput
8
8
import event_loop
9
+ from functools import wraps
9
10
10
11
11
12
app = func .FunctionApp (http_auth_level = func .AuthLevel .FUNCTION )
12
13
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
+
13
35
@app .route (route = "orchestrators/{functionName}" )
14
36
@app .durable_client_input (client_name = "client" )
15
37
async def orchestration_starter (req : func .HttpRequest , client ):
@@ -20,21 +42,11 @@ async def orchestration_starter(req: func.HttpRequest, client):
20
42
21
43
22
44
@app .orchestration_trigger (context_name = "context" )
45
+ @durable_openai_agent_orchestrator
23
46
def 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
38
50
39
51
40
52
@app .activity_trigger (input_name = "input" )
0 commit comments