Skip to content

Commit 91757a6

Browse files
committed
Add async instrumentation for responses
1 parent 616110e commit 91757a6

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

sentry_sdk/integrations/openai.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@
2828
except ImportError:
2929
raise DidNotEnable("OpenAI not installed")
3030

31+
RESPONSES_API_ENABLED = True
3132
try:
3233
# responses API support was instroduces in v1.66.0
33-
from openai.resources.responses import Responses
34+
from openai.resources.responses import Responses, AsyncResponses
3435
except ImportError:
35-
Responses = None
36+
RESPONSES_API_ENABLED = False
3637

3738

3839
class OpenAIIntegration(Integration):
@@ -60,8 +61,9 @@ def setup_once():
6061
Embeddings.create = _wrap_embeddings_create(Embeddings.create)
6162
AsyncEmbeddings.create = _wrap_async_embeddings_create(AsyncEmbeddings.create)
6263

63-
if Responses is not None:
64+
if RESPONSES_API_ENABLED:
6465
Responses.create = _wrap_responses_create(Responses.create)
66+
AsyncResponses.create = _wrap_async_responses_create(AsyncResponses.create)
6567

6668
def count_tokens(self, s):
6769
# type: (OpenAIIntegration, str) -> int
@@ -552,3 +554,37 @@ def _sentry_patched_create_sync(*args, **kwargs):
552554
return _execute_sync(f, *args, **kwargs)
553555

554556
return _sentry_patched_create_sync
557+
558+
559+
def _wrap_async_responses_create(f):
560+
# type: (Any) -> Any
561+
async def _execute_async(f, *args, **kwargs):
562+
# type: (Any, *Any, **Any) -> Any
563+
gen = _new_responses_create_common(f, *args, **kwargs)
564+
565+
try:
566+
f, args, kwargs = next(gen)
567+
except StopIteration as e:
568+
return await e.value
569+
570+
try:
571+
try:
572+
result = await f(*args, **kwargs)
573+
except Exception as e:
574+
_capture_exception(e)
575+
raise e from None
576+
577+
return gen.send(result)
578+
except StopIteration as e:
579+
return e.value
580+
581+
@wraps(f)
582+
async def _sentry_patched_create_async(*args, **kwargs):
583+
# type: (*Any, **Any) -> Any
584+
integration = sentry_sdk.get_client().get_integration(OpenAIIntegration)
585+
if integration is None:
586+
return await f(*args, **kwargs)
587+
588+
return await _execute_async(f, *args, **kwargs)
589+
590+
return _sentry_patched_create_async

0 commit comments

Comments
 (0)