Skip to content

Commit d85b623

Browse files
authored
Merge pull request #25 from thedadams/await-event-handlers
fix: await event_handlers to ensure errors are processed
2 parents 3e8cd9e + 5b9473d commit d85b623

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

gptscript/run.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def __init__(self, subCommand: str, tools: Union[ToolDef | list[ToolDef] | str],
3333
self._rawOutput: Any = None
3434
self._task: Awaitable | None = None
3535
self._resp: httpx.Response | None = None
36+
self._event_tasks: list[Awaitable[None]] = []
3637

3738
def program(self):
3839
return self._program
@@ -157,7 +158,7 @@ async def _request(self, tool: Any):
157158
self._parentCallID = event.id
158159
if self.event_handlers is not None:
159160
for event_handler in self.event_handlers:
160-
asyncio.create_task(event_handler(self, event))
161+
self._event_tasks.append(asyncio.create_task(event_handler(self, event)))
161162

162163
self._resp = None
163164
if self._err != "":
@@ -167,6 +168,14 @@ async def _request(self, tool: Any):
167168
else:
168169
self._state = RunState.Continue
169170

171+
for task in self._event_tasks:
172+
try:
173+
await task
174+
except Exception as e:
175+
print(f"error during event processing: {e}")
176+
177+
self._event_tasks = []
178+
170179
async def aclose(self):
171180
if self._task is None or self._resp is None:
172181
raise Exception("run not started")

tests/test_gptscript.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def gptscript():
2222
pytest.fail("OPENAI_API_KEY not set", pytrace=False)
2323
try:
2424
gptscript = GPTScript(GlobalOptions(apiKey=os.getenv("OPENAI_API_KEY")))
25-
return gptscript
25+
yield gptscript
26+
gptscript.close()
2627
except Exception as e:
2728
pytest.fail(e, pytrace=False)
2829

@@ -387,7 +388,7 @@ async def process_event(r: Run, frame: CallFrame | RunFrame | PromptFrame):
387388
nonlocal confirm_event_found, event_content
388389
if frame.type == RunEventType.callConfirm:
389390
confirm_event_found = True
390-
assert '"ls"' in frame.input or '"dir"' in frame.input, "Unexpected confirm input: " + frame.input
391+
assert '"ls' in frame.input or '"dir' in frame.input, "Unexpected confirm input: " + frame.input
391392
await gptscript.confirm(AuthResponse(frame.id, True))
392393
elif frame.type == RunEventType.callProgress:
393394
for output in frame.output:

0 commit comments

Comments
 (0)