Skip to content

Commit bc5f27d

Browse files
author
Mateusz
committed
Update dev branch with latest changes
1 parent c427b28 commit bc5f27d

File tree

6 files changed

+49
-54
lines changed

6 files changed

+49
-54
lines changed

src/core/domain/anthropic_tools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def model_dump(self, **kwargs) -> dict[str, Any]:
7777

7878

7979
def convert_anthropic_tool_to_openai(
80-
anthropic_tool: dict[str, Any] | AnthropicToolDefinition
80+
anthropic_tool: dict[str, Any] | AnthropicToolDefinition,
8181
) -> OpenAIToolDefinition:
8282
"""
8383
Convert an Anthropic tool definition to OpenAI format using Pydantic models.

src/core/services/backend_service.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -510,9 +510,7 @@ async def call_completion(
510510
session = None
511511

512512
request_session_id = (
513-
request.extra_body.get("session_id")
514-
if request.extra_body
515-
else None
513+
request.extra_body.get("session_id") if request.extra_body else None
516514
)
517515
if (
518516
session is None

tests/unit/core/test_backend_service_enhanced.py

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -767,21 +767,20 @@ async def test_simple_failover(self, service_with_simple_failover, chat_request)
767767
headers={},
768768
)
769769

770-
# Mock get_or_create_backend to return the appropriate backend
771-
original_get_or_create = service_with_simple_failover._get_or_create_backend
772-
773-
async def mock_get_or_create(backend_type):
770+
# Mock the factory's ensure_backend method to return the appropriate backend
771+
async def mock_ensure_backend(backend_type, config, translation_service):
774772
if backend_type == BackendType.OPENAI:
775773
return primary_backend
776774
elif backend_type == BackendType.OPENROUTER:
777775
return fallback_backend
778-
return await original_get_or_create(backend_type)
776+
else:
777+
raise ValueError(f"Unexpected backend type: {backend_type}")
779778

780779
# Act
781780
with patch.object(
782-
service_with_simple_failover,
783-
"_get_or_create_backend",
784-
side_effect=mock_get_or_create,
781+
service_with_simple_failover._factory,
782+
"ensure_backend",
783+
side_effect=mock_ensure_backend,
785784
):
786785
response = await service_with_simple_failover.call_completion(chat_request)
787786

@@ -823,24 +822,23 @@ async def test_complex_failover_first_attempt(
823822
client3 = httpx.AsyncClient()
824823
second_fallback = MockBackend(client3)
825824

826-
# Mock get_or_create_backend
827-
original_get_or_create = service_with_complex_failover._get_or_create_backend
828-
829-
async def mock_get_or_create(backend_type):
825+
# Mock the factory's ensure_backend method to return the appropriate backend
826+
async def mock_ensure_backend(backend_type, config, translation_service):
830827
if backend_type == BackendType.OPENAI:
831828
return primary_backend
832829
elif backend_type == BackendType.ANTHROPIC:
833830
return first_fallback
834831
elif backend_type == BackendType.OPENROUTER:
835832
return second_fallback
836-
return await original_get_or_create(backend_type)
833+
else:
834+
raise ValueError(f"Unexpected backend type: {backend_type}")
837835

838836
# Act
839837
with (
840838
patch.object(
841-
service_with_complex_failover,
842-
"_get_or_create_backend",
843-
side_effect=mock_get_or_create,
839+
service_with_complex_failover._factory,
840+
"ensure_backend",
841+
side_effect=mock_ensure_backend,
844842
),
845843
patch(
846844
"src.core.domain.configuration.backend_config.BackendConfiguration"
@@ -912,24 +910,23 @@ async def test_complex_failover_second_attempt(
912910
headers={},
913911
)
914912

915-
# Mock get_or_create_backend
916-
original_get_or_create = service_with_complex_failover._get_or_create_backend
917-
918-
async def mock_get_or_create(backend_type):
913+
# Mock the factory's ensure_backend method to return the appropriate backend
914+
async def mock_ensure_backend(backend_type, config, translation_service):
919915
if backend_type == BackendType.OPENAI:
920916
return primary_backend
921917
elif backend_type == BackendType.ANTHROPIC:
922918
return first_fallback
923919
elif backend_type == BackendType.OPENROUTER:
924920
return second_fallback
925-
return await original_get_or_create(backend_type)
921+
else:
922+
raise ValueError(f"Unexpected backend type: {backend_type}")
926923

927924
# Act
928925
with (
929926
patch.object(
930-
service_with_complex_failover,
931-
"_get_or_create_backend",
932-
side_effect=mock_get_or_create,
927+
service_with_complex_failover._factory,
928+
"ensure_backend",
929+
side_effect=mock_ensure_backend,
933930
),
934931
patch(
935932
"src.core.domain.configuration.backend_config.BackendConfiguration"
@@ -997,24 +994,23 @@ async def test_complex_failover_all_fail(
997994
"Second failover error"
998995
)
999996

1000-
# Mock get_or_create_backend
1001-
original_get_or_create = service_with_complex_failover._get_or_create_backend
1002-
1003-
async def mock_get_or_create(backend_type):
997+
# Mock the factory's ensure_backend method to return the appropriate backend
998+
async def mock_ensure_backend(backend_type, config, translation_service):
1004999
if backend_type == BackendType.OPENAI:
10051000
return primary_backend
10061001
elif backend_type == BackendType.ANTHROPIC:
10071002
return first_fallback
10081003
elif backend_type == BackendType.OPENROUTER:
10091004
return second_fallback
1010-
return await original_get_or_create(backend_type)
1005+
else:
1006+
raise ValueError(f"Unexpected backend type: {backend_type}")
10111007

10121008
# Act
10131009
with (
10141010
patch.object(
1015-
service_with_complex_failover,
1016-
"_get_or_create_backend",
1017-
side_effect=mock_get_or_create,
1011+
service_with_complex_failover._factory,
1012+
"ensure_backend",
1013+
side_effect=mock_ensure_backend,
10181014
),
10191015
patch(
10201016
"src.core.domain.configuration.backend_config.BackendConfiguration"

tests/unit/test_cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313

1414
def _unwrap_config(
15-
result: AppConfig | tuple[AppConfig, ParameterResolution]
15+
result: AppConfig | tuple[AppConfig, ParameterResolution],
1616
) -> AppConfig:
1717
return result[0] if isinstance(result, tuple) else result
1818

tests/unit/test_performance_tracker.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import logging
22

33
import pytest
4-
54
from src.performance_tracker import (
65
PerformanceMetrics,
76
track_phase,
@@ -15,10 +14,10 @@ def __init__(self, values: list[float]) -> None:
1514
self._last = values[-1]
1615

1716
def __call__(self) -> float:
18-
try:
17+
from contextlib import suppress
18+
19+
with suppress(StopIteration):
1920
self._last = next(self._iterator)
20-
except StopIteration:
21-
pass
2221
return self._last
2322

2423

@@ -34,7 +33,9 @@ def end_phase(self) -> None:
3433
self.ended += 1
3534

3635

37-
def test_performance_metrics_phase_tracking_and_finalize(monkeypatch: pytest.MonkeyPatch) -> None:
36+
def test_performance_metrics_phase_tracking_and_finalize(
37+
monkeypatch: pytest.MonkeyPatch,
38+
) -> None:
3839
time_stub = TimeStub([1.0, 4.0, 5.0])
3940
monkeypatch.setattr("src.performance_tracker.time.time", time_stub)
4041

@@ -81,7 +82,9 @@ def test_performance_metrics_log_summary_logs_breakdown_and_overhead(
8182
assert "overhead=2.500s" in caplog.text
8283

8384

84-
def test_track_request_performance_context_manager_logs_on_exit(monkeypatch: pytest.MonkeyPatch) -> None:
85+
def test_track_request_performance_context_manager_logs_on_exit(
86+
monkeypatch: pytest.MonkeyPatch,
87+
) -> None:
8588
called: list[PerformanceMetrics] = []
8689

8790
def fake_log_summary(self: PerformanceMetrics) -> None:
@@ -99,9 +102,8 @@ def fake_log_summary(self: PerformanceMetrics) -> None:
99102
def test_track_phase_context_manager_ensures_end_called_on_exception() -> None:
100103
dummy = DummyMetrics()
101104

102-
with pytest.raises(RuntimeError):
103-
with track_phase(dummy, "phase-one"):
104-
raise RuntimeError("boom")
105+
with pytest.raises(RuntimeError), track_phase(dummy, "phase-one"):
106+
raise RuntimeError("boom")
105107

106108
assert dummy.started == ["phase-one"]
107109
assert dummy.ended == 1

tests/unit/zai_connector_tests/test_domain_to_connector.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,13 @@ async def zai_backend_fixture(
3737
}
3838

3939
# Add models endpoint mock that can be reused for health checks
40-
for _ in range(3): # Allow multiple calls for health checks
41-
httpx_mock.add_response(
42-
url=f"{TEST_ZAI_API_BASE_URL}/models",
43-
method="GET",
44-
json=mock_models,
45-
status_code=200,
46-
headers={"Content-Type": "application/json"},
47-
)
40+
httpx_mock.add_response(
41+
url=f"{TEST_ZAI_API_BASE_URL}/models",
42+
method="GET",
43+
json=mock_models,
44+
status_code=200,
45+
headers={"Content-Type": "application/json"},
46+
)
4847

4948
client = httpx.AsyncClient()
5049
try:

0 commit comments

Comments
 (0)