| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8" /> |
| | <meta name="viewport" content="width=device-width, initial-scale=1" /> |
| | <title>Unimaginable Chat UI</title> |
| | <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap" rel="stylesheet"> |
| | |
| | <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script> |
| | <link rel="stylesheet" href="styles/style.css"> |
| | <link rel="icon" type="image/png" href="assets/favicon-32x32.png"> |
| | <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/atom-one-dark.min.css"> |
| | <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js"></script> |
| | </head> |
| | <body> |
| | <div class="app-container"> |
| | |
| | <div class="nav-bar" id="navBar"> |
| | <div class="nav-header"> |
| | |
| | <button id="hamburgerBtn">☰</button> |
| | <button class="new-session-btn" id="newSessionBtn"> |
| | <img src="assets/new-indicator.svg" alt="Icon" class="svg-icon"> |
| | </button> |
| | <button id="toggleLayoutBtn"><img src="assets/vertical.svg" alt="Icon" class="svg-icon"></button> |
| | </div> |
| | |
| | <ul id="sessionList"></ul> |
| | <div id="presetContainer"> |
| | <div class="preset-header">Model Selection Presets</div> |
| | <select id="preset1" class="preset-select" title="Command + Shift + 1"> |
| | <optgroup label="OpenAI"> |
| | <option value="gpt-4o">GPT-4o</option> |
| | <option value="gpt-4o-mini">GPT-4o Mini</option> |
| | </optgroup> |
| | <optgroup label="Anthropic"> |
| | <option value="claude-3.5-sonnet">Claude 3.5 Sonnet</option> |
| | <option value="claude-3.7-sonnet">Claude 3.7 Sonnet</option> |
| | </optgroup> |
| | <optgroup label="Google"> |
| | <option value="gemini-2.0-flash">Gemini 2.0 Flash</option> |
| | <option value="gemini-2.0-flash-lite">Gemini 2.0 Flash Lite</option> |
| | </optgroup> |
| | <optgroup label="Hugging Face"> |
| | <option value="huggingface/meta-llama/Llama-3.3-70B-Instruct">Llama 3.3 70B Instruct</option> |
| | <option value="huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B">DeepSeek R1 Distill Qwen 32B</option> |
| | <option value="huggingface/Qwen/Qwen2.5-72B-Instruct">Qwen 2.5 72B Instruct</option> |
| | </optgroup> |
| | <optgroup label="Mistral"> |
| | <option value="mistral-large-latest">Mistral Large</option> |
| | <option value="mistral-codestral-latest">CodeStral</option> |
| | <option value="mistral-ministral-8b-latest">Ministral 8B</option> |
| | <option value="mistral-ministral-3b-latest">Ministral 3B</option> |
| | </optgroup> |
| | </select> |
| | |
| | <select id="preset2" class="preset-select" title="Command + Shift + 2"> |
| | |
| | <optgroup label="OpenAI"> |
| | <option value="gpt-4o">GPT-4o</option> |
| | <option value="gpt-4o-mini">GPT-4o Mini</option> |
| | </optgroup> |
| | <optgroup label="Anthropic"> |
| | <option value="claude-3.5-sonnet">Claude 3.5 Sonnet</option> |
| | <option value="claude-3.7-sonnet">Claude 3.7 Sonnet</option> |
| | </optgroup> |
| | <optgroup label="Google"> |
| | <option value="gemini-2.0-flash">Gemini 2.0 Flash</option> |
| | <option value="gemini-2.0-flash-lite">Gemini 2.0 Flash Lite</option> |
| | </optgroup> |
| | <optgroup label="Hugging Face"> |
| | <option value="huggingface/meta-llama/Llama-3.3-70B-Instruct">Llama 3.3 70B Instruct</option> |
| | <option value="huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B">DeepSeek R1 Distill Qwen 32B</option> |
| | <option value="huggingface/Qwen/Qwen2.5-72B-Instruct">Qwen 2.5 72B Instruct</option> |
| | </optgroup> |
| | <optgroup label="Mistral"> |
| | <option value="mistral-large-latest">Mistral Large</option> |
| | <option value="mistral-codestral-latest">CodeStral</option> |
| | <option value="mistral-ministral-8b-latest">Ministral 8B</option> |
| | <option value="mistral-ministral-3b-latest">Ministral 3B</option> |
| | </optgroup> |
| | </select> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="chat-wrapper"> |
| | |
| | <div class="chat-header"> |
| | |
| | <div class="header-left" id="headerLeft"></div> |
| |
|
| | |
| | <div class="chat-title-controls"> |
| | <h2 id="chatTitle">Chat Session 1</h2> |
| | <button id="editTitleBtn">Edit Title</button> |
| | </div> |
| |
|
| | |
| | <div id="turnLabel">Turn: 0 / 0</div> |
| | </div> |
| |
|
| | |
| | <div class="carousel-wrapper" id="carouselWrapper"> |
| | <button id="prevBtn" class="nav"> |
| | <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| | <polyline points="15 18 9 12 15 6"></polyline> |
| | </svg> |
| | </button> |
| | <div class="carousel" id="carousel"></div> |
| | <button id="nextBtn" class="nav"> |
| | <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> |
| | <polyline points="9 18 15 12 9 6"></polyline> |
| | </svg> |
| | </button> |
| | </div> |
| |
|
| | |
| | <div class="input-container"> |
| | <div class="button-row"> |
| | <button id="customBtn1">TLDR</button> |
| | <button id="customBtn3" class="toggle-btn-summarize" title="Toggle summarization"><img src="assets/summarize.svg" alt="Icon" class="svg-icon"></button> |
| | <button id="customBtn2"><img src="assets/settings.svg" alt="Icon" class="svg-icon"></button> |
| | </div> |
| | <div id="fileAttachments" class="file-attachments"></div> |
| | <div class="input-row"> |
| | <button id="attachBtn" class="attach-button">+</button> |
| | <input type="file" id="fileInput" multiple accept="application/pdf"> |
| | <textarea id="chatInput" placeholder="Ask Anything"></textarea> |
| | <button id="sendBtn"> |
| | <img src="assets/send.svg" alt="Icon" class="svg-icon-non-white"> |
| | </button> |
| | </div> |
| | </div> |
| | </div> |
| | </div> |
| |
|
| | |
| | <div id="summaryOverlay"> |
| | <div class="summary-header"> |
| | <span>Chat Summary</span> |
| | <div class="summary-header-buttons"> |
| | <button id="downloadSummary" class="download-summary">Download</button> |
| | <button class="close-summary" id="closeSummaryBtn">×</button> |
| | </div> |
| | </div> |
| | <div class="summary-content markdown-body" id="summaryContent"></div> |
| | </div> |
| |
|
| | |
| | <div id="settingsOverlay"> |
| | <div class="settings-header"> |
| | <span>Settings</span> |
| | <button class="close-settings" id="closeSettingsBtn">×</button> |
| | </div> |
| | <div class="settings-content"> |
| | <form id="settingsForm"> |
| | <div class="settings-group"> |
| | <label for="temperature">Temperature:</label> |
| | <input type="range" id="temperature" name="temperature" min="0" max="1" step="0.01"> |
| | <span id="temperatureValue"></span> |
| | </div> |
| | <div class="settings-group"> |
| | <label for="maxTokens">Max Tokens:</label> |
| | <input type="number" id="maxTokens" name="maxTokens" min="10" max="2048"> |
| | </div> |
| | <div class="settings-section"> |
| | <h3>Model Selection</h3> |
| | <div class="settings-group"> |
| | <select id="modelSelect" name="modelSelect"> |
| | <optgroup label="OpenAI"> |
| | <option value="gpt-4o">GPT-4o</option> |
| | <option value="gpt-4o-mini">GPT-4o Mini</option> |
| | </optgroup> |
| | <optgroup label="Anthropic"> |
| | <option value="claude-3.5-sonnet">Claude 3.5 Sonnet</option> |
| | <option value="claude-3.7-sonnet">Claude 3.7 Sonnet</option> |
| | </optgroup> |
| | <optgroup label="Google"> |
| | <option value="gemini-2.0-flash">Gemini 2.0 Flash</option> |
| | <option value="gemini-2.0-flash-lite">Gemini 2.0 Flash Lite</option> |
| | </optgroup> |
| | <optgroup label="Hugging Face"> |
| | <option value="huggingface/meta-llama/Llama-3.3-70B-Instruct">Llama 3.3 70B Instruct</option> |
| | <option value="huggingface/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B">DeepSeek R1 Distill Qwen 32B</option> |
| | <option value="huggingface/Qwen/Qwen2.5-72B-Instruct">Qwen 2.5 72B Instruct</option> |
| | </optgroup> |
| | <optgroup label="Mistral"> |
| | <option value="mistral-large-latest">Mistral Large</option> |
| | <option value="mistral-codestral-latest">CodeStral</option> |
| | <option value="mistral-ministral-8b-latest">Ministral 8B</option> |
| | <option value="mistral-ministral-3b-latest">Ministral 3B</option> |
| | </optgroup> |
| | </select> |
| | </div> |
| | </div> |
| | <div class="settings-group"> |
| | <label for="persona">Persona:</label> |
| | <select id="persona" name="persona"> |
| | <option value="professional">Professional</option> |
| | <option value="friendly">Friendly</option> |
| | </select> |
| | </div> |
| | <button type="button" id="saveSettings" class="save-settings">Save Settings</button> |
| | </form> |
| | </div> |
| | </div> |
| |
|
| | <div id="loadingOverlay" class="loading-overlay"> |
| | <div class="loading-animation"> |
| | <div class="ripple"></div> |
| | <div class="ripple"></div> |
| | </div> |
| | <p>Generating summary...</p> |
| | </div> |
| |
|
| | <script type="module" src="scripts/main.js"></script> |
| | </body> |
| | </html> |
| |
|