- Centralizes detail extraction from `openai.APIError` under the
`pingpong.ai.get_details_from_api_error(e: openai.APIError)` function.
- Handles `openai.AuthenticationError` and other `openai.APIError`s in
`/class/{class_id}/models`.
- When creating a thread, check if the thread was created after an error
is raised and remove it if that's the case.
- Adds `html` rendering in `combinedErrorMessage` above ChatInput, so we
can display a link to PingPong's status page.
- Resolves an issue where the error message for a failed file upload
might not correctly display in `FileUploadPlaceholder`.