<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>WebLLM Llama 3.2 Chat</title>
    <link rel="stylesheet" href="styles/katex.min.css" />
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css"
    />
    <link rel="stylesheet" href="styles/style.css" />
  </head>

  <body>
    <main>
      <h1>WebLLM Llama 3.2 Chat</h1>
      <p>
        This space enables AI chat with Llama 3.2 models directly in your local
        browser, empowered by WebLLM.
      </p>

      <h2>Step 1: Configure And Download Model</h2>
      <div class="card vertical">
        <form class="configure-form">
          <!-- Model Size -->
          <div class="form-group">
            <label for="model_size">Model Size:</label>
            <select id="model_size" name="model_size" value="1B">
              <option value="1B">1B</option>
              <option value="3B">3B</option>
            </select>
          </div>

          <!-- Quantization -->
          <div class="form-group">
            <label for="quantization">Quantization:</label>
            <select id="quantization" name="quantization" value="q4f16_1">
              <option value="q4f16_1">q4f16</option>
              <option value="q4f32_1">q4f32</option>
              <option value="q0f32">q0f32</option>
              <option value="q0f16">q0f16</option>
            </select>
          </div>

          <!-- Context Window -->
          <div class="form-group">
            <label for="context">Context Window:</label>
            <select id="context" name="context">
              <option value="1024">1K</option>
              <option value="2048">2K</option>
              <option value="4096">4K</option>
              <option value="8192">8K</option>
              <option value="16384">16K</option>
              <option value="32768">32K</option>
              <option value="65536">64K</option>
              <option value="131072">128K</option>
            </select>
          </div>

          <!-- Temperature -->
          <div class="form-group">
            <label for="temperature"
              >Temperature: 
              <span id="temperature-value" class="range-value">1.00</span></label
            >
            <input
              type="range"
              id="temperature"
              name="temperature"
              min="0.0"
              max="1.0"
              step="0.01"
              value="1.0"
              oninput="document.getElementById('temperature-value').textContent = Number(this.value).toFixed(2)"
            />
          </div>

          <!-- Top-p -->
          <div class="form-group">
            <label for="top_p"
              >Top P:
              <span id="top_p-value" class="range-value">1.00</span></label
            >
            <input
              type="range"
              id="top_p"
              name="top_p"
              min="0.01"
              max="1.0"
              step="0.01"
              value="1.0"
              oninput="document.getElementById('top_p-value').textContent = Number(this.value).toFixed(2)"
            />
          </div>

          <!-- Presence Penalty -->
          <div class="form-group">
            <label for="presence_penalty"
              >Presence Penalty:
              <span id="presence_penalty-value" class="range-value"
                >0.00</span
              ></label
            >
            <input
              type="range"
              id="presence_penalty"
              name="presence_penalty"
              min="0.0"
              max="1.0"
              step="0.01"
              value="0.0"
              oninput="document.getElementById('presence_penalty-value').textContent = Number(this.value).toFixed(2)"
            />
          </div>

          <!-- Frequency Penalty -->
          <div class="form-group">
            <label for="frequency_penalty"
              >Frequency Penalty:
              <span id="frequency_penalty-value" class="range-value"
                >0.00</span
              ></label
            >
            <input
              type="range"
              id="frequency_penalty"
              name="frequency_penalty"
              min="0.0"
              max="1.0"
              step="0.01"
              value="0.0"
              oninput="document.getElementById('frequency_penalty-value').textContent = Number(this.value).toFixed(2)"
            />
          </div>
        </form>

        <button id="download" disabled>Loading...</button>
      </div>
      <p id="download-status" class="hidden"></p>

      <h2>Step 2: Chat</h2>
      <div class="chat-container">
        <div id="chat-box" class="chat-box"></div>
        <div id="chat-stats" class="chat-stats hidden"></div>
        <div class="chat-input-container">
          <div class="chat-input">
            <input
              type="text"
              id="user-input"
              placeholder="Type a message..."
            />
            <button id="send" disabled>Send</button>
          </div>
        </div>
      </div>
    </main>

    <script src="./dist/index.js" type="module"></script>
  </body>
</html>