Files
assafelovic--gpt-researcher/tests/test_llm_usage_tracking.py
T
2026-07-13 12:39:12 +08:00

43 lines
1.3 KiB
Python

import asyncio
import unittest
from gpt_researcher.llm_provider.generic.base import GenericLLMProvider
class _Chunk:
def __init__(self, content, usage_metadata=None, response_metadata=None):
self.content = content
self.usage_metadata = usage_metadata
self.response_metadata = response_metadata or {}
class _StreamingLLM:
async def astream(self, messages, **kwargs):
yield _Chunk("Hello")
yield _Chunk(
"",
usage_metadata={"input_tokens": 321, "output_tokens": 123},
response_metadata={"usage": {"input_tokens": 321, "output_tokens": 123}},
)
class TestLLMUsageTracking(unittest.TestCase):
def test_stream_response_captures_usage_from_empty_final_chunk(self):
provider = GenericLLMProvider(_StreamingLLM(), verbose=False)
response = asyncio.run(provider.stream_response([{"role": "user", "content": "hi"}]))
self.assertEqual(response, "Hello")
self.assertEqual(
provider.last_usage_metadata,
{"input_tokens": 321, "output_tokens": 123},
)
self.assertEqual(
provider.last_response_metadata.get("usage"),
{"input_tokens": 321, "output_tokens": 123},
)
if __name__ == "__main__":
unittest.main()