모델 선택기

Model picker

속도·성능·비용이 다른 여러 모델 중 하나를 고르는 드롭다운. 각 옵션에 특성을 짧게 표시합니다.

다른 이름: Model switcherModel dropdown
···
html
<div class="mp">
  <button class="trigger" id="trig"><span id="tname">Balanced</span><i class="chev">▾</i></button>
  <div class="menu" id="menu">
    <button class="opt" data-m="Fast"><span class="nm">Fast</span><span class="tag">빠름</span></button>
    <button class="opt" data-m="Balanced" data-sel><span class="nm">Balanced</span><span class="tag">균형</span></button>
    <button class="opt" data-m="Max"><span class="nm">Max</span><span class="tag">가장 정교함</span></button>
  </div>
</div>
css
.mp{position:relative;width:min(180px,80%)}
.trigger{width:100%;display:flex;justify-content:space-between;align-items:center;padding:9px 12px;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--fg);font-size:12px;font-weight:600;cursor:pointer}
.chev{font-style:normal;color:var(--muted);transition:transform .2s}
.menu{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 30px rgba(0,0,0,.2);
  display:grid;opacity:0;transform:translateY(-4px);pointer-events:none;transition:opacity .18s,transform .18s;overflow:hidden}
.menu[data-open]{opacity:1;transform:none}
.opt{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border:0;background:none;cursor:pointer;font-size:11.5px;color:var(--fg)}
.opt[data-sel]{background:color-mix(in srgb, var(--accent) 12%, transparent);color:var(--accent);font-weight:700}
.opt .tag{color:var(--muted);font-size:10px}
.opt[data-sel] .tag{color:var(--accent)}
js
const trig = document.getElementById('trig'), menu = document.getElementById('menu'), tname = document.getElementById('tname');
const opts = [...document.querySelectorAll('.opt')];
function select(name) {
  tname.textContent = name;
  opts.forEach((o) => o.toggleAttribute('data-sel', o.dataset.m === name));
}
function run() {
  menu.setAttribute('data-open', '');
  setTimeout(() => {
    const names = opts.map((o) => o.dataset.m);
    const cur = names.indexOf(tname.textContent);
    select(names[(cur + 1) % names.length]);
    setTimeout(() => menu.removeAttribute('data-open'), 500);
  }, 900);
}
setTimeout(run, 600);
setInterval(run, 3200);

같은 제품 안에 빠르고 가벼운 모델과 느리지만 더 정교한 모델이 함께 제공되는 경우, 사용자가 지금 작업에 맞는 쪽을 고를 수 있게 하는 선택기입니다. 항목마다 이름과 함께 "빠름", "가장 똑똑함" 같은 한두 단어 특성이나 속도·품질을 막대로 표시해, 모델 이름 자체를 몰라도 무엇을 고르는 건지 짐작할 수 있게 합니다.

라디오 버튼과 비슷하게 한 번에 하나만 선택되고, 선택 즉시 드롭다운이 닫히며 트리거 버튼에 선택된 모델 이름이 반영됩니다. 대화 중간에 모델을 바꾸면 이전 메시지들과 다른 모델이 답하게 된다는 뜻이므로, 대화 안에 "이 지점부터 모델 변경"을 표시해 두는 제품도 있습니다.

기본값 선택이 가장 중요합니다 — 대부분의 사용자는 선택지를 아예 건드리지 않으므로, 기본으로 켜진 모델이 사실상 전체 사용자 경험을 결정합니다.

언제 쓰나

속도·비용·성능 트레이드오프가 실제로 사용자에게 의미 있는 제품에 씁니다. 모델이 하나뿐이라면 당연히 필요 없습니다.