- 대상은 Batch API
/v1/session-blocks:build만 포함한다. - Real-time/ingest 관련 기능은 포함하지 않는다.
- Request 필수 필드 (고정)
sessionId(string)analysisMode(string:INCREMENTAL|FULL)messages[](array)existingBlocks[](array)options(object)
- Message 필수 필드 (고정)
messageId(string)role(string:user|assistant|system)content(string)timestamp(string, ISO-8601)
- existingBlocks 최소 필드
blockId(string)messageIds[](string[])tags(object, optional)
- options 기본값
timeGapMinutes: 10shiftLowSim: 0.20shiftHighSim: 0.45maxLastMessagesForContext: 6
- 정렬 규칙 (고정)
timestampasc, tie-breakermessageIdasc
- Response 필수 필드 (고정)
sessionId(string)analysis_version(string)model(string)blocks[](session_block[])messageToBlock(map)stats(object)
- 입력 검증
- 필수 필드 누락 시 4xx
role허용값 검증timestamp파싱 실패 시 4xxmessages[]비어있으면 400
- 출력 검증
- JSON Schema 또는 Pydantic으로 응답 검증
- 검증 실패 시 500
- 결정론 보장
- LLM temperature 0, fixed seed
- 동일 입력 -> 동일 출력
src/api/handlers.py/v1/session-blocks:build라우팅
src/models/dto.py- Request/Response/Block 스키마 정의
src/core/builder.pybuild_session_blocks()구현
src/core/decision.py- APPEND/NEW_BLOCK 규칙 + LLM 호출
src/core/summarize.py- summarize_block 로직
src/llm/client.py- LLM client + structured output
src/utils/validate.py- 입력/출력 검증 유틸
- 입력 검증
- 메시지 정규화
- 공백 trim, null 제거, 타입 강제
- 메시지 정렬
- 기존 블록 로딩
existingBlocks에서 blockId -> block 객체 매핑
- 메시지 순회
- 각 메시지마다 APPEND/NEW_BLOCK 판정
- messageToBlock 갱신
- 변경된 블록만 summarize
- 응답 조립
- blocks, messageToBlock, stats 포함
- 시간 간격
- 마지막 메시지와의 gap >
timeGapMinutes=> NEW_BLOCK
- 마지막 메시지와의 gap >
- 유사도
- 유사도 <=
shiftLowSim=> NEW_BLOCK - 유사도 >=
shiftHighSim=> APPEND
- 유사도 <=
- 경계 구간
- LLM structured output로 결정
- LLM 결과 스키마
{action: APPEND|NEW_BLOCK, score: 0.0~1.0, reason: string}
- 신규 블록 ID:
blk_{sessionId}_{seq} seq는 이번 build 내에서만 증가- 기존 blockId와 충돌 시 +1 재시도
- 변경된 블록만 실행
- 출력 tags
CONTEXT,PROBLEM,TRIAL[],SOLUTION,INSIGHT
- code_snippets 추출
- 코드/설정/명령어 패턴 기반
- confidence 계산
- LLM score 또는 규칙 기반 점수
- Structured output 프롬프트 고정
- 1회 재시도 후 실패 시 규칙 기반 fallback
- LLM 응답 검증 실패 로그 기록
statsnumMessages,numBlocks,llmCalls_shift,llmCalls_summarize
- 로그
- request id, 처리시간, 에러코드, LLM 호출 수
- 샘플 10개 입력에서 스키마 100% 통과
- 동일 입력 3회 반복 결과 동일성 확인
- 1000+ 메시지 입력에서 timeout 없이 완료
- DTO/스키마 정의
- 입력 검증 로직 구현
- build_session_blocks 코어 로직 구현
- 결정 규칙 + LLM 연동
- summarize_block 구현
- 응답/통계/로그 완성
- 테스트 데이터로 검증