Spaces:
Running
Running
File size: 12,803 Bytes
91a9fee | 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 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gemma Code LLM Playground</title>
<!-- Google Fonts -->
<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=Fira+Code:wght@400;500;600&family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- PrismJS Dark Theme for syntax highlighting -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet" />
<!-- Main Style Sheet -->
<link rel="stylesheet" href="/static/style.css">
</head>
<body class="dark-theme">
<div class="app-container">
<!-- Top Navigation Bar -->
<header class="app-header">
<div class="header-logo">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="logo-icon">
<path d="M12 2L2 7L12 12L22 7L12 2Z" stroke="currentColor" stroke-width="2" stroke-linejoin="round"/>
<path d="M2 17L12 22L22 17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2 12L12 17L22 12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<div class="logo-text">
<h1>Gemma Code <span>LLM</span></h1>
<span class="subtext">Finetuned Assistant</span>
</div>
</div>
<div class="header-status">
<div class="status-badge" id="statusBadge">
<span class="status-dot animate-pulse"></span>
<span class="status-text">Checking status...</span>
</div>
<button class="theme-toggle" id="themeToggleBtn" aria-label="Toggle Theme">
<!-- Light Mode Icon -->
<svg class="sun-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
<!-- Dark Mode Icon -->
<svg class="moon-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
</button>
</div>
</header>
<!-- Main Body -->
<div class="workspace">
<!-- Sidebar Panel: Controls & History -->
<aside class="sidebar">
<!-- Parameters section -->
<div class="sidebar-section">
<div class="section-header">
<h2>Parameters</h2>
</div>
<div class="parameters-form">
<div class="form-group">
<div class="label-wrapper">
<label for="temperature">Temperature</label>
<span class="val-display" id="tempVal">0.2</span>
</div>
<input type="range" id="temperature" min="0" max="2" step="0.1" value="0.2">
<span class="range-description">Lower values are more deterministic, higher are more creative.</span>
</div>
<div class="form-group">
<div class="label-wrapper">
<label for="top_p">Top-P (Nucleus)</label>
<span class="val-display" id="topPVal">0.95</span>
</div>
<input type="range" id="top_p" min="0.01" max="1" step="0.01" value="0.95">
<span class="range-description">Controls diversity via cumulative probability threshold.</span>
</div>
<div class="form-group">
<div class="label-wrapper">
<label for="max_new_tokens">Max New Tokens</label>
<span class="val-display" id="maxTokensVal">512</span>
</div>
<input type="range" id="max_new_tokens" min="32" max="2048" step="32" value="512">
</div>
<div class="form-group toggle-group">
<div class="toggle-wrapper">
<label for="safety">Safety Check</label>
<div class="switch">
<input type="checkbox" id="safety" checked>
<span class="slider round"></span>
</div>
</div>
<span class="range-description">Block unsafe requests or generated commands.</span>
</div>
</div>
</div>
<!-- History section -->
<div class="sidebar-section history-section">
<div class="section-header">
<h2>Prompt History</h2>
<button class="clear-history-btn" id="clearHistoryBtn" title="Clear History">Clear</button>
</div>
<div class="history-list" id="historyList">
<div class="no-history">No past instructions yet.</div>
</div>
</div>
</aside>
<!-- Main Interactive Area -->
<main class="main-content">
<!-- Dual-pane Grid -->
<div class="playground-grid">
<!-- Input Section -->
<section class="pane input-pane">
<div class="pane-header">
<span class="pane-number">01</span>
<h2>Input Prompt</h2>
</div>
<div class="pane-body">
<div class="input-container">
<label for="instructionInput">Instruction <span class="required">*</span></label>
<textarea id="instructionInput" placeholder="e.g. Write a Python function that parses CSV data and handles missing values..." required></textarea>
</div>
<div class="input-container">
<label for="contextInput">Context Input <span class="optional">(Optional)</span></label>
<textarea id="contextInput" placeholder="Add helper definitions, schemas, or existing code variables here..."></textarea>
</div>
<div class="quick-templates">
<span class="templates-label">Quick examples:</span>
<div class="template-tags">
<button class="tag-btn" data-inst="Write a Python class for a thread-safe Singleton pattern." data-ctx="">Singleton Pattern</button>
<button class="tag-btn" data-inst="Write a JavaScript function to throttle a callback invocation." data-ctx="">Throttle Function</button>
<button class="tag-btn" data-inst="Create a robust regular expression in Python for validating email addresses." data-ctx="emails = ['test@example.com', 'invalid-email', 'hello.world@sub.co.uk']">Email Validator</button>
</div>
</div>
<button class="generate-btn" id="generateBtn">
<span class="btn-text">Generate Code</span>
<svg class="btn-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<line x1="5" y1="12" x2="19" y2="12"></line>
<polyline points="12 5 19 12 12 19"></polyline>
</svg>
<div class="btn-spinner hidden"></div>
</button>
</div>
</section>
<!-- Output Section -->
<section class="pane output-pane">
<div class="pane-header">
<span class="pane-number">02</span>
<h2>Generated Code</h2>
<div class="output-actions">
<span class="latency-timer hidden" id="latencyTimer">0.00s</span>
<button class="copy-btn" id="copyBtn" title="Copy Code" disabled>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
</svg>
<span>Copy</span>
</button>
</div>
</div>
<div class="pane-body terminal-container">
<!-- Code block wrapper -->
<div class="code-wrapper" id="codeWrapper">
<div class="terminal-dots">
<span class="dot red"></span>
<span class="dot yellow"></span>
<span class="dot green"></span>
<span class="terminal-title">gemma-assistant.output</span>
</div>
<pre><code class="language-python" id="codeOutput"># Fine-tuned Gemma Code output will be rendered here.
# Tweak your parameters and click "Generate Code" on the left panel.</code></pre>
<!-- Loading skeleton -->
<div class="skeleton-loader hidden" id="skeletonLoader">
<div class="skeleton-line w-75"></div>
<div class="skeleton-line w-100"></div>
<div class="skeleton-line w-50"></div>
<div class="skeleton-line w-85"></div>
<div class="skeleton-line w-60"></div>
</div>
</div>
</div>
</section>
</div>
</main>
</div>
<!-- Toast Notifications -->
<div id="toastContainer" class="toast-container"></div>
</div>
<!-- PrismJS Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
<!-- Custom Application Script -->
<script src="/static/app.js"></script>
</body>
</html>
|