"""공급자 무관 LLM 예외. Gemini·OpenAI 구현이 둘 다 이 클래스를 던진다. ★ 이름을 'Llm*'으로 새로 지었지만 services/llm/gemini.py 가 GeminiError = LlmError 식으로 같은 클래스를 재노출한다 — 기존 6개 파일의 `except GeminiNotConfigured` 는 한 글자도 안 바뀐다.""" class LlmError(RuntimeError): """LLM 호출 실패.""" class LlmNotConfigured(LlmError): """API 키 미설정 또는 인증 실패(401/403).""" class LlmInvalidOutput(LlmError): """응답이 기대한 모양이 아니다."""