File size: 3,568 Bytes
94f1300
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9344f01
 
 
 
 
 
 
 
 
 
 
 
 
94f1300
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
[build-system]
requires = ["hatchling>=1.21"]
build-backend = "hatchling.build"

[project]
name = "korean-privacy-ai-assistant"
version = "0.1.0"
description = "Korean Privacy Law (개인정보보호법) consultation chatbot for individuals, SMBs, and small clinics"
readme = "README.md"
license = "MIT"
requires-python = ">=3.11"
keywords = ["korean-law", "privacy", "개인정보보호법", "rag", "chatbot", "gemma"]
classifiers = [
  "Development Status :: 3 - Alpha",
  "Intended Audience :: End Users/Desktop",
  "License :: OSI Approved :: MIT License",
  "Natural Language :: Korean",
  "Operating System :: OS Independent",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
]
dependencies = [
  "httpx[http2]>=0.27",
  "pydantic>=2.6",
  "pydantic-settings>=2.2",
  "lxml>=5",
  "diskcache>=5.6",
  "tenacity>=8",
  "platformdirs>=4",
  "fastapi>=0.110",
  "uvicorn[standard]>=0.27",
  "python-dotenv>=1",
  "pyyaml>=6",
  "huggingface-hub>=0.23",
  "tqdm>=4.66",
  "sse-starlette>=2.1",
  "truststore>=0.10",
]

[project.optional-dependencies]
llm = ["llama-cpp-python>=0.3"]
# HF Spaces (ZeroGPU) 데모 배포용 — 같은 가중치 `google/gemma-4-E2B-it` 를
# transformers + @spaces.GPU 로 돌린다. 로컬 사용자는 설치 불필요.
hf = [
  "gradio>=5.0",
  "transformers>=4.45",
  "torch>=2.4",
  "accelerate>=0.34",
  "spaces>=0.30",
]
# Hybrid retrieval (BM25 + Dense) + Cross-encoder reranker.
# - BGE-M3 임베딩 (1024 dim) + bge-reranker-v2-m3 로 한국어 SOTA급.
# - sqlite-vec 로 별도 벡터 DB 서버 없이 임베디드 검색 (data/embeddings.sqlite).
# - 노트북·HF Space 양쪽에서 동일 동작. BM25만 쓰는 사용자는 설치 불필요.
rag = [
  "sentence-transformers>=3.0",
  "sqlite-vec>=0.1.6",
  "torch>=2.4",
  # 주의: python 의 sqlite3 가 extension loading 활성으로 빌드되어 있어야 한다.
  # macOS python.org 인스톨러 빌드는 비활성 — Homebrew/conda/pyenv-from-source 의
  # python 으로 venv 를 만들면 활성. .venv 생성 시 `which python3` 가
  # /opt/homebrew/bin/python3 같은 것을 가리키는지 확인.
]
# 빌드 타임 docling 의존성 — 두 용도가 같은 패키지 셋을 공유:
#   1) PIPC 결정문 별지(이미지) → markdown OCR. 옵트인:
#        pip install -e ".[pipc-ocr]"
#        export KPAA_PIPC_OCR=1
#      EasyOCR 한국어 모델로 한글 별지 정확도 ↑ (docling 기본 ocrmac 대비).
#   2) `kpaa extract-guide` (안내서 PDF → markdown). born-digital 이라 OCR 없이
#      텍스트 직접 추출 → easyocr 가중치 다운로드는 발생하지 않음. 이후 청킹은
#      사용자 + Claude 인터랙티브 큐레이션 → `data/guide/chunks/*.jsonl`.
# 런타임(검색·답변)은 sqlite3 만 필요 — 일반 사용자는 이 extra 설치 불필요.
pipc-ocr = ["docling>=2.0", "easyocr>=1.7"]
dev = [
  "pytest>=8",
  "pytest-asyncio>=0.23",
  "vcrpy>=6",
  "ruff>=0.4",
  "invoke>=2.2",
]

[project.scripts]
kpaa = "kpaa.cli:main"

[project.urls]
Homepage = "https://github.com/sz1-kca/korean-privacy-ai-assistant"
Issues = "https://github.com/sz1-kca/korean-privacy-ai-assistant/issues"

[tool.hatch.build.targets.wheel]
packages = ["src/kpaa"]

[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "W", "I", "B", "UP"]
ignore = ["E501"]
# SIM 룰은 가독성 호불호가 갈려서 select에서 제외 (한국어 분기 코드 가독성 우선)

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]