[docs]classAI21Base(BaseModel):"""Base class for AI21 models."""model_config=ConfigDict(arbitrary_types_allowed=True,)client:Any=Field(default=None,exclude=True)#: :meta private:api_key:SecretStr=Field(default_factory=secret_from_env("AI21_API_KEY",default=""))"""API key for AI21 API."""api_host:str=Field(default_factory=from_env("AI21_API_URL",default="https://api.ai21.com"))"""Host URL"""timeout_sec:float=Field(default_factory=lambda:float(from_env("AI21_TIMEOUT_SEC",default=str(_DEFAULT_TIMEOUT_SEC))()))"""Timeout in seconds. If not set, it will default to the value of the environment variable `AI21_TIMEOUT_SEC` or 300 seconds. """num_retries:Optional[int]=None"""Maximum number of retries for API requests before giving up."""@model_validator(mode="after")defpost_init(self)->Self:api_key=self.api_keyapi_host=self.api_hosttimeout_sec=self.timeout_secif(self.clientorNone)isNone:self.client=AI21Client(api_key=api_key.get_secret_value(),api_host=api_host,timeout_sec=Noneiftimeout_secisNoneelsefloat(timeout_sec),via="langchain",)returnself