"""검증 1, 2 재시도 — 프롬프트 개선. 검증 1: 배경 박스가 영역을 꽉 채우도록 검증 2: 벤 다이어그램이 아니라 포함 관계 박스 구조 (C_reference 방식) """ from __future__ import annotations import asyncio, json, sys, time, datetime, base64, re 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_retry_{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 재시도: 배경 박스가 영역을 꽉 채움 # ═══════════════════════════════════════ print("=== 검증 1 재시도: 배경 사례 박스 ===") prompt_1 = """다음 콘텐츠를 다크 배경 박스 HTML로 만들어라. ## 크기 제약 - 너비: 707px을 꽉 채운다 (width: 100%) - 높이: 176px을 꽉 채운다 (height: 176px) - overflow 금지 — 176px 안에 모든 내용이 보여야 한다 ## 콘텐츠 (이 텍스트를 그대로 사용, 축약 금지) - 제목: "현실 — 용어의 혼용" - 본문: "건설산업에서 DX와 BIM이 동일 개념으로 인식되고 있다. 실질적으로 DX는 산업 전반의 프로세스를 혁신하는 상위개념이며, BIM은 3차원 모델 기반의 정보 관리 도구로서 DX의 하위 기술에 해당한다." - 사례 1: 제목 "스마트 건설 활성화 방안(2022.07)" / 내용 "추진과제: 건설산업 디지털화 / 실행과제: BIM 전면 도입, BIM 전문인력 양성" - 사례 2: 제목 "제7차 건설기술진흥 기본계획(2023.12)" / 내용 "추진방향: 디지털 전환을 통한 스마트 건설 확산 / 추진과제: BIM 도입으로 건설산업 디지털화" ## 디자인 - 배경: linear-gradient(135deg, #1e293b, #0f172a) - border-radius: 8px - width: 100%, height: 176px (고정) - 제목: 13px bold, color: #93c5fd - 본문: 12px, color: #e2e8f0 - 사례 카드 2개를 가로 나란히 (flex 또는 grid) - 사례 카드: background: rgba(255,255,255,0.06), border-left: 3px solid #60a5fa, padding: 8px 12px - 사례 제목: 11px bold, color: #fbbf24 - 사례 내용: 10px, color: #cbd5e1 - DX와 BIM을 strong 태그로 강조 ## 출력 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())