mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-03 14:09:24 +00:00
* Fix structured output leaks in tool-calling loops * addressing comments * drop scripts * Update Gemini agent tests to include structured output with thoughts and bump model version to 2.5-flash * merge * Update Anthropic test cases to use new model and tool structure - Changed the model from "claude-3-5-haiku-20241022" to "claude-sonnet-4-6" in the test setup. - Updated the request and response formats in the YAML test cassette to reflect the new tool structure and improved content formatting. - Adjusted the expected response body to match the new output format from the assistant, including changes in tool usage and response details. - Increased rate limit values in the response headers for better testing scenarios. * adjusted bedrock cassettes * adjusting cassettes for bedrock * fix test * Update VCR configuration to use 'host' instead of 'bedrock_host' for request matching
124 lines
3.4 KiB
Python
124 lines
3.4 KiB
Python
"""Tests for Bedrock async completion functionality.
|
|
|
|
Note: These tests are skipped in CI because VCR.py does not support
|
|
aiobotocore's HTTP session. The cassettes were recorded locally but
|
|
cannot be played back properly in CI.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
from crewai.llm import LLM
|
|
|
|
SKIP_REASON = "VCR does not support aiobotocore async HTTP client"
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_basic_call():
|
|
"""Test basic async call with Bedrock."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6")
|
|
|
|
result = await llm.acall("Say hello")
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|
|
assert len(result) > 0
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_with_temperature():
|
|
"""Test async call with temperature parameter."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6", temperature=0.1)
|
|
|
|
result = await llm.acall("Say the word 'test' once")
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_with_max_tokens():
|
|
"""Test async call with max_tokens parameter."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6", max_tokens=10)
|
|
|
|
result = await llm.acall("Write a very long story about a dragon.")
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|
|
assert len(result.split()) <= 10
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_with_system_message():
|
|
"""Test async call with system message."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6")
|
|
|
|
messages = [
|
|
{"role": "system", "content": "You are a helpful assistant."},
|
|
{"role": "user", "content": "What is 2+2?"}
|
|
]
|
|
|
|
result = await llm.acall(messages)
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_conversation():
|
|
"""Test async call with conversation history."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6")
|
|
|
|
messages = [
|
|
{"role": "user", "content": "My name is Alice."},
|
|
{"role": "assistant", "content": "Hello Alice! Nice to meet you."},
|
|
{"role": "user", "content": "What is my name?"}
|
|
]
|
|
|
|
result = await llm.acall(messages)
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_multiple_calls():
|
|
"""Test making multiple async calls in sequence."""
|
|
llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6")
|
|
|
|
result1 = await llm.acall("What is 1+1?")
|
|
result2 = await llm.acall("What is 2+2?")
|
|
|
|
assert result1 is not None
|
|
assert result2 is not None
|
|
assert isinstance(result1, str)
|
|
assert isinstance(result2, str)
|
|
|
|
|
|
@pytest.mark.vcr()
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.skip(reason=SKIP_REASON)
|
|
async def test_bedrock_async_with_parameters():
|
|
"""Test async call with multiple parameters."""
|
|
llm = LLM(
|
|
model="bedrock/us.anthropic.claude-sonnet-4-6",
|
|
temperature=0.7,
|
|
max_tokens=100,
|
|
)
|
|
|
|
result = await llm.acall("Tell me a short fact")
|
|
|
|
assert result is not None
|
|
assert isinstance(result, str)
|