Modeller

Bir yapay zeka ürününün ayarlarındaki Modeller sayfası. Bağlamı, hızı ve maliyeti tek bakışta görünen varsayılan bir model, her modelin neyi desteklediğini bilen varsayılan bir efor, sağlayıcıya göre gruplanmış; filtreler, sabitlemeler ve toplu anahtarlar içeren aranabilir bir model listesi, gerçek bir bağlantı testi olan OpenAI uyumlu sunucular ve nelerin yeni olduğunu söyleyen bir yenileme.

Her yapay zeka ürününde bir Models sayfası oluşur: seçicide hangi modellerin görüneceği, yeni sohbetlerin hangisiyle başlayacağı, ne kadar derin düşüneceği ve arka plan işlerini hangi küçük modelin çalıştıracağı. Models, bu sayfanın herhangi bir Settings bölümüne eklenebilen ve geri kalan ayarlarınızla aynı adadan kaydeden tek bir bileşen, ModelSettings, halidir.

Default model, açık olan modellerin sağlayıcıya göre gruplanmış, her birinin bağlamı, maliyeti ve yetenekleriyle bir menüsünü açar. Seçicinin altındaki çipler seçilen modelin bağlam penceresini, hızını ve maliyetini gösterir; böylece biri sohbet açmadan önce takas görünür olur. Default effort, Prompt Input'taki efor kaydırıcısını kullanır ve varsayılan modelin neyi desteklediğini bilir. Modelin yapabildiğinin ötesine sürüklerseniz kaydırıcı en yüksek düzeyine yerleşir, altındaki satır nedenini söyler ve ekran okuyucular da bunu duyar. Akıl yürütmeyen modeller kaydırıcıyı grileştirir ve eforun geçerli olmadığını açıklar.

Model listesi ada, sağlayıcıya ve yeteneğe göre arar; Enabled, Reasoning, Fast veya Vision'a filtreler. Modeller, açık olanların sayısıyla sağlayıcıya göre gruplanır ve bir sağlayıcının tamamını açıp kapatan tek bir anahtar vardır. Her satır bağlamı, dört noktalı maliyet ölçeğini ve New ile Preview rozetlerini gösterir. En çok kullandığınız modelleri bir satırın menüsünden sabitleyin; seçicinin gösterdiği sırayla üstteki Pinned grubuna taşınırlar. Bunları sürüklemeden, Move up ve Move down ya da Alt ve ok tuşlarıyla taşıyın.

Add model, yerel olanlar dahil herhangi bir OpenAI uyumlu sunucuyu bağlar. URL'yi kontrol eder, zaten eklediğiniz bir modeli işaretler ve eklemeden önce bağlantıyı test eder; sunucunun yanıt vermesinin ne kadar sürdüğünü ya da başarısızlık nedenini gösterir. Anahtar alanı, siz gösterene kadar anahtarı gizler. Refresh, sunucunuzdan en son kataloğu ister ve "2 new models: Nova 3.5 and Atlas 2 Vision" gibi sakin bir banner gösterir; Show ile bunlara filtrelenebilir. Yeni modeller kapalı gelir, bu yüzden siz seçene kadar seçicide hiçbir şey değişmez.

Task models, explore alt ajanına, sohbet başlıklarına ve özetlere kendi modelini ya da Auto'yu verir. Kaydedene kadar hiçbir şey kaydedilmez: her değişiklik Settings kaydetme çubuğunu yükseltir, Discard kaldırılan özel modeller dahil her şeyi geri koyar ve varsayılan model yanlışlıkla kapatılamaz.

  1. Pro registry'yi components.json dosyasına ekleyin

    components.json
    {
      "registries": {
        "@hextaui-pro": {
          "url": "https://hextaui.com/r/pro/{name}.json",
          "headers": {
            "Authorization": "Bearer ${HEXTAUI_PRO_TOKEN}"
          }
        }
      }
    }
  2. Token'ınızı ekleyin

    Hesap sayfanızda bir token oluşturun ve .env.local dosyasına HEXTAUI_PRO_TOKEN olarak ekleyin.

  3. Bloğu ekleyin

    pnpm dlx shadcn@latest add @hextaui-pro/models

API'nize bağlayın

ModelSettings'i bir SettingsSection içine koyun. Kataloğu ve kayıtlı olanı iletin, onSave içinde kaydedin ve onRefresh'ten en son kataloğu döndürün. Mesajı göstermek için ikisinden de hata fırlatın; taslak korunur.

