fix: ensure token usage recording, validate response model on stream
Some checks failed
Build uv cache / build-cache (3.10) (push) Has been cancelled
Build uv cache / build-cache (3.11) (push) Has been cancelled
Build uv cache / build-cache (3.12) (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Notify Downstream / notify-downstream (push) Has been cancelled
Check Documentation Broken Links / Check broken links (push) Has been cancelled
Build uv cache / build-cache (3.13) (push) Has been cancelled

This commit is contained in:
Greyson LaLonde
2025-12-10 20:32:10 -05:00
committed by GitHub
parent 8e99d490b0
commit bdafe0fac7
312 changed files with 7846 additions and 33124 deletions

View File

@@ -592,3 +592,32 @@ def test_openai_response_format_none():
assert isinstance(result, str)
assert len(result) > 0
@pytest.mark.vcr()
def test_openai_streaming_returns_usage_metrics():
"""
Test that OpenAI streaming calls return proper token usage metrics.
"""
agent = Agent(
role="Research Assistant",
goal="Find information about the capital of France",
backstory="You are a helpful research assistant.",
llm=LLM(model="gpt-4o-mini", stream=True),
verbose=True,
)
task = Task(
description="What is the capital of France?",
expected_output="The capital of France",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task])
result = crew.kickoff()
assert result.token_usage is not None
assert result.token_usage.total_tokens > 0
assert result.token_usage.prompt_tokens > 0
assert result.token_usage.completion_tokens > 0
assert result.token_usage.successful_requests >= 1

View File

@@ -3,6 +3,7 @@
import pytest
import tiktoken
from crewai import Agent, Task, Crew
from crewai.llm import LLM
@@ -137,3 +138,33 @@ async def test_openai_async_with_parameters():
assert result is not None
assert isinstance(result, str)
@pytest.mark.vcr()
@pytest.mark.asyncio
async def test_openai_async_streaming_returns_usage_metrics():
"""
Test that OpenAI async streaming calls return proper token usage metrics.
"""
agent = Agent(
role="Research Assistant",
goal="Find information about the capital of Italy",
backstory="You are a helpful research assistant.",
llm=LLM(model="gpt-4o-mini", stream=True),
verbose=True,
)
task = Task(
description="What is the capital of Italy?",
expected_output="The capital of Italy",
agent=agent,
)
crew = Crew(agents=[agent], tasks=[task])
result = await crew.kickoff_async()
assert result.token_usage is not None
assert result.token_usage.total_tokens > 0
assert result.token_usage.prompt_tokens > 0
assert result.token_usage.completion_tokens > 0
assert result.token_usage.successful_requests >= 1