@dataclass(init=False)
class WrapperModel(Model):
"""Model which wraps another model.
Does nothing on its own, used as a base class.
"""
wrapped: Model
"""The underlying model being wrapped."""
def __init__(self, wrapped: Model | KnownModelName):
self.wrapped = infer_model(wrapped)
async def request(self, *args: Any, **kwargs: Any) -> tuple[ModelResponse, Usage]:
return await self.wrapped.request(*args, **kwargs)
@asynccontextmanager
async def request_stream(
self,
messages: list[ModelMessage],
model_settings: ModelSettings | None,
model_request_parameters: ModelRequestParameters,
) -> AsyncIterator[StreamedResponse]:
async with self.wrapped.request_stream(messages, model_settings, model_request_parameters) as response_stream:
yield response_stream
@property
def model_name(self) -> str:
return self.wrapped.model_name
@property
def system(self) -> str:
return self.wrapped.system
def __getattr__(self, item: str):
return getattr(self.wrapped, item)