feat: add tool-call fallback and resilient batch exports

This commit is contained in:
chenmingxuan committed 2026-09-29 19:53:20 +08:00
1 parent ab066733b8
commit d31eb2a19d
32 files changed
+538 -72

No files matched your search

+26
View File
@@ -301,6 +301,32 @@ async def test_configured_retry_budget_is_shared_by_identical_fallback(monkeypat
assert llm_service._FAILED_ENDPOINTS.get() is None
@pytest.mark.asyncio
async def test_429_waits_one_minute_then_retries(monkeypatch):
from unittest.mock import AsyncMock
from artemis.llm.reliability import retry_policy_for
class RateLimited(Exception):
status_code = 429
calls = 0
async def call_once():
nonlocal calls
calls += 1
if calls == 1:
raise RateLimited("Too Many Requests")
return "recovered"
sleep = AsyncMock()
monkeypatch.setattr(llm_service, "retry_policy_for", retry_policy_for)
monkeypatch.setattr(llm_service.asyncio, "sleep", sleep)
monkeypatch.setattr(llm_service.settings, "OPENAI_RATE_LIMIT_RETRY_SECONDS", 60)
assert await llm_service._run_with_recovery(call_once, max_retries=1) == "recovered"
assert calls == 2
sleep.assert_awaited_once_with(60)
@pytest.mark.asyncio
async def test_request_deadline_cancels_attempt_and_respects_zero_retries(monkeypatch):
import asyncio