로컬 전용 분석 앱(analyzer) + 로컬 LLM 서버(bitnetd) 프로젝트입니다.
이 README는 "추정"이 아니라 현재 코드/문서 검토 결과 기준으로 작성했습니다.
- 기준 문서/코드
- 요구사항:
SPEC.md,IMPLEMENTATION_PLAN.md - 서버:
bitnetd/app.py,bitnetd/state.py,bitnetd/engines/* - 앱:
analyzer/app.py,analyzer/router.py,analyzer/executor.py,analyzer/history.py
- 요구사항:
- ✅ bitnetd localhost 고정 (
127.0.0.1:11435) 실행 경로 존재 - ✅
/health,/clients/register|heartbeat|unregister,/generate엔드포인트 구현 - ✅
/clients/*,/generate토큰 인증(X-Local-Token),/health무인증 - ✅
/generate의 stream/non-stream 응답 분기 구현(SSE + JSON) - ✅ Analyzer 세션 히스토리(
history.jsonl) append/load 로직 구현 - ✅ Router intent(요약/스키마/필터/집계/비교/플롯/내보내기/도움/컬럼/미리보기/검증) 분기 구현
- ✅ 실행기에서 summary/schema/preview/validate/compare/plot 등 카드 생성 로직 구현
⚠️ 자동 테스트(pytest)는 현재 0개(회귀 방지 자동화는 아직 부족)
bitnetd/: FastAPI 서버, 클라이언트 생명주기, 토큰 인증, generateanalyzer/: pywebview 앱(UI/라우팅/실행기/히스토리)shared/: 공통 상수/경로docs/: 설치/복구/스모크 테스트/엔진 연동 문서
- 기본 주소:
http://127.0.0.1:11435 - 엔드포인트
GET /healthPOST /clients/registerPOST /clients/heartbeatPOST /clients/unregisterPOST /generate
- 인증 정책
/health: 토큰 없이 호출 가능/clients/*,/generate:%LOCALAPPDATA%\BitNet\config\token.txt값을X-Local-Token헤더로 전달
/generate응답 형식stream=false→{text, meta}JSONstream=true→ SSE(meta,delta,done,error)
- pywebview 기반 채팅형 분석 UI
- 세션/메시지/파일 이벤트를
history.jsonl에 기록 - CSV/XLSX 로드 + 데이터셋 레지스트리 관리
- 자연어 라우팅 후 카드(Text/Table/Chart) 기반 결과 제공
- BitNet 홈:
%LOCALAPPDATA%\BitNet\bin/,models/,config/,cache/,logs/
- Analyzer 앱 데이터:
%LOCALAPPDATA%\AnalyzerApp\history.jsonl,results/exports/,results/charts/,logs/
pip install -r requirements.txt
python -m bitnetd다른 터미널에서:
python -m analyzer- 문서 인덱스:
docs/README.md - 수동 설치:
docs/MANUAL_INSTALL.md - 리셋/문제해결:
docs/RESET_TROUBLESHOOT.md - bitnetcpp 엔진 설정:
docs/bitnetcpp.md - Diagnostics 스모크 테스트:
docs/smoke_test.md - 레포 검토 보고서:
docs/REPO_REVIEW.md
SPEC.mdIMPLEMENTATION_PLAN.mdIMPLEMENTATION.md