Skip to content

Commit 568651a

Browse files
test(llm): add precedence tests for extra_headers and merge with extended thinking default
- completion: merge LLM.extra_headers with interleaved-thinking header - responses: ensure call-time extra_headers override config - replace deprecated service_id in tests with usage_id Co-authored-by: openhands <openhands@all-hands.dev>
1 parent f263b88 commit 568651a

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

tests/sdk/llm/test_llm.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def test_llm_forwards_extra_headers_to_litellm(mock_completion):
271271

272272
headers = {"anthropic-beta": "context-1m-2025-08-07"} # Enable 1M context
273273
llm = LLM(
274-
service_id="test-llm",
274+
usage_id="test-llm",
275275
model="gpt-4o",
276276
api_key=SecretStr("test_key"),
277277
extra_headers=headers,
@@ -316,7 +316,7 @@ def test_llm_responses_forwards_extra_headers_to_litellm(mock_responses):
316316

317317
headers = {"anthropic-beta": "context-1m-2025-08-07"}
318318
llm = LLM(
319-
service_id="test-llm",
319+
usage_id="test-llm",
320320
model="gpt-4o",
321321
api_key=SecretStr("test_key"),
322322
extra_headers=headers,
@@ -334,16 +334,16 @@ def test_llm_responses_forwards_extra_headers_to_litellm(mock_responses):
334334
assert kwargs.get("extra_headers") == headers
335335

336336

337-
338-
339337
@patch("openhands.sdk.llm.llm.litellm_completion")
340-
def test_completion_merges_llm_extra_headers_with_extended_thinking_default(mock_completion):
338+
def test_completion_merges_llm_extra_headers_with_extended_thinking_default(
339+
mock_completion,
340+
):
341341
mock_response = create_mock_litellm_response("ok")
342342
mock_completion.return_value = mock_response
343343

344344
llm = LLM(
345-
service_id="test-llm",
346-
model="claude-sonnet-4-20250514",
345+
usage_id="test-llm",
346+
model="claude-sonnet-4-5-20250514",
347347
api_key=SecretStr("test_key"),
348348
extra_headers={"X-Trace": "1"},
349349
extended_thinking_budget=1000,
@@ -363,13 +363,15 @@ def test_completion_merges_llm_extra_headers_with_extended_thinking_default(mock
363363

364364

365365
@patch("openhands.sdk.llm.llm.litellm_completion")
366-
def test_completion_call_time_extra_headers_override_config_and_defaults(mock_completion):
366+
def test_completion_call_time_extra_headers_override_config_and_defaults(
367+
mock_completion,
368+
):
367369
mock_response = create_mock_litellm_response("ok")
368370
mock_completion.return_value = mock_response
369371

370372
llm = LLM(
371-
service_id="test-llm",
372-
model="claude-sonnet-4-20250514",
373+
usage_id="test-llm",
374+
model="claude-sonnet-4-5-20250514",
373375
api_key=SecretStr("test_key"),
374376
# Config sets a conflicting header
375377
extra_headers={"anthropic-beta": "context-1m-2025-08-07", "X-Trace": "1"},
@@ -417,7 +419,7 @@ def test_responses_call_time_extra_headers_override_config(mock_responses):
417419
mock_responses.return_value = resp
418420

419421
llm = LLM(
420-
service_id="test-llm",
422+
usage_id="test-llm",
421423
model="gpt-4o",
422424
api_key=SecretStr("test_key"),
423425
extra_headers={"X-Trace": "1"},
@@ -434,6 +436,7 @@ def test_responses_call_time_extra_headers_override_config(mock_responses):
434436
assert headers.get("Header-Only") == "H"
435437
assert "X-Trace" not in headers
436438

439+
437440
def test_llm_vision_support(default_llm):
438441
"""Test LLM vision support detection."""
439442
llm = default_llm

0 commit comments

Comments
 (0)