293 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LightRAG</title>
<style>
:root {
--primary: #4F46E5;
--secondary: #10B981;
--background: #F8FAFC;
--surface: #FFFFFF;
--text-primary: #1E293B;
--text-secondary: #64748B;
--border: #E2E8F0;
--shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
</style>
<link rel="stylesheet" type="text/css" href="css/lightrag.css">
<link rel="stylesheet" type="text/css" href="css/graph.css">
</head>
<body>
<div class="app-container">
<nav class="nav-panel">
<h2 class="nav-title">LightRAG</h2>
<div class="nav-menu">
<button class="btn btn-primary" style="width: 100%; margin-bottom: 1rem;"
onclick="showSection('documents')">
📁 DOC MANAGE
</button>
<button class="btn btn-primary" style="width: 100%; margin-bottom: 1rem;"
onclick="showSection('text-upload')">
📝 TEXT UPLOAD
</button>
<button class="btn btn-primary" style="width: 100%; margin-bottom: 1rem;" onclick="showSection('query')">
🔍 GRAPH SEARCH
</button>
<button class="btn btn-primary" style="width: 100%; margin-bottom: 1rem;"
onclick="showSection('label-management'); loadLabels()">
🏷️ GRAPH MANAGE
</button>
<button class="btn btn-secondary" style="width: 100%;" onclick="showSection('status')">
📊 SYSTEM STATUS
</button>
</div>
</nav>
<main class="main-content">
<section id="documents" class="card">
<h3 class="card-title">DOC MANAGE</h3>
<div class="file-dropzone" id="dropzone">
<input type="file" id="fileInput" hidden multiple>
<p>Drap file</p>
<button class="btn btn-primary" onclick="document.getElementById('fileInput').click()">
📤 select file
</button>
<div class="file-list" style="margin-top: 1rem;"></div>
<div class="status-indicator" id="fileUploadStatus"></div>
</div>
</section>
<section id="text-upload" class="card" style="display: none;">
<h3 class="card-title">TEXT UPLOAD</h3>
<div class="text-upload-form">
<div class="form-group">
<label for="textDescription">Titleoptional</label>
<input
type="text"
id="textDescription"
class="input-field"
placeholder="Please enter a text title..."
>
</div>
<div class="form-group">
<label for="textContent">TEXT CONTENT</label>
<textarea
id="textContent"
class="input-field"
placeholder="lease enter a text content..."
rows="8"
required
></textarea>
</div>
<div class="action-bar">
<button class="btn btn-primary" onclick="handleTextUpload()">
📤 submit
</button>
<div class="status-indicator" id="textUploadStatus"></div>
</div>
</div>
</section>
<section id="label-management" class="card" style="display: none;">
<h3 class="card-title">GRAPH MANAGE(neo4j)</h3>
<div class="action-bar" style="margin-bottom: 1rem;">
<button class="btn btn-secondary" onclick="refreshLabels()">
🔄 refresh
</button>
</div>
<div id="label-list" class="label-container">
</div>
</section>
<!-- search -->
<section id="query" class="card" style="display: none;">
<h3 class="card-title">SEARCH API</h3>
<select class="input-field" style="margin-bottom: 1rem;">
<option value="local">local search</option>
<option value="global">global search</option>
<option value="native">native search</option>
<option value="hybrid">hybrid search</option>
<option value="mix">mix search</option>
</select>
<textarea
class="input-field"
placeholder="enter your content..."
style="height: 120px; resize: vertical;"
></textarea>
<div style="margin-top: 1rem; display: flex; gap: 0.5rem;">
<button class="btn btn-primary">🔍 searching</button>
<label class="btn btn-secondary">
<input type="checkbox" style="margin-right: 0.5rem;">stream modal
</label>
</div>
<div class="results"
style="margin-top: 1rem; padding: 1rem; border: 1px solid var(--border); border-radius: 8px;"></div>
</section>
<section id="status" class="card" style="display: none;">
<h3 class="card-title">System Status</h3>
<div class="status-grid">
<div class="status-card health-status">
<div class="status-header">
<i class="status-icon fas fa-heartbeat"></i>
<h4>HEATH STATUS</h4>
</div>
<div class="status-badge" id="healthStatus">checking...</div>
</div>
<!-- 存储状态 -->
<div class="status-card storage-status">
<div class="status-header">
<i class="status-icon fas fa-database"></i>
<h4>Storage status</h4>
</div>
<div class="progress-container">
<progress value="0" max="100" id="storageProgress"></progress>
<div class="progress-labels">
<span id="indexedFiles">Indexed files0</span>
<span id="storageUsage">Use ratio0%</span>
</div>
</div>
</div>
<div class="status-card model-config">
<div class="status-header">
<i class="status-icon fas fa-brain"></i>
<h4>LLM configuration</h4>
</div>
<dl class="config-list">
<dt>LLM MODEL</dt>
<dd id="llmModel">Loading...</dd>
<dt>Embedded model</dt>
<dd id="embedModel">Loading...</dd>
<dt>Max token</dt>
<dd id="maxTokens">0</dd>
</dl>
</div>
<div class="status-card directory-info">
<div class="status-header">
<i class="status-icon fas fa-folder-open"></i>
<h4>Catalog information</h4>
</div>
<div class="directory-list">
<div class="directory-item">
<span class="directory-label">Work directory</span>
<span class="directory-path" id="workingDir"></span>
</div>
<div class="directory-item">
<span class="directory-label">Input directory</span>
<span class="directory-path" id="inputDir"></span>
</div>
</div>
</div>
<div class="status-card directory-info">
<div class="status-header">
<i class="status-icon fas fa-folder-open"></i>
<h4>Store information</h4>
</div>
<div class="directory-list">
<div class="directory-item">
<span class="directory-label">kv_storage</span>
<span class="directory-path" id="kv_storage"></span>
</div>
<div class="directory-item">
<span class="directory-label">doc_status_storage</span>
<span class="directory-path" id="doc_status_storage"></span>
</div>
<div class="directory-item">
<span class="directory-label">graph_storage</span>
<span class="directory-path" id="graph_storage"></span>
</div>
<div class="directory-item">
<span class="directory-label">vector_storage</span>
<span class="directory-path" id="vector_storage"></span>
</div>
</div>
</div>
</div>
</section>
</main>
</div>
<div id="graph-modal" class="modal">
<div class="modal-content">
<div class="modal-header">
<h3 id="graph-title">GRAPH MANAGE</h3>
<button class="btn btn-close" onclick="closeGraphModal()">&times;</button>
</div>
<div class="modal-body">
<div id="graph-container">
<svg id="graph-svg" width="100%" height="600px">
</svg>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" onclick="closeGraphModal()">SHUT DOWN</button>
</div>
<div class="resize-handle"></div>
</div>
</div>
<script>
const dropzone = document.getElementById('dropzone');
dropzone.addEventListener('dragover', (e) => {
e.preventDefault();
dropzone.classList.add('active');
});
dropzone.addEventListener('dragleave', () => {
dropzone.classList.remove('active');
});
dropzone.addEventListener('drop', (e) => {
e.preventDefault();
dropzone.classList.remove('active');
const files = e.dataTransfer.files;
handleFiles(files);
});
function handleFiles(files) {
console.log('selected file:', files);
}
function showSection(sectionId) {
// 隐藏所有内容区块 Hide all content blocks
const sections = document.querySelectorAll('.main-content .card');
sections.forEach(section => {
section.style.display = 'none';
});
// 显示目标区块 Display target block
const targetSection = document.getElementById(sectionId);
if (targetSection) {
targetSection.style.display = 'block';
}
// 更新按钮激活状态可选Update button activation status (optional)
const buttons = document.querySelectorAll('.nav-menu button');
buttons.forEach(button => {
button.classList.remove('active');
});
event.target.classList.add('active');
}
// 初始化显示文档管理模块 Initialize the display document management module
showSection('documents');
</script>
<!-- 在页面底部添加 -->
<script src="js/lightrag.js"></script>
<script src="js/graph.js"></script>
<script src="https://d3js.org/d3.v7.min.js"></script>
</body>
</html>