Skip to content

Commit a8a21f8

Browse files
committed
Handle generators correctly
1 parent cd71e10 commit a8a21f8

File tree

2 files changed

+70
-14
lines changed

2 files changed

+70
-14
lines changed

sentry_sdk/integrations/anthropic.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,17 @@ def _wrap_message_create(f):
176176
def _execute_sync(f, *args, **kwargs):
177177
# type: (Any, *Any, **Any) -> Any
178178
gen = _sentry_patched_create_common(f, *args, **kwargs)
179-
f, args, kwargs = next(gen)
180-
return gen.send(f(*args, **kwargs))
179+
180+
try:
181+
f, args, kwargs = next(gen)
182+
except StopIteration as e:
183+
return e.value
184+
185+
try:
186+
result = f(*args, **kwargs)
187+
return gen.send(result)
188+
except StopIteration as e:
189+
return e.value
181190

182191
@wraps(f)
183192
@ensure_integration_enabled(AnthropicIntegration, f)
@@ -194,8 +203,17 @@ def _wrap_async_message_create(f):
194203
async def _execute_async(f, *args, **kwargs):
195204
# type: (Any, *Any, **Any) -> Any
196205
gen = _sentry_patched_create_common(f, *args, **kwargs)
197-
f, args, kwargs = next(gen)
198-
return gen.send(await f(*args, **kwargs))
206+
207+
try:
208+
f, args, kwargs = next(gen)
209+
except StopIteration as e:
210+
return await e.value
211+
212+
try:
213+
result = await f(*args, **kwargs)
214+
return gen.send(result)
215+
except StopIteration as e:
216+
return e.value
199217

200218
@wraps(f)
201219
@ensure_integration_enabled(AnthropicIntegration, f)

sentry_sdk/integrations/openai.py

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@ def __init__(self, include_prompts=True, tiktoken_encoding_name=None):
4747
def setup_once():
4848
# type: () -> None
4949
Completions.create = _wrap_chat_completion_create(Completions.create)
50-
AsyncCompletions.create = _wrap_chat_completion_create(AsyncCompletions.create)
50+
AsyncCompletions.create = _wrap_async_chat_completion_create(
51+
AsyncCompletions.create
52+
)
5153
Embeddings.create = _wrap_embeddings_create(Embeddings.create)
52-
AsyncEmbeddings.create = _wrap_embeddings_create(AsyncEmbeddings.create)
54+
AsyncEmbeddings.create = _wrap_async_embeddings_create(AsyncEmbeddings.create)
5355

5456
def count_tokens(self, s):
5557
# type: (OpenAIIntegration, str) -> int
@@ -212,8 +214,17 @@ def _wrap_chat_completion_create(f):
212214
def _execute_sync(f, *args, **kwargs):
213215
# type: (Any, *Any, **Any) -> Any
214216
gen = _new_chat_completion_common(f, *args, **kwargs)
215-
f, args, kwargs = next(gen)
216-
return gen.send(f(*args, **kwargs))
217+
218+
try:
219+
f, args, kwargs = next(gen)
220+
except StopIteration as e:
221+
return e.value
222+
223+
try:
224+
result = f(*args, **kwargs)
225+
return gen.send(result)
226+
except StopIteration as e:
227+
return e.value
217228

218229
@wraps(f)
219230
@ensure_integration_enabled(OpenAIIntegration, f)
@@ -230,8 +241,17 @@ def _wrap_async_chat_completion_create(f):
230241
async def _execute_async(f, *args, **kwargs):
231242
# type: (Any, *Any, **Any) -> Any
232243
gen = _new_chat_completion_common(f, *args, **kwargs)
233-
f, args, kwargs = next(gen)
234-
return gen.send(await f(*args, **kwargs))
244+
245+
try:
246+
f, args, kwargs = next(gen)
247+
except StopIteration as e:
248+
return await e.value
249+
250+
try:
251+
result = await f(*args, **kwargs)
252+
return gen.send(result)
253+
except StopIteration as e:
254+
return e.value
235255

236256
@wraps(f)
237257
@ensure_integration_enabled(OpenAIIntegration, f)
@@ -295,8 +315,17 @@ def _wrap_embeddings_create(f):
295315
def _execute_sync(f, *args, **kwargs):
296316
# type: (Any, *Any, **Any) -> Any
297317
gen = _new_embeddings_create_common(f, *args, **kwargs)
298-
f, args, kwargs = next(gen)
299-
return gen.send(f(*args, **kwargs))
318+
319+
try:
320+
f, args, kwargs = next(gen)
321+
except StopIteration as e:
322+
return e.value
323+
324+
try:
325+
result = f(*args, **kwargs)
326+
return gen.send(result)
327+
except StopIteration as e:
328+
return e.value
300329

301330
@wraps(f)
302331
@ensure_integration_enabled(OpenAIIntegration, f)
@@ -312,8 +341,17 @@ def _wrap_async_embeddings_create(f):
312341
async def _execute_async(f, *args, **kwargs):
313342
# type: (Any, *Any, **Any) -> Any
314343
gen = _new_embeddings_create_common(f, *args, **kwargs)
315-
f, args, kwargs = next(gen)
316-
return gen.send(await f(*args, **kwargs))
344+
345+
try:
346+
f, args, kwargs = next(gen)
347+
except StopIteration as e:
348+
return await e.value
349+
350+
try:
351+
result = await f(*args, **kwargs)
352+
return gen.send(result)
353+
except StopIteration as e:
354+
return e.value
317355

318356
@wraps(f)
319357
@ensure_integration_enabled(OpenAIIntegration, f)

0 commit comments

Comments
 (0)