mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
feat(llm): added Claude Opus 4.5 model and corresponding test (#11841)
This commit is contained in:
parent
6d8cca43a8
commit
991f1a242c
@ -59,6 +59,7 @@ export const VERIFIED_ANTHROPIC_MODELS = [
|
||||
"claude-haiku-4-5-20251001",
|
||||
"claude-opus-4-20250514",
|
||||
"claude-opus-4-1-20250805",
|
||||
"claude-opus-4-5-20251101",
|
||||
];
|
||||
|
||||
// LiteLLM does not return the compatible Mistral models with the provider, so we list them here to set them ourselves
|
||||
|
||||
@ -188,12 +188,14 @@ class LLM(RetryMixin, DebugMixin):
|
||||
if 'claude-opus-4-1' in self.config.model.lower():
|
||||
kwargs['thinking'] = {'type': 'disabled'}
|
||||
|
||||
# Anthropic constraint: Opus 4.1 and Sonnet 4 models cannot accept both temperature and top_p
|
||||
# Anthropic constraint: Opus 4.1, Opus 4.5, and Sonnet 4 models cannot accept both temperature and top_p
|
||||
# Prefer temperature (drop top_p) if both are specified.
|
||||
_model_lower = self.config.model.lower()
|
||||
# Apply to Opus 4.1 and Sonnet 4 models to avoid API errors
|
||||
# Apply to Opus 4.1, Opus 4.5, and Sonnet 4 models to avoid API errors
|
||||
if (
|
||||
('claude-opus-4-1' in _model_lower) or ('claude-sonnet-4' in _model_lower)
|
||||
('claude-opus-4-1' in _model_lower)
|
||||
or ('claude-opus-4-5' in _model_lower)
|
||||
or ('claude-sonnet-4' in _model_lower)
|
||||
) and ('temperature' in kwargs and 'top_p' in kwargs):
|
||||
kwargs.pop('top_p', None)
|
||||
|
||||
|
||||
@ -1255,6 +1255,25 @@ def test_opus_41_keeps_temperature_top_p(mock_completion):
|
||||
assert 'top_p' not in call_kwargs
|
||||
|
||||
|
||||
@patch('openhands.llm.llm.litellm_completion')
|
||||
def test_opus_45_keeps_temperature_drops_top_p(mock_completion):
|
||||
mock_completion.return_value = {
|
||||
'choices': [{'message': {'content': 'ok'}}],
|
||||
}
|
||||
config = LLMConfig(
|
||||
model='anthropic/claude-opus-4-5-20251101',
|
||||
api_key='k',
|
||||
temperature=0.7,
|
||||
top_p=0.9,
|
||||
)
|
||||
llm = LLM(config, service_id='svc')
|
||||
llm.completion(messages=[{'role': 'user', 'content': 'hi'}])
|
||||
call_kwargs = mock_completion.call_args[1]
|
||||
assert call_kwargs.get('temperature') == 0.7
|
||||
# Anthropic rejects both temperature and top_p together on Opus 4.5; we keep temperature and drop top_p
|
||||
assert 'top_p' not in call_kwargs
|
||||
|
||||
|
||||
@patch('openhands.llm.llm.litellm_completion')
|
||||
def test_sonnet_4_keeps_temperature_drops_top_p(mock_completion):
|
||||
mock_completion.return_value = {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user