프로젝트

일반

사용자정보

이슈 #237

Ryan Lee이(가) 7달 전에 변경

스트리밍 응답 처리 

 ## 완료 내역 
 - Anthropic SDK의 `messages.stream()` 사용하여 스트리밍 응답 처리 (`src/services/api/anthropic.ts:58`) 
 - `react-native-fetch-api`의 `textStreaming: true` 플래그로 RN 환경에서 청크 기반 스트림 수신 (`anthropic.ts:36-39`) 
 - `streamChat()` 콜백 기반 인터페이스: 
   - `onFinal({ text, usage })`: 스트림 완료 후 최종 텍스트와 토큰 사용량 전달 
   - `onAbort()`: 사용자 중단 처리 (AbortController.signal 연동) 
   - `onError(error)`: 실패 처리 
 - 대화별 AbortController 관리로 개별 요청 취소 가능 (`src/stores/chatStore.ts:174-175, 301-304`) 
 - 완료 후 처리 파이프라인 (`chatStore.ts:180-235`): 
   - `parseCodeBlocks()`로 응답에서 HTML/코드블록 추출 
   - HTML 첨부 존재 시 완료 메시지 문구로 교체, 코드블록만 있을 경우 원문 표시 
   - HTML은 낙관적 UI(`pending: true`)로 먼저 렌더 → `persistSingleHtml()`로 비동기 파일 저장 → filePath 교체 
   - 저장 실패 시 토스트 노출 
 - 토큰 사용량 저장 및 dev 로그 (캐시 HIT/MISS/WRITE 상태 포함) (`anthropic.ts:95-105`) 
 - `stop_reason === 'max_tokens'` 시 dev 경고 (`anthropic.ts:76-80`) 
 - 오류 타입 감지: AbortError 구분 처리 (`anthropic.ts:21-32`) 

 ## 주요 파일 
 - `src/services/api/anthropic.ts` — `streamChat()` 스트리밍 호출 + `streamingFetch` 플래그 
 - `src/stores/chatStore.ts` — 콜백 연동, 낙관적 UI, 중단/에러/완료 처리 
 - `src/utils/parseCodeBlocks.ts` — 응답에서 첨부 추출 
 - `src/services/storage/htmlFiles.ts` — HTML 파일 영속화 

 ## 관련 커밋 
 - `3b6c46b` (fixes ref #237) — Claude API 호출 및 응답 처리 
 - `91a0930` — AI 응답에서 HTML 추출 로직 (후속, #242 소관) 

 ## 참고 
 - 중단 사유는 `interruptReasons` Map에 보존되어 어시스턴트 메시지에 기록됨 
 - `max_tokens`은 현재 64,000으로 설정 (`anthropic.ts:61`) 

뒤로