# IR Deck Gemini Fallback 체인 구현

**날짜**: 2025-12-01
**목표**: Rate Limit(429) 대응 자동 모델 전환

---

## Fallback 순서

**기본**: gemini-2.5-flash-lite (RPM 15)

**429 에러 시**:
1. gemini-2.5-flash (RPM 10)
2. gemini-2.0-flash (RPM 15)
3. gemini-2.0-flash-lite (RPM 30)

---

## 구현 계획

### 1. call_llm() 함수 수정

**파일**: `rb8001/app/services/ir_analyzer.py`

**변경**:
- `enable_fallback: bool = False` 파라미터 추가
- 429 에러 감지 (`ResourceExhausted` 예외)
- Fallback 리스트 순회, 즉시 재시도
- 모든 모델 실패 시 None 반환

### 2. IR Deck Analyzer 적용

**파일**: `rb8001/app/services/ir_deck_analyzer.py`

**변경**:
- `_evaluate_comprehensive`: `enable_fallback=True`
- `_evaluate_page_comprehensive`: `enable_fallback=True`

### 3. LLMRequest 타입 확장

**파일**: `rb8001/app/services/llm/models.py`

**변경**:
- model 필드에 새 모델 추가
- `"gemini-2.5-flash"`, `"gemini-2.0-flash"`, `"gemini-2.0-flash-lite"`

### 4. 동적 Handler 생성

**파일**: `rb8001/app/services/llm/llm_service.py`

**변경**:
- handler 없으면 `GeminiHandler(model_name)` 동적 생성

---

## Part 2: 프론트엔드 응답 확장 (미구현)

### EvaluationResponse 확장

**추가 필드**:
```python
story_scores: Optional[List[Dict]]  # Sequoia 10가지 스토리별 점수
summary: Optional[str]  # 종합 요약
investment_opinion: Optional[Dict]  # 투자 의견
```

### 필요 작업
- LLM 프롬프트에 story_scores 요청 추가
- 종합 평가에서 요약 생성
- 프론트엔드 UI 개선

---

## 참고

- `troubleshooting/251201_ir_deck_evaluation_keyerror_llm_optimization.md`
- `311_FastAPI_구조_원칙.md`
