jeongsoo's picture
Add application file
babf3f3
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RAG ์ฑ—๋ด‡ - ์ฑ„ํŒ…</title>
<link rel="stylesheet" href="/static/css/style.css">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<!-- Highlight.js for code styling -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github.min.css">
<!-- Markdown parser -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/4.2.4/marked.min.js"></script>
<!-- DOMPurify for sanitizing HTML -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.4.1/purify.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="/">
<i class="fas fa-robot me-2"></i>RAG ์ฑ—๋ด‡
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item">
<a class="nav-link" href="/"><i class="fas fa-home me-1"></i>ํ™ˆ</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="/chat"><i class="fas fa-comments me-1"></i>์ฑ„ํŒ…</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/knowledge"><i class="fas fa-database me-1"></i>์ง€์‹๋ฒ ์ด์Šค</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-4">
<div class="row">
<!-- ์ฑ„ํŒ… ์˜์—ญ -->
<div class="col-md-8">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<div class="d-flex justify-content-between align-items-center">
<div>
<i class="fas fa-comments me-2"></i>์ฑ„ํŒ…
</div>
<div>
<button id="clearChat" class="btn btn-sm btn-light">
<i class="fas fa-trash me-1"></i>๋Œ€ํ™” ์ง€์šฐ๊ธฐ
</button>
</div>
</div>
</div>
<div class="card-body">
<div id="chatMessages" class="chat-messages mb-3"></div>
<div class="alert alert-info d-none" id="recordingAlert">
<i class="fas fa-microphone-alt me-2"></i>์Œ์„ฑ ๋…น์Œ ์ค‘... ํด๋ฆญํ•˜์—ฌ ์ค‘์ง€
</div>
<div class="alert alert-warning d-none" id="processingAlert">
<div class="d-flex align-items-center">
<div class="spinner-border spinner-border-sm me-2" role="status"></div>
<div>์Œ์„ฑ์„ ์ฒ˜๋ฆฌ ์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ๋งŒ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”...</div>
</div>
</div>
<div class="alert alert-warning d-none" id="typingAlert">
<div class="d-flex align-items-center">
<div class="spinner-border spinner-border-sm me-2" role="status"></div>
<div>๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...</div>
</div>
</div>
<div id="chatForm">
<div class="input-group">
<textarea id="userInput" class="form-control" placeholder="์งˆ๋ฌธ์„ ์ž…๋ ฅํ•˜์„ธ์š”..." rows="2"></textarea>
<button type="button" id="micButton" class="btn btn-danger">
<i class="fas fa-microphone"></i>
</button>
<button type="button" id="sendButton" class="btn btn-primary">
<i class="fas fa-paper-plane"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<!-- ์„ค์ • ๋ฐ ์ •๋ณด ์˜์—ญ -->
<div class="col-md-4">
<div class="card shadow-sm mb-4">
<div class="card-header bg-dark text-white">
<i class="fas fa-cog me-2"></i>์„ค์ •
</div>
<div class="card-body">
<div class="mb-3">
<label for="retrieverType" class="form-label">๊ฒ€์ƒ‰ ์—”์ง„</label>
<select id="retrieverType" class="form-select">
<option value="reranker" selected>์žฌ์ˆœ์œ„ํ™” ๊ฒ€์ƒ‰</option>
<option value="vector">๋ฒกํ„ฐ ๊ฒ€์ƒ‰</option>
</select>
</div>
<div class="mb-3">
<label for="topK" class="form-label">์ฐธ๊ณ  ๋ฌธ์„œ ์ˆ˜ (Top-K)</label>
<input type="number" class="form-control" id="topK" min="1" max="10" value="3">
</div>
<div class="mb-3">
<label for="temperature" class="form-label">๋‹ค์–‘์„ฑ (Temperature)</label>
<input type="range" class="form-range" id="temperature" min="0" max="1" step="0.1" value="0.7">
<div class="d-flex justify-content-between">
<small>์ •ํ™•</small>
<small id="temperatureValue">0.7</small>
<small>์ฐฝ์˜์ </small>
</div>
</div>
</div>
</div>
<div class="card shadow-sm mb-4">
<div class="card-header bg-dark text-white">
<i class="fas fa-info-circle me-2"></i>์ •๋ณด
</div>
<div class="card-body">
<h5 class="card-title">์‚ฌ์šฉ ๋ฐฉ๋ฒ•</h5>
<ul class="mb-0">
<li>ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์งˆ๋ฌธํ•˜๊ฑฐ๋‚˜</li>
<li>๋งˆ์ดํฌ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์Œ์„ฑ์œผ๋กœ ์งˆ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</li>
<li>VITO STT๋กœ ์Œ์„ฑ์ด ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.</li>
<li>๋ฌธ์„œ๋ฅผ ์ฒจ๋ถ€ํ•˜๋ ค๋ฉด ์ง€์‹๋ฒ ์ด์Šค ๋ฉ”๋‰ด๋ฅผ ์ด์šฉํ•˜์„ธ์š”.</li>
</ul>
</div>
</div>
<div class="card shadow-sm">
<div class="card-header bg-success text-white">
<i class="fas fa-book me-2"></i>์ฐธ๊ณ  ๋ฌธ์„œ
</div>
<div class="card-body p-0">
<div id="sourceList" class="list-group list-group-flush">
<div class="list-group-item text-center text-muted">
<i>์ฐธ๊ณ  ๋ฌธ์„œ๊ฐ€ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค</i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="bg-dark text-white text-center py-3 mt-5">
<div class="container">
<p class="mb-0">RAG ์ฑ—๋ด‡ ํด๋ผ์ด์–ธํŠธ &copy; 2025</p>
</div>
</footer>
<!-- ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ -->
<template id="userMessageTemplate">
<div class="chat-message user-message mb-3">
<div class="d-flex">
<div class="message-avatar bg-primary text-white">
<i class="fas fa-user"></i>
</div>
<div class="message-content">
<div class="message-text"></div>
</div>
</div>
</div>
</template>
<template id="botMessageTemplate">
<div class="chat-message bot-message mb-3">
<div class="d-flex">
<div class="message-avatar bg-success text-white">
<i class="fas fa-robot"></i>
</div>
<div class="message-content">
<div class="message-text"></div>
<div class="message-metadata mt-2 text-muted small">
<span class="message-sources"></span>
</div>
</div>
</div>
</div>
</template>
<!-- Bootstrap JS Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<!-- Highlight.js for code highlighting -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script>
<!-- ์ฑ„ํŒ… ๋กœ์ง -->
<script src="/static/js/chat.js"></script>
</body>
</html>