|
28 | 28 | except ImportError: |
29 | 29 | raise DidNotEnable("OpenAI not installed") |
30 | 30 |
|
| 31 | +RESPONSES_API_ENABLED = True |
31 | 32 | try: |
32 | 33 | # responses API support was instroduces in v1.66.0 |
33 | | - from openai.resources.responses import Responses |
| 34 | + from openai.resources.responses import Responses, AsyncResponses |
34 | 35 | except ImportError: |
35 | | - Responses = None |
| 36 | + RESPONSES_API_ENABLED = False |
36 | 37 |
|
37 | 38 |
|
38 | 39 | class OpenAIIntegration(Integration): |
@@ -60,8 +61,9 @@ def setup_once(): |
60 | 61 | Embeddings.create = _wrap_embeddings_create(Embeddings.create) |
61 | 62 | AsyncEmbeddings.create = _wrap_async_embeddings_create(AsyncEmbeddings.create) |
62 | 63 |
|
63 | | - if Responses is not None: |
| 64 | + if RESPONSES_API_ENABLED: |
64 | 65 | Responses.create = _wrap_responses_create(Responses.create) |
| 66 | + AsyncResponses.create = _wrap_async_responses_create(AsyncResponses.create) |
65 | 67 |
|
66 | 68 | def count_tokens(self, s): |
67 | 69 | # type: (OpenAIIntegration, str) -> int |
@@ -552,3 +554,37 @@ def _sentry_patched_create_sync(*args, **kwargs): |
552 | 554 | return _execute_sync(f, *args, **kwargs) |
553 | 555 |
|
554 | 556 | 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