File size: 8,367 Bytes
18e58fa | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LexRAG โ Legal Intelligence Terminal | UAE & India Law AI</title>
<meta name="description" content="LexRAG is a professional legal research AI for UAE and Indian law, taxation, and compliance. Hybrid RAG with multi-provider LLM streaming.">
<meta name="keywords" content="legal AI, RAG, UAE law, Indian law, GST, VAT, legal research, compliance, tax AI, retrieval augmented generation">
<meta property="og:title" content="LexRAG โ Legal Intelligence Terminal">
<meta property="og:description" content="Enterprise hybrid RAG for UAE & Indian law, taxation and compliance.">
<meta property="og:url" content="https://github.com/eulogik/LexRAG">
<meta name="author" content="Evolucent AI / Eulogik">
<link rel="stylesheet" href="/ui/style.css?v=4">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
</head>
<body>
<!-- โโ SETTINGS PANEL โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ -->
<div id="settings-overlay" class="overlay hidden" onclick="closeSettings()"></div>
<aside id="settings-panel" class="settings-panel hidden">
<div class="settings-header">
<span>Settings</span>
<button class="icon-btn" onclick="closeSettings()">โ</button>
</div>
<!-- Tabs -->
<div class="settings-tabs">
<button class="tab-btn active" onclick="switchSettingsTab('general', this)">General</button>
<button class="tab-btn" onclick="switchSettingsTab('models', this)">Models</button>
<button class="tab-btn" onclick="switchSettingsTab('custom', this)">Custom</button>
</div>
<!-- General Tab -->
<div id="stab-general" class="stab-content">
<div class="settings-section">
<label class="settings-label">Default Provider</label>
<div id="s-provider-pills" class="pill-group"></div>
</div>
<div class="settings-section">
<label class="settings-label">Default Model</label>
<select id="s-model-select" class="select-input"></select>
</div>
<div class="settings-section">
<label class="settings-label">Jurisdiction Lock</label>
<p class="settings-hint">When set to "Auto", the system detects India/UAE/Both from your query.</p>
<div class="pill-group" id="s-jur-pills">
<button class="pill-btn active" data-jur="null" onclick="setJurSetting(this)">Auto-detect</button>
<button class="pill-btn" data-jur="India" onclick="setJurSetting(this)">๐ฎ๐ณ India only</button>
<button class="pill-btn" data-jur="UAE" onclick="setJurSetting(this)">๐ฆ๐ช UAE only</button>
<button class="pill-btn" data-jur="Both" onclick="setJurSetting(this)">๐ Always Both</button>
</div>
</div>
</div>
<!-- Models Tab -->
<div id="stab-models" class="stab-content hidden">
<div class="settings-section">
<p class="settings-hint">Toggle which models appear in the chat model selector. At least one must remain active per provider.</p>
</div>
<div id="s-models-list"></div>
</div>
<!-- Custom Tab -->
<div id="stab-custom" class="stab-content hidden">
<div class="settings-section">
<label class="settings-label">Add Custom Model</label>
<p class="settings-hint">Add a model ID from Groq or OpenRouter to your active catalog.</p>
<div class="form-row">
<select id="c-provider" class="select-input" style="flex:1">
<option value="groq">Groq</option>
<option value="openrouter">OpenRouter</option>
</select>
</div>
<input id="c-model-id" class="text-input" placeholder="Model ID (e.g. llama3-8b-8192)" style="margin-top:.5rem">
<input id="c-model-name" class="text-input" placeholder="Display name (e.g. Llama 3 8B)" style="margin-top:.5rem">
<button class="btn-add" onclick="addCustomModel()">Add Model</button>
</div>
<div class="settings-section">
<label class="settings-label">Custom Models</label>
<div id="s-custom-list"></div>
</div>
</div>
<div class="settings-footer">
<button class="btn-save" onclick="saveSettings()">Save Changes</button>
</div>
</aside>
<!-- โโ MAIN LAYOUT โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ -->
<div class="layout">
<!-- Sidebar -->
<nav class="sidebar">
<div class="sidebar-top">
<div class="logo">
<span class="logo-name">LexRAG</span>
<span class="logo-sub">By <a href="https://evolucentai.com" target="_blank" style="color:inherit;text-decoration:underline;text-decoration-style:dotted;">Evolucent AI</a></span>
</div>
<button class="new-chat-btn" onclick="newChat()"><span>+</span> New Chat</button>
</div>
<div class="sidebar-sessions">
<div class="section-label">Recent</div>
<div id="session-list"></div>
</div>
<div class="sidebar-bottom">
<button class="settings-trigger" onclick="openSettings()">
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="3"/>
<path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/>
</svg>
Settings
</button>
</div>
</nav>
<!-- Chat Area -->
<main class="chat-area">
<div id="messages" class="messages"></div>
<!-- Empty State -->
<div id="empty-state" class="empty-state">
<div class="empty-logo">โ</div>
<h2>LexRAG</h2>
<p>Legal intelligence for UAE and Indian law, taxation, and compliance.</p>
<div class="suggestion-chips">
<button class="chip" onclick="useSuggestion(this)">GST on online gaming contest prizes</button>
<button class="chip" onclick="useSuggestion(this)">UAE VAT on financial services</button>
<button class="chip" onclick="useSuggestion(this)">TDS under Section 194B on winnings</button>
<button class="chip" onclick="useSuggestion(this)">UAE Corporate Tax free zone treatment</button>
</div>
</div>
<!-- Input Row -->
<div class="input-row">
<div class="input-shell">
<textarea
id="query-input"
class="query-input"
placeholder="Ask about law, tax, or regulations..."
rows="1"
onkeydown="handleKey(event)"
oninput="autoResize(this)"
></textarea>
<div class="input-controls">
<div class="model-selector" id="model-selector" onclick="toggleModelDropdown(event)">
<span id="model-label">Groq ยท Llama 3.3</span>
<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
<div id="model-dropdown" class="model-dropdown hidden"></div>
</div>
<button id="send-btn" class="send-btn" onclick="sendMessage()">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/></svg>
</button>
</div>
</div>
</div>
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="/ui/app.js?v=3"></script>
</body>
</html>
|