mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 16:18:30 +00:00
feat: add context window size for o3-mini model (#2192)
* feat: add context window size for o3-mini model Fixes #2191 Co-Authored-By: Joe Moura <joao@crewai.com> * feat: add context window validation and tests - Add validation for context window size bounds (1024-2097152) - Add test for context window validation - Fix test import error Co-Authored-By: Joe Moura <joao@crewai.com> * style: fix import sorting in llm_test.py Co-Authored-By: Joe Moura <joao@crewai.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com> Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
b4e2db0306
commit
e3c5c174ee
@@ -64,6 +64,7 @@ LLM_CONTEXT_WINDOW_SIZES = {
|
|||||||
"gpt-4-turbo": 128000,
|
"gpt-4-turbo": 128000,
|
||||||
"o1-preview": 128000,
|
"o1-preview": 128000,
|
||||||
"o1-mini": 128000,
|
"o1-mini": 128000,
|
||||||
|
"o3-mini": 200000, # Based on official o3-mini specifications
|
||||||
# gemini
|
# gemini
|
||||||
"gemini-2.0-flash": 1048576,
|
"gemini-2.0-flash": 1048576,
|
||||||
"gemini-1.5-pro": 2097152,
|
"gemini-1.5-pro": 2097152,
|
||||||
@@ -485,10 +486,23 @@ class LLM:
|
|||||||
"""
|
"""
|
||||||
Returns the context window size, using 75% of the maximum to avoid
|
Returns the context window size, using 75% of the maximum to avoid
|
||||||
cutting off messages mid-thread.
|
cutting off messages mid-thread.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: If a model's context window size is outside valid bounds (1024-2097152)
|
||||||
"""
|
"""
|
||||||
if self.context_window_size != 0:
|
if self.context_window_size != 0:
|
||||||
return self.context_window_size
|
return self.context_window_size
|
||||||
|
|
||||||
|
MIN_CONTEXT = 1024
|
||||||
|
MAX_CONTEXT = 2097152 # Current max from gemini-1.5-pro
|
||||||
|
|
||||||
|
# Validate all context window sizes
|
||||||
|
for key, value in LLM_CONTEXT_WINDOW_SIZES.items():
|
||||||
|
if value < MIN_CONTEXT or value > MAX_CONTEXT:
|
||||||
|
raise ValueError(
|
||||||
|
f"Context window for {key} must be between {MIN_CONTEXT} and {MAX_CONTEXT}"
|
||||||
|
)
|
||||||
|
|
||||||
self.context_window_size = int(
|
self.context_window_size = int(
|
||||||
DEFAULT_CONTEXT_WINDOW_SIZE * CONTEXT_WINDOW_USAGE_RATIO
|
DEFAULT_CONTEXT_WINDOW_SIZE * CONTEXT_WINDOW_USAGE_RATIO
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import pytest
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess
|
from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess
|
||||||
from crewai.llm import LLM
|
from crewai.llm import CONTEXT_WINDOW_USAGE_RATIO, LLM
|
||||||
from crewai.utilities.events import crewai_event_bus
|
from crewai.utilities.events import crewai_event_bus
|
||||||
from crewai.utilities.events.tool_usage_events import ToolExecutionErrorEvent
|
from crewai.utilities.events.tool_usage_events import ToolExecutionErrorEvent
|
||||||
from crewai.utilities.token_counter_callback import TokenCalcHandler
|
from crewai.utilities.token_counter_callback import TokenCalcHandler
|
||||||
@@ -285,6 +285,23 @@ def test_o3_mini_reasoning_effort_medium():
|
|||||||
assert isinstance(result, str)
|
assert isinstance(result, str)
|
||||||
assert "Paris" in result
|
assert "Paris" in result
|
||||||
|
|
||||||
|
def test_context_window_validation():
|
||||||
|
"""Test that context window validation works correctly."""
|
||||||
|
# Test valid window size
|
||||||
|
llm = LLM(model="o3-mini")
|
||||||
|
assert llm.get_context_window_size() == int(200000 * CONTEXT_WINDOW_USAGE_RATIO)
|
||||||
|
|
||||||
|
# Test invalid window size
|
||||||
|
with pytest.raises(ValueError) as excinfo:
|
||||||
|
with patch.dict(
|
||||||
|
"crewai.llm.LLM_CONTEXT_WINDOW_SIZES",
|
||||||
|
{"test-model": 500}, # Below minimum
|
||||||
|
clear=True,
|
||||||
|
):
|
||||||
|
llm = LLM(model="test-model")
|
||||||
|
llm.get_context_window_size()
|
||||||
|
assert "must be between 1024 and 2097152" in str(excinfo.value)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.vcr(filter_headers=["authorization"])
|
@pytest.mark.vcr(filter_headers=["authorization"])
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
Reference in New Issue
Block a user