Skip to content

Commit 3a5f215

Browse files
committed
extraction fallback
1 parent de0a4a2 commit 3a5f215

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

pydantic_ai_slim/pydantic_ai/usage.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,13 @@ def __add__(self, other: RequestUsage) -> RequestUsage:
125125
def extract(
126126
cls, data: Any, *, provider_id: str, api_flavor: str | None = None, details: dict[str, Any] | None = None
127127
) -> RequestUsage:
128-
provider = get_snapshot().find_provider(None, provider_id, None)
129-
_model_ref, extracted_usage = provider.extract_usage(data, api_flavor=api_flavor)
130-
return cls(**{k: v for k, v in extracted_usage.__dict__.items() if v is not None}, details=details or {})
128+
details = details or {}
129+
try:
130+
provider = get_snapshot().find_provider(None, provider_id, None)
131+
_model_ref, extracted_usage = provider.extract_usage(data, api_flavor=api_flavor)
132+
return cls(**{k: v for k, v in extracted_usage.__dict__.items() if v is not None}, details=details)
133+
except Exception:
134+
return cls(details=details)
131135

132136

133137
@dataclass(repr=False, kw_only=True)

tests/test_usage_limits.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,7 @@ async def tool_c() -> str:
417417

418418
# Only the first batch of 5 tools should have executed
419419
assert len(executed_tools) == 5
420+
421+
422+
def test_usage_unknown_provider():
423+
assert RequestUsage.extract({}, provider_id='unknown') == RequestUsage()

0 commit comments

Comments
 (0)