Skip to content

Commit f5c51fc

Browse files
authored
Fix openai count_tokens (#5281)
### Description `choice.message` is a [`ChatCompletionMessage`](https://github.com/openai/openai-python/blob/1d77265e3d31afda8df6528a1926c854ef27de3b/src/openai/types/chat/chat_completion.py#L39-L40) and not a string #### Issues * resolves: #5277 * resolves: PY-2024
1 parent a979755 commit f5c51fc

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

sentry_sdk/integrations/openai.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,12 @@ def setup_once() -> None:
8484
AsyncResponses.create = _wrap_async_responses_create(AsyncResponses.create)
8585

8686
def count_tokens(self: "OpenAIIntegration", s: str) -> int:
87-
if self.tiktoken_encoding is not None:
87+
if self.tiktoken_encoding is None:
88+
return 0
89+
try:
8890
return len(self.tiktoken_encoding.encode_ordinary(s))
89-
return 0
91+
except Exception:
92+
return 0
9093

9194

9295
def _capture_exception(exc: "Any", manual_span_cleanup: bool = True) -> None:
@@ -157,8 +160,8 @@ def _calculate_token_usage(
157160
output_tokens += count_tokens(message)
158161
elif hasattr(response, "choices"):
159162
for choice in response.choices:
160-
if hasattr(choice, "message"):
161-
output_tokens += count_tokens(choice.message)
163+
if hasattr(choice, "message") and hasattr(choice.message, "content"):
164+
output_tokens += count_tokens(choice.message.content)
162165

163166
# Do not set token data if it is 0
164167
input_tokens = input_tokens or None

0 commit comments

Comments
 (0)