wip: phase_z2 evidence 파이프라인 + matching 실험(phase2~26) + 프론트 trace 패널 진행분 스냅샷
- src: phase_z2 composition/mapper/pipeline/placement_planner/retry, ai_fallback(prompts/schema/validate), mdx_text_atoms 신규 - Front: PipelineTracePanel 신규, FramePanel/SlideCanvas/Home/designAgentApi 등 갱신 + 테스트 4종 추가 - templates/phase_z2: catalog(component_expansion_registry, node_slot_mapping 신규), frames, families, slide_base 갱신 - tests/matching: phase2~26 매칭 실험 스크립트·리포트·온톨로지 전체 (미커밋 진행분) - tests: b4_v4 evidence, task5~28.5 시리즈, regression(imp95 baseline) 등 신규 테스트 대량 추가 - docs/reference: MDX 구조 인벤토리, MDX→Frame 구조 계약 문서 - scripts: mdx 계약/parity/coverage/viewport 체크, gitea comment, run sync 유틸 - .gitignore: tmp*.json, chromedriver, .orchestrator, *.pkl, Front_test* 등 임시/스냅샷 제외 미완성 작업의 보존용 스냅샷 커밋 (2026-07-02) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""Phase 2: Semantic 매칭용 모델 다운로드"""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import urllib.request
|
||||
import zipfile
|
||||
|
||||
MODELS_DIR = Path(r"d:\ad-hoc\kei\design_agent\models")
|
||||
MODELS_DIR.mkdir(exist_ok=True)
|
||||
|
||||
|
||||
def download_ko_sroberta():
|
||||
"""ko-sroberta-multitask (Sentence-BERT, 420MB)
|
||||
sentence-transformers 라이브러리가 자동 캐시에 다운로드"""
|
||||
print("\n=== [1/3] ko-sroberta-multitask 다운로드 ===")
|
||||
from sentence_transformers import SentenceTransformer
|
||||
model = SentenceTransformer('jhgan/ko-sroberta-multitask',
|
||||
cache_folder=str(MODELS_DIR / "sentence-transformers"))
|
||||
print(f"✓ 완료: 차원 {model.get_sentence_embedding_dimension()}")
|
||||
return model
|
||||
|
||||
|
||||
def download_korean_fasttext():
|
||||
"""Korean FastText — Kyubyong 공개 모델 (100~200MB)
|
||||
GitHub releases: https://github.com/Kyubyong/wordvectors"""
|
||||
print("\n=== [2/3] Korean FastText 다운로드 ===")
|
||||
# Kyubyong의 한국어 FastText 200차원 (약 400MB)
|
||||
target = MODELS_DIR / "ko_fasttext"
|
||||
target.mkdir(exist_ok=True)
|
||||
model_file = target / "ko.bin"
|
||||
if model_file.exists():
|
||||
print(f"✓ 이미 존재: {model_file}")
|
||||
return str(model_file)
|
||||
# Facebook pre-trained FastText로 대체 - huggingface hub 사용
|
||||
try:
|
||||
from huggingface_hub import hf_hub_download
|
||||
print(" HuggingFace에서 한국어 FastText 다운로드...")
|
||||
path = hf_hub_download(
|
||||
repo_id="facebook/fasttext-ko-vectors",
|
||||
filename="model.bin",
|
||||
cache_dir=str(MODELS_DIR / "fasttext"),
|
||||
)
|
||||
print(f"✓ 완료: {path}")
|
||||
return path
|
||||
except Exception as e:
|
||||
print(f" HuggingFace 실패: {e}")
|
||||
# 대안: ko-sroberta만 써서 FastText 역할 커버
|
||||
print(" → Korean FastText는 skip하고 ko-sroberta로 대체")
|
||||
return None
|
||||
|
||||
|
||||
def download_korean_word2vec():
|
||||
"""Korean Word2Vec — gensim 데이터나 HF에서 받기"""
|
||||
print("\n=== [3/3] Korean Word2Vec 다운로드 ===")
|
||||
# 작은 공개 모델 시도
|
||||
try:
|
||||
from huggingface_hub import hf_hub_download
|
||||
path = hf_hub_download(
|
||||
repo_id="Kyubyong/wordvectors-ko",
|
||||
filename="ko.bin",
|
||||
cache_dir=str(MODELS_DIR / "word2vec"),
|
||||
)
|
||||
print(f"✓ 완료: {path}")
|
||||
return path
|
||||
except Exception as e:
|
||||
print(f" 실패: {e}")
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sroberta = download_ko_sroberta()
|
||||
fasttext = download_korean_fasttext()
|
||||
w2v = download_korean_word2vec()
|
||||
print("\n=== 다운로드 결과 ===")
|
||||
print(f"ko-sroberta: {'✓' if sroberta else '✗'}")
|
||||
print(f"FastText: {'✓' if fasttext else '✗'}")
|
||||
print(f"Word2Vec: {'✓' if w2v else '✗'}")
|
||||
Reference in New Issue
Block a user