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"]
|