feat: 완전한 웹 UI 구현 및 문서 처리 파이프라인 완성

 새로운 기능:
- FastAPI 기반 완전한 웹 UI 구현
- 반응형 디자인 (모바일/태블릿 지원)
- 드래그앤드롭 파일 업로드 인터페이스
- 실시간 AI 챗봇 인터페이스
- 문서 관리 및 검색 시스템
- 진행률 표시 및 상태 알림

🎨 UI 구성:
- 메인 대시보드: 서버 상태, 통계, 빠른 접근
- 파일 업로드: 드래그앤드롭, 처리 옵션, 진행률
- 문서 관리: 검색, 정렬, 미리보기, 다운로드
- AI 챗봇: 실시간 대화, 문서 기반 RAG, 빠른 질문

🔧 기술 스택:
- FastAPI + Jinja2 템플릿
- 모던 CSS (그라디언트, 애니메이션)
- Font Awesome 아이콘
- JavaScript (ES6+)

🚀 완성된 기능:
- 파일 업로드 → 텍스트 추출 → 임베딩 → 번역 → HTML 생성
- 벡터 검색 및 RAG 기반 질의응답
- 다중 모델 지원 (기본/부스팅/영어 전용)
- API 키 인증 및 CORS 설정
- NAS 연동 및 파일 내보내기
This commit is contained in:
hyungi
2025-08-14 08:09:48 +09:00
parent ef64aaec84
commit cb009f7393
13 changed files with 2781 additions and 4 deletions

View File

@@ -73,8 +73,10 @@ class DocumentPipeline:
translated.append(content.strip())
return translated
def build_html(self, doc_id: str, title: str, ko_text: str) -> str:
html_path = self.output_dir / "html" / f"{doc_id}.html"
def build_html(self, basename: str, title: str, ko_text: str) -> str:
# Ensure .html suffix and sanitize basename
safe_base = Path(basename).stem + ".html"
html_path = self.output_dir / "html" / safe_base
html = f"""
<!doctype html>
<html lang=\"ko\">\n<head>\n<meta charset=\"utf-8\"/>\n<title>{title}</title>\n<style>
@@ -102,6 +104,7 @@ h1{{font-size: 1.6rem; margin-bottom: 1rem;}}
summarize: bool = False,
summary_sentences: int = 5,
summary_language: str | None = None,
html_basename: str | None = None,
) -> PipelineResult:
parts = chunk_text(text, max_chars=1200, overlap=200)
@@ -124,7 +127,8 @@ h1{{font-size: 1.6rem; margin-bottom: 1rem;}}
html_path: str | None = None
if generate_html:
title_suffix = "요약+번역본" if (summarize and translate) else ("요약본" if summarize else ("번역본" if translate else "원문"))
html_path = self.build_html(doc_id, title=f"문서 {doc_id} ({title_suffix})", ko_text="\n\n".join(translated))
basename = html_basename or f"{doc_id}.html"
html_path = self.build_html(basename, title=f"문서 {doc_id} ({title_suffix})", ko_text="\n\n".join(translated))
return PipelineResult(doc_id=doc_id, html_path=html_path, added_chunks=added, chunks=len(translated))