Coverage for pydantic_ai_slim/pydantic_ai/models/wrapper.py: 96.55%
29 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-28 17:27 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-28 17:27 +0000
1from __future__ import annotations
3from collections.abc import AsyncIterator
4from contextlib import asynccontextmanager
5from dataclasses import dataclass
6from typing import Any
8from ..messages import ModelMessage, ModelResponse
9from ..settings import ModelSettings
10from ..usage import Usage
11from . import KnownModelName, Model, ModelRequestParameters, StreamedResponse, infer_model
14@dataclass(init=False)
15class WrapperModel(Model):
16 """Model which wraps another model.
18 Does nothing on its own, used as a base class.
19 """
21 wrapped: Model
22 """The underlying model being wrapped."""
24 def __init__(self, wrapped: Model | KnownModelName):
25 self.wrapped = infer_model(wrapped)
27 async def request(self, *args: Any, **kwargs: Any) -> tuple[ModelResponse, Usage]:
28 return await self.wrapped.request(*args, **kwargs)
30 @asynccontextmanager
31 async def request_stream(
32 self,
33 messages: list[ModelMessage],
34 model_settings: ModelSettings | None,
35 model_request_parameters: ModelRequestParameters,
36 ) -> AsyncIterator[StreamedResponse]:
37 async with self.wrapped.request_stream(messages, model_settings, model_request_parameters) as response_stream:
38 yield response_stream
40 @property
41 def model_name(self) -> str:
42 return self.wrapped.model_name
44 @property
45 def system(self) -> str:
46 return self.wrapped.system
48 def __getattr__(self, item: str):
49 return getattr(self.wrapped, item)