Skip to content
This repository was archived by the owner on Nov 21, 2024. It is now read-only.

Commit b84e002

Browse files
author
Erick Friis
authored
standard-tests: test that only one chunk sets input_tokens (langchain-ai#27177)
1 parent 9b7bdf1 commit b84e002

File tree

1 file changed

+15
-4
lines changed
  • libs/standard-tests/langchain_standard_tests/integration_tests

1 file changed

+15
-4
lines changed

libs/standard-tests/langchain_standard_tests/integration_tests/chat_models.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import base64
22
import json
3-
from typing import List, Optional
3+
from typing import List, Optional, cast
44

55
import httpx
66
import pytest
@@ -209,10 +209,21 @@ def test_usage_metadata(self, model: BaseChatModel) -> None:
209209
def test_usage_metadata_streaming(self, model: BaseChatModel) -> None:
210210
if not self.returns_usage_metadata:
211211
pytest.skip("Not implemented.")
212-
full: Optional[BaseMessageChunk] = None
213-
for chunk in model.stream("Hello"):
212+
full: Optional[AIMessageChunk] = None
213+
for chunk in model.stream("Write me 2 haikus. Only include the haikus."):
214214
assert isinstance(chunk, AIMessageChunk)
215-
full = chunk if full is None else full + chunk
215+
# only one chunk is allowed to set usage_metadata.input_tokens
216+
# if multiple do, it's likely a bug that will result in overcounting
217+
# input tokens
218+
if full and full.usage_metadata and full.usage_metadata["input_tokens"]:
219+
assert (
220+
not chunk.usage_metadata or not chunk.usage_metadata["input_tokens"]
221+
), (
222+
"Only one chunk should set input_tokens,"
223+
" the rest should be 0 or None"
224+
)
225+
full = chunk if full is None else cast(AIMessageChunk, full + chunk)
226+
216227
assert isinstance(full, AIMessageChunk)
217228
assert full.usage_metadata is not None
218229
assert isinstance(full.usage_metadata["input_tokens"], int)

0 commit comments

Comments
 (0)