Skip to content

Commit 62c13c7

Browse files
committed
Add durable_openai_agent_orchestrator decorator
1 parent 2bbc2c4 commit 62c13c7

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

samples-v2/openai_agents/function_app.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,32 @@
66
from activity_call_tracker import ActivityCallTracker
77
from model_invoker import ModelInvoker, ActivityModelInput
88
import event_loop
9+
from functools import wraps
910

1011

1112
app = 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")
1537
async 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
2346
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
3850

3951

4052
@app.activity_trigger(input_name="input")

0 commit comments

Comments
 (0)