Actions
이슈 #237
진행중
CP
RL
5-4. Claude API 호출 및 응답 처리
이슈 #237:
5-4. Claude API 호출 및 응답 처리
설명
스트리밍 응답 처리
완료 내역¶
- 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 파일 영속화
관련 커밋¶
참고¶
- 중단 사유는
interruptReasonsMap에 보존되어 어시스턴트 메시지에 기록됨 -
max_tokens은 현재 64,000으로 설정 (anthropic.ts:61)
Actions