"""Phase R' 검증: 3가지 문제를 각각 Kei API에 요청하여 가능 여부 확인. 검증 1: 배경 사례 2건이 박스 안에 온전히 들어가는 HTML 검증 2: DX/GIS/BIM/디지털트윈 상호 관계 시각화 HTML 검증 3: 용어 정의 풀 텍스트 + 출처 포함 HTML 각각 독립적으로 Kei API 호출 → 렌더링 → 스크린샷. """ from __future__ import annotations import asyncio, json, sys, time, datetime, base64 from pathlib import Path ROOT = Path(__file__).parent.parent sys.path.insert(0, str(ROOT)) async def main(): from src.sse_utils import stream_sse_tokens from src.slide_measurer import measure_rendered_heights, capture_slide_screenshot from src.config import settings import httpx out_dir = ROOT / "data" / "runs" / f"verify_3issues_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" out_dir.mkdir(parents=True, exist_ok=True) print(f"출력: {out_dir}\n") kei_url = getattr(settings, "kei_api_url", "http://localhost:8000") t0 = time.time() # ═══════════════════════════════════════ # 검증 1: 배경 — 문제 제기 + 사례 2건이 176px 안에 들어가는 HTML # ═══════════════════════════════════════ print("=== 검증 1: 배경 사례 박스 ===") prompt_1 = """다음 콘텐츠를 176px 높이 × 707px 너비의 다크 배경 박스 안에 HTML로 만들어라. ## 콘텐츠 - 제목: "현실 — 용어의 혼용" - 본문: "건설산업에서 DX와 BIM이 동일 개념으로 인식되고 있다. 실질적으로 DX는 산업 전반의 프로세스를 혁신하는 상위개념이며, BIM은 3차원 모델 기반의 정보 관리 도구로서 DX의 하위 기술에 해당한다." - 사례 1: "스마트 건설 활성화 방안(2022.07) — 추진과제: 건설산업 디지털화, 실행과제: BIM 전면 도입, BIM 전문인력 양성" - 사례 2: "제7차 건설기술진흥 기본계획(2023.12) — 추진방향: 디지털 전환을 통한 스마트 건설 확산, 추진과제: BIM 도입으로 건설산업 디지털화" ## 요구사항 1. 다크 배경(#1e293b → #0f172a 그라데이션), 흰 텍스트 2. 제목: #93c5fd 색상 3. 사례 2건을 가로 나란히 카드로 배치 (border-left: 3px solid #60a5fa) 4. 사례 제목: #fbbf24 (노란색) 5. **176px 높이 안에 모든 내용이 들어가야 한다. 넘치면 안 된다.** 6. 본문과 사례의 텍스트를 축약하지 마라. 위에 제공한 텍스트 그대로 사용. 7. 폰트 크기를 줄여서라도 176px 안에 맞춰라 (최소 10px까지 허용) ## 출력 HTML + inline
{inner_html}
""" def _save(out_dir, name, data): (out_dir / name).write_text(data if isinstance(data, str) else json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") if __name__ == "__main__": import logging logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S") logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) logging.getLogger("selenium").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) asyncio.run(main())