File size: 13,546 Bytes
d2e7054
 
 
 
 
 
 
 
 
 
 
8db9bbc
d2e7054
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8db9bbc
d2e7054
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
861c833
 
 
 
 
 
 
 
 
 
 
 
 
 
d2e7054
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#080908" />
    <meta
      name="description"
      content="Explore WeMM-Embedding-9B across text, images, video, figures, and visual documents."
    />
    <title>WeMM — Semantic Universe</title>
    <link rel="stylesheet" href="/ui/app.css?v=4" />
    <script type="module" src="/ui/app.js?v=2"></script>
  </head>
  <body>
    <div class="noise" aria-hidden="true"></div>
    <div class="aurora aurora-a" aria-hidden="true"></div>
    <div class="aurora aurora-b" aria-hidden="true"></div>

    <header class="site-header">
      <a class="brand" href="#top" aria-label="WeMM home">
        <span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i></span>
        <span><b>WeMM</b><small>SEMANTIC UNIVERSE</small></span>
      </a>
      <nav class="mode-nav" aria-label="Studio mode">
        <button class="nav-pill active" data-mode="search">Semantic search</button>
        <button class="nav-pill" data-mode="compare">Vector microscope</button>
      </nav>
      <div class="header-actions">
        <span class="model-status" id="model-status"><i></i><span>Connecting</span></span>
        <a class="icon-link" href="/gradio_api/info" target="_blank" title="API schema" aria-label="Open API schema">API</a>
        <a class="icon-link arrow-link" href="https://huggingface.co/tencent/WeMM-Embedding-9B" target="_blank" rel="noreferrer" aria-label="Open model card"></a>
      </div>
    </header>

    <main id="top">
      <section class="hero" aria-labelledby="hero-title">
        <div class="hero-copy">
          <div class="overline"><span>UNIVERSAL MULTIMODAL EMBEDDING</span><b>QWEN3.5 · 9B</b></div>
          <h1 id="hero-title">Meaning has <em>no file type.</em></h1>
          <p>
            Project language, imagery, video, charts, and visual documents into one shared
            geometry—then watch meaning arrange itself.
          </p>
          <div class="hero-meta">
            <div><b>4,096</b><span>native dimensions</span></div>
            <div><b>80.6</b><span>MMEB-v2 average</span></div>
            <div><b>190</b><span>MMEB-v3 tasks</span></div>
          </div>
        </div>
      </section>

      <section class="studio" data-panel="search">
        <div class="section-heading">
          <div><span>01 / RETRIEVAL UNIVERSE</span><h2>Ask in one medium.<br />Discover in another.</h2></div>
          <p>Search the curated field or add a small collection of your own. Every result is scored in the same normalized vector space.</p>
        </div>

        <div class="studio-grid">
          <form class="control-deck" id="search-form">
            <div class="deck-heading">
              <span>QUERY COMPOSER</span>
              <button class="text-button" type="reset">Clear all</button>
            </div>

            <div class="deck-examples" id="expeditions">
              <div class="deck-examples-heading">
                <span>CURATED EXPEDITIONS</span>
                <small>ONE-CLICK EXAMPLES</small>
              </div>
              <div class="deck-example-list">
                <button class="expedition" type="button" data-example="llama"><span>01</span><b>Find Llama 4</b><small>text → screenshot</small></button>
                <button class="expedition" type="button" data-example="tofu"><span>02</span><b>Find mapo tofu</b><small>text → video</small></button>
                <button class="expedition" type="button" data-example="safety"><span>03</span><b>Read road safety</b><small>text → document</small></button>
                <button class="expedition" type="button" data-example="image"><span>04</span><b>Match a screenshot</b><small>image + text</small></button>
                <button class="expedition" type="button" data-example="video"><span>05</span><b>Understand a clip</b><small>video → text</small></button>
              </div>
            </div>

            <label class="field-label" for="query-text">Describe what you mean</label>
            <div class="textarea-wrap">
              <textarea id="query-text" rows="4" maxlength="1200" placeholder="Which document explains temporary road closures?"></textarea>
              <span class="key-hint">⌘ ↵</span>
            </div>

            <div class="visual-query-grid">
              <label class="drop-field" id="query-image-drop">
                <input id="query-image" type="file" accept="image/*" />
                <span class="drop-icon"></span><b>Add image</b><small>PNG, JPG, WEBP</small>
                <div class="file-chip" hidden><span></span><button type="button" aria-label="Remove image">×</button></div>
              </label>
              <label class="drop-field" id="query-video-drop">
                <input id="query-video" type="file" accept="video/*" />
                <span class="drop-icon play"></span><b>Add video</b><small>MP4, WEBM, MOV</small>
                <div class="file-chip" hidden><span></span><button type="button" aria-label="Remove video">×</button></div>
              </label>
            </div>
            <p class="context-note"><span></span> Visual media and text become one interleaved query.</p>

            <details class="collection-builder">
              <summary><span><i></i> Build your candidate collection</span><small>optional</small></summary>
              <div class="details-body">
                <label class="field-label" for="custom-texts">Text candidates · one per line</label>
                <textarea id="custom-texts" rows="5" placeholder="Title :: Candidate text&#10;Another title :: Another candidate"></textarea>
                <label class="mini-upload">
                  <input id="candidate-media" type="file" accept="image/*,video/*" multiple />
                  <span></span><b>Add candidate media</b><small>up to 6 files</small>
                </label>
                <div class="candidate-chips" id="candidate-chips"></div>
              </div>
            </details>

            <div class="switch-line">
              <div><b>Curated universe</b><small>10 mixed-media candidates</small></div>
              <label class="switch"><input id="include-showcase" type="checkbox" checked /><span></span></label>
            </div>

            <fieldset class="dimension-field">
              <legend><span>EMBEDDING BUDGET</span><output id="search-dimension-output">1,024D</output></legend>
              <div class="dimension-pills" data-dimension-group="search">
                <button type="button" data-value="64">64</button><button type="button" data-value="128">128</button>
                <button type="button" data-value="256">256</button><button type="button" data-value="512">512</button>
                <button type="button" data-value="1024" class="active">1K</button><button type="button" data-value="2048">2K</button>
                <button type="button" data-value="4096">4K</button>
              </div>
              <input id="search-dimension" type="hidden" value="1024" />
              <p>Smaller vectors trade storage for retrieval fidelity.</p>
            </fieldset>

            <button class="primary-button" id="search-button" type="submit">
              <span>Map the semantic field</span><i></i>
            </button>
          </form>

          <div class="result-deck" id="search-results" aria-live="polite">
            <div class="result-topbar">
              <div><span class="signal"><i></i>MODEL READY</span><small>tencent / WeMM-Embedding-9B</small></div>
              <span class="result-count">AWAITING QUERY</span>
            </div>
            <div class="empty-universe">
              <div class="empty-field" aria-hidden="true">
                <i></i><i></i><i></i><i></i><i></i><i></i><span>W</span>
              </div>
              <h3>Your semantic field is quiet.</h3>
              <p>Compose a query or choose a curated expedition. The first run maps the multimodal corpus; later runs reuse its cached vectors.</p>
              <div class="media-preview-rail">
                <img src="/assets/llama4_hgf.png" alt="Llama 4 model card screenshot" />
                <img src="/assets/doc2.jpg" alt="Historical budget infographic" />
                <video src="/assets/mapo_tofu.mp4" muted playsinline aria-label="Mapo tofu cooking clip"></video>
                <img src="/assets/doc4.jpg" alt="Road safety assessment page" />
              </div>
            </div>
          </div>
        </div>
      </section>

      <section class="studio compare-studio" data-panel="compare" hidden>
        <div class="section-heading">
          <div><span>02 / VECTOR MICROSCOPE</span><h2>Put any two ideas<br />under the lens.</h2></div>
          <p>Compare any supported pair, then observe whether their relationship survives Matryoshka compression from 4,096 to 64 dimensions.</p>
        </div>

        <form id="compare-form">
          <div class="compare-inputs">
            <article class="compare-side" data-side="a">
              <header><span>A</span><div><b>QUERY</b><small>What are you looking for?</small></div></header>
              <textarea id="pair-query-text" rows="5" placeholder="A picture or description of an idea…"></textarea>
              <div class="pair-uploads">
                <label><input id="pair-query-image" type="file" accept="image/*" /><span></span>IMAGE</label>
                <label><input id="pair-query-video" type="file" accept="video/*" /><span></span>VIDEO</label>
              </div>
              <div class="pair-file" id="pair-query-file" hidden></div>
            </article>
            <div class="versus" aria-hidden="true"><span></span><small>COSINE</small></div>
            <article class="compare-side" data-side="b">
              <header><span>B</span><div><b>CANDIDATE</b><small>What should it align with?</small></div></header>
              <textarea id="pair-candidate-text" rows="5" placeholder="A candidate in text, image, or video…"></textarea>
              <div class="pair-uploads">
                <label><input id="pair-candidate-image" type="file" accept="image/*" /><span></span>IMAGE</label>
                <label><input id="pair-candidate-video" type="file" accept="video/*" /><span></span>VIDEO</label>
              </div>
              <div class="pair-file" id="pair-candidate-file" hidden></div>
            </article>
          </div>

          <div class="compare-controls">
            <div class="dimension-pills" data-dimension-group="compare">
              <button type="button" data-value="64">64</button><button type="button" data-value="128">128</button>
              <button type="button" data-value="256">256</button><button type="button" data-value="512">512</button>
              <button type="button" data-value="1024" class="active">1K</button><button type="button" data-value="2048">2K</button>
              <button type="button" data-value="4096">4K</button>
            </div>
            <input id="compare-dimension" type="hidden" value="1024" />
            <button class="primary-button" id="compare-button" type="submit"><span>Measure alignment</span><i></i></button>
          </div>
        </form>
        <div class="compare-results" id="compare-results" aria-live="polite">
          <div class="compare-empty"><span></span><p>Add one input on each side to activate the microscope.</p></div>
        </div>
      </section>

      <section class="model-story">
        <div class="story-number">4096</div>
        <div class="story-copy">
          <span>ONE MODEL · MANY RESOLUTIONS</span>
          <h2>Fold the vector.<br /><em>Keep the meaning.</em></h2>
          <p>WeMM emits a 4,096-dimensional embedding with Matryoshka structure. Store fewer leading dimensions when latency or memory matters, and inspect the tradeoff here before choosing.</p>
        </div>
        <div class="dimension-tower" aria-hidden="true">
          <i style="--w:100%"><span>4096</span></i><i style="--w:72%"><span>2048</span></i>
          <i style="--w:50%"><span>1024</span></i><i style="--w:36%"><span>512</span></i>
          <i style="--w:24%"><span>256</span></i><i style="--w:16%"><span>128</span></i>
          <i style="--w:10%"><span>64</span></i>
        </div>
      </section>
    </main>

    <footer>
      <div class="footer-brand"><span class="brand-mark"><i></i><i></i><i></i></span><b>WeMM</b></div>
      <p>Cosine similarity ranks candidates within a collection. It is not a calibrated probability. Audio is not supported.</p>
      <div><a href="https://huggingface.co/tencent/WeMM-Embedding-9B" target="_blank" rel="noreferrer">MODEL CARD ↗</a><a href="https://arxiv.org/abs/2608.24053" target="_blank" rel="noreferrer">PAPER ↗</a></div>
    </footer>

    <div class="job-toast" id="job-toast" hidden>
      <div class="job-orbit"><i></i><i></i><span>W</span></div>
      <div><span id="job-label">ALLOCATING ZERO GPU</span><b id="job-phase">Entering the semantic field…</b><small id="job-elapsed">00:00 elapsed</small></div>
      <button id="job-close" type="button" aria-label="Dismiss">×</button>
      <div class="job-progress"><i id="job-progress-bar"></i></div>
    </div>
    <div class="error-toast" id="error-toast" hidden><b>Something interrupted the field.</b><span></span><button type="button">×</button></div>
  </body>
</html>