Files
AI/crawler_platform/app/web/static/index.html
LASTA_DEV01\lasta 4158789869 [crawler]
2026-05-08 17:41:15 +09:00

180 lines
6.3 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="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Ontology Crawler Platform</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body>
<header class="topbar">
<div>
<h1>Ontology Crawler</h1>
<p>프로젝트별 수집, Claim 검수, 온톨로지 매핑, 추천 태그 확인</p>
</div>
<button id="refreshBtn" class="icon-button" title="새로고침" aria-label="새로고침"></button>
</header>
<main class="layout">
<aside class="sidebar">
<section class="panel">
<div class="panel-head">
<h2>Projects</h2>
</div>
<div class="field-row">
<input id="configPath" value="configs/perfume_subscription.yaml" aria-label="Config path" />
<button id="createProjectBtn" title="프로젝트 생성"></button>
</div>
<div id="projectList" class="list"></div>
</section>
<section class="panel">
<div class="panel-head">
<h2>Crawl</h2>
</div>
<label>
Source
<select id="sourceSelect"></select>
</label>
<label>
URL
<input id="crawlUrl" value="tests/fixtures/sample_perfume.html" />
</label>
<label>
Analyzer
<select id="extractorProvider">
<option value="rule_based">Rule-based</option>
<option value="openai">OpenAI API</option>
<option value="ollama">Ollama</option>
<option value="lm_studio">LM Studio</option>
</select>
</label>
<div class="extractor-options" id="extractorOptions">
<label>
Model
<input id="extractorModel" placeholder="예: local model or API model" />
</label>
<label>
Base URL
<input id="extractorBaseUrl" placeholder="optional provider endpoint" />
</label>
<button id="testExtractorBtn">연결 테스트</button>
</div>
<div class="button-grid">
<button id="discoverBtn">주소 발견</button>
<button id="crawlBtn" class="primary">수집 실행</button>
</div>
<div id="crawlResult" class="mini-log"></div>
<div id="discoveredLinks" class="discovered-links"></div>
</section>
</aside>
<section class="workspace">
<nav class="tabs" aria-label="Admin sections">
<button class="tab active" data-tab="overview">Overview</button>
<button class="tab" data-tab="ontology">Ontology</button>
<button class="tab" data-tab="entities">Entities</button>
<button class="tab" data-tab="claims">Claims</button>
<button class="tab" data-tab="tags">Tags</button>
<button class="tab" data-tab="recommend">Recommend</button>
</nav>
<section id="overview" class="tab-panel active">
<div class="summary-grid">
<div class="metric">
<span>Project</span>
<strong id="metricProject">-</strong>
</div>
<div class="metric">
<span>Domain</span>
<strong id="metricDomain">-</strong>
</div>
<div class="metric">
<span>Sources</span>
<strong id="metricSources">0</strong>
</div>
<div class="metric">
<span>Entities</span>
<strong id="metricEntities">0</strong>
</div>
</div>
<div class="wide-panel">
<h2>Sources</h2>
<div id="sourceTable" class="table"></div>
</div>
</section>
<section id="ontology" class="tab-panel">
<div class="split">
<div class="wide-panel">
<h2>Entity Types</h2>
<div id="ontologyEntities" class="chips"></div>
</div>
<div class="wide-panel">
<h2>Predicates</h2>
<div id="ontologyPredicates" class="chips"></div>
</div>
</div>
</section>
<section id="entities" class="tab-panel">
<div class="toolbar wrap">
<select id="entityTypeFilter"></select>
<button id="loadEntitiesBtn">조회</button>
</div>
<div class="merge-bar">
<input id="mergeSourceId" placeholder="병합할 Entity ID" aria-label="source entity id" />
<input id="mergeTargetId" placeholder="남길 Entity ID" aria-label="target entity id" />
<button id="mergeEntitiesBtn">병합</button>
</div>
<div id="entityTable" class="table"></div>
</section>
<section id="claims" class="tab-panel">
<div class="toolbar">
<button id="loadClaimsBtn">Claim 새로고침</button>
</div>
<div id="claimTable" class="claim-list"></div>
</section>
<section id="tags" class="tab-panel">
<div class="toolbar">
<button id="loadTagsBtn">태그 조회</button>
</div>
<div id="tagTable" class="table"></div>
</section>
<section id="recommend" class="tab-panel">
<div class="recommend-grid">
<label>
Preferred notes
<input id="preferredNotes" value="Bergamot, Musk" />
</label>
<label>
Avoided notes
<input id="avoidedNotes" value="" />
</label>
<label>
Preferred moods
<input id="preferredMoods" value="Fresh" />
</label>
<label>
Season
<input id="seasonContext" value="Summer" />
</label>
<label>
Occasion
<input id="occasionContext" value="Daily" />
</label>
</div>
<button id="recommendBtn" class="primary">추천 테스트</button>
<div id="recommendTable" class="table"></div>
</section>
</section>
</main>
<div id="toast" role="status" aria-live="polite"></div>
<script src="/static/app.js"></script>
</body>
</html>