"use client"

import { IconCube } from "@tabler/icons-react"

import { SettingsSection, SettingsShell, type SettingsSectionItem } from "../settings/settings"
import { ModelSettings, type ModelInfo, type ModelSettingsValues } from "@/components/blocks/models/model-settings"

const sections: SettingsSectionItem[] = [{ id: "models", label: "Models", icon: <IconCube /> }]

export function ModelsPage({
  models,
  values,
}: {
  models: ModelInfo[]
  values: ModelSettingsValues
}) {
  return (
    <SettingsShell sections={sections} className="h-svh">
      <SettingsSection id="models">
        <ModelSettings
          models={models}
          values={values}
          onSave={async (next) => {
            const response = await fetch("/api/settings/models", {
              method: "PUT",
              body: JSON.stringify(next),
            })
            if (!response.ok) throw new Error("Check your connection and try again.")
          }}
          onRefresh={async () => {
            const response = await fetch("/api/models")
            if (!response.ok) throw new Error("The model list is unavailable.")
            return (await response.json()) as ModelInfo[]
          }}
        />
      </SettingsSection>
    </SettingsShell>
  )
}

Özel sunucuları test edin

onTestConnection temel URL'yi, model ID'sini ve anahtarı alır. Sunucu yanıt verdiğinde resolve edin ya da insanların işlem yapabileceği bir mesajla hata fırlatın. Add model önce aynı testi çalıştırır; böylece bozuk bir sunucu listeye asla girmez.

"use client"

import { ModelSettings, type ModelConnection, type ModelInfo, type ModelSettingsValues } from "@/components/blocks/models/model-settings"

async function testConnection({ baseUrl, model, apiKey }: ModelConnection) {
  const response = await fetch(`${baseUrl}/chat/completions`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
    },
    body: JSON.stringify({ model, max_tokens: 1, messages: [{ role: "user", content: "ping" }] }),
  }).catch(() => {
    throw new Error(`Couldn’t reach ${new URL(baseUrl).host}. Check the URL and that the server is running.`)
  })
  if (response.status === 401) throw new Error("The server said 401. Check the API key.")
  if (response.status === 404) throw new Error(`The server doesn’t know “${model}”.`)
  if (!response.ok) throw new Error(`The server said ${response.status}.`)
}

export function ModelsWithCustomServers({
  models,
  values,
  onSave,
}: {
  models: ModelInfo[]
  values: ModelSettingsValues
  onSave: (values: ModelSettingsValues) => Promise<void>
}) {
  return (
    <ModelSettings
      models={models}
      values={values}
      onSave={onSave}
      onTestConnection={testConnection}
    />
  )
}

Kendi efor düzeyleriniz ve görevleriniz

efforts kaydırıcının düzeylerini belirler ve her modelin efforts değeri desteklediklerini listeler. tasks kendi modelini alan arka plan işlerini belirler.

"use client"

import { ModelSettings, type ModelInfo, type ModelSettingsValues } from "@/components/blocks/models/model-settings"

const models: ModelInfo[] = [
  {
    id: "nova-3",
    name: "Nova 3",
    provider: "Hexta",
    context: 200_000,
    speed: "balanced",
    price: 2,
    efforts: ["none", "light", "deep"],
    recommendedEffort: "light",
  },
  {
    id: "nova-3-mini",
    name: "Nova 3 Mini",
    provider: "Hexta",
    context: 128_000,
    speed: "fast",
    price: 1,
    efforts: ["none", "light"],
  },
]

const efforts = [
  { value: "none", label: "None" },
  { value: "light", label: "Light" },
  { value: "deep", label: "Deep" },
]

const tasks = [
  { id: "titles", label: "Chat titles", description: "Names new chats from the first message." },
]

export function ModelsWithOwnLevels({
  values,
  onSave,
}: {
  values: ModelSettingsValues
  onSave: (values: ModelSettingsValues) => Promise<void>
}) {
  return (
    <ModelSettings models={models} values={values} onSave={onSave} efforts={efforts} tasks={tasks} />
  )
}

Yapı

Dıştan içe doğru birleştirdiğiniz parçalar.

ParçaAçıklama
ModelSettingsTüm Models bölümü: varsayılanlar, model seçici listesi ve görev modelleri. Bir SettingsSection içine yerleştirin.
Default modelEtkin modellerin istatistikleriyle bir menüsü ve seçilen modelin bağlamı, hızı ve maliyeti için çipler.
Default effortVarsayılan modelin desteklediği düzeylerle sınırlı Prompt Input efor kaydırıcısı.
Model pickerArama, filtreler, bir yenileme banner'ı, bir Pinned grubu ve sağlayıcı başına bir grup; her satırda bir anahtar ve bir menü.
Add model dialogBir OpenAI uyumlu sunucu için Base URL, model ID, görünen ad ve API anahtarı; bağlantı testiyle.
Task modelsArka plan işi başına bir model ya da Auto.

ModelSettings

Kabuğun kaydetme çubuğuyla kaydettiği için SettingsShell içinde, genellikle bir SettingsSection içinde render edilmelidir.

PropTürVarsayılan
modelsKatalog. { id, name, provider, context?, speed?, price?, vision?, efforts?, recommendedEffort?, status?, description? }. speed "fast" | "balanced" | "thorough", price 1 ile 4 arasıdır, efforts modelin desteklediği efor değerlerini listeler (akıl yürütmeyen modeller için atlayın) ve status "new" | "preview" olabilir.
ModelInfo[]–
valuesKayıtlı olan: { defaultModel, effort, enabled, pinned, tasks, custom }. enabled ve pinned model id'leridir, pinned seçici sırasındadır. tasks bir görev id'sini bir model id'sine ya da "auto"ya eşler. custom eklenen sunucuları tutar.
ModelSettingsValues–
onSaveTaslağı kaydeder. Mesajı kaydetme çubuğunda göstermek ve taslağı korumak için hata fırlatın.
(values) => void | Promise<void>–
onRefreshEn son kataloğu getirin. Görmediği id'lere sahip modeller bir New rozeti ve banner alır. Nedenini Try again ile göstermek için hata fırlatın. Yenile düğmesini gizlemek için atlayın.
() => Promise<ModelInfo[]>–
onTestConnectionÖzel bir sunucuyu denetleyin. Yanıt verirse resolve edin, vermezse bir mesajla hata fırlatın. Test olmadan özel model eklemek için atlayın.
(connection: { baseUrl, model, apiKey }) => Promise<void>–
effortsEn hızlıdan en akıllıya efor düzeyleri.
{ value, label }[]Low, Medium, High, Max
tasksKendi modelini alan arka plan işleri. Grubu gizlemek için [] iletin.
{ id, label, description? }[]Explore subagent, Chat titles, Summaries
TuşAction
EscapeAramada sorguyu temizler.
EnterEşleşme olmayan bir aramada, sorguyu model ID olarak kullanarak Add model'i açar.
←→Filtreler arasında gezinir. Efor kaydırıcısında, varsayılan modelin desteklediği yerde durarak düzeyi değiştirir.
SpaceOdaktaki modeli açar veya kapatır.
Alt↑Sabitlenmiş bir modelin anahtarında veya menüsünde onu seçicide yukarı taşır. Alt+↓ aşağı taşır. Odak aynı kontrolde kalır.
⌘SSettings'in geri kalanı gibi kaydeder. Windows ve Linux'ta Ctrl+S.
  • Her sağlayıcı ve Pinned grubu, başlığıyla adlandırılmış bir listedir ve her satır modeliyle adlandırılır.
  • Anahtarlar modelin adıyla etiketlenir ve bağlamı, maliyeti ve yetenekleriyle tanımlanır. Varsayılan modelin anahtarı devre dışıdır ve nedenini söyler.
  • Polite bir live region, bir arama veya filtreyle kaç modelin eşleştiğini, yenileme sonuçlarını, toplu değişiklikleri, sabitlemeleri, taşımaları ve eforun model tarafından ne zaman sınırlandığını duyurur.
  • Sabitlenmiş bir model taşındığında veya bir satır grup değiştirdiğinde odak onu aynı kontrole kadar izler.
  • Maliyet ölçeğinin Low cost gibi bir metin adı vardır; böylece noktalar tek sinyal olmaz.
  • Azaltılmış harekette banner, satır vurgusu ve kaydırıcı animasyonlanmaz.

Şunlarla geliştirildi

Models bloğunun yapıldığı ücretsiz HextaUI bileşenleri. Her biri tek başına yüklenir.

Kod

4 dosya, components/blocks/models konumuna eklendi.