Raised when a provider is selected but its API key env var is unset. Subclasses `ModelConfigError` so existing `except ModelConfigError` blocks keep working. Carries the `provider` name and the canonical `env_var` so callers can render targeted recovery hints (e.g., "set OPENAI_API_KEY"
| 157 | |
| 158 | |
| 159 | class MissingCredentialsError(ModelConfigError): |
| 160 | """Raised when a provider is selected but its API key env var is unset. |
| 161 | |
| 162 | Subclasses `ModelConfigError` so existing `except ModelConfigError` blocks |
| 163 | keep working. Carries the `provider` name and the canonical `env_var` so |
| 164 | callers can render targeted recovery hints (e.g., "set OPENAI_API_KEY" or |
| 165 | "run `/model <other_provider>:<model>`") without string-matching on the |
| 166 | formatted exception message and without re-deriving the env-var name. |
| 167 | """ |
| 168 | |
| 169 | def __init__( |
| 170 | self, message: str, *, provider: str, env_var: str | None = None |
| 171 | ) -> None: |
| 172 | """Initialize the error. |
| 173 | |
| 174 | Args: |
| 175 | message: Human-readable message describing the missing credential. |
| 176 | provider: The provider whose credentials are missing |
| 177 | (e.g., `'openai'`). |
| 178 | env_var: The canonical env var name expected to hold the |
| 179 | credential (e.g., `'OPENAI_API_KEY'`). `None` when the |
| 180 | provider has no registered env-var mapping. |
| 181 | """ |
| 182 | super().__init__(message) |
| 183 | self.provider = provider |
| 184 | self.env_var = env_var |
| 185 | |
| 186 | |
| 187 | class MissingProviderPackageError(ModelConfigError): |