/** * ModelBar - 模型选择栏组件 */ import { state, KEYS } from '../state.js'; import { formatSize } from '../utils.js'; import { showToast } from './toast.js'; let modelSelectEl, toggleThinkEl; export function initModelBar() { modelSelectEl = document.querySelector('#modelSelect'); toggleThinkEl = document.querySelector('#toggleThink'); // 模型选择变化 → 保存到设置 modelSelectEl.addEventListener('change', async () => { const db = state.get(KEYS.DB); if (db) await db.saveSetting('selectedModel', modelSelectEl.value); }); } /** * 加载模型列表 */ export async function loadModels() { const api = state.get(KEYS.API); const db = state.get(KEYS.DB); const currentSession = state.get(KEYS.CURRENT_SESSION); if (!api) return; try { const data = await api.listModels(); modelSelectEl.innerHTML = ''; if (!data.models || data.models.length === 0) { modelSelectEl.innerHTML = ''; return; } data.models.forEach(m => { const opt = document.createElement('option'); opt.value = m.name; opt.textContent = `${m.name} (${formatSize(m.size)})`; modelSelectEl.appendChild(opt); }); // 恢复上次选择的模型 if (currentSession && currentSession.model) { modelSelectEl.value = currentSession.model; } if (db) await db.saveSetting('selectedModel', modelSelectEl.value); } catch (err) { console.error('[ModelBar] 加载模型失败:', err); modelSelectEl.innerHTML = ''; } } /** * 获取当前选择的模型 */ export function getSelectedModel() { return modelSelectEl.value; } /** * 设置选中的模型 */ export function setSelectedModel(modelName) { modelSelectEl.value = modelName; } /** * Think 模式是否开启 */ export function isThinkEnabled() { return toggleThinkEl.checked; }