LLM Proxy {{ T.adminTitle }}
{{ T.autoRefresh }}
{{ T.name }}Worker ID{{ T.supportedModels }}{{ T.connectedAt }}{{ T.activeReqs }}
{{ T.noWorkers }}
{{ w.name }} {{ w.worker_id }} {{ m }} {{ fmtTime(w.connected_at) }} {{ w.active_requests }}
IDKey{{ T.note }}{{ T.status }}{{ T.createdAt }}{{ T.actions }}
{{ T.noKeys }}
{{ k.id }} {{ maskKey(k.key) }} {{ k.note || '—' }} {{ k.is_active ? T.enabled : T.disabled }} {{ fmtTime(k.created_at) }}
{{ T.addEditModel }}
⚠ {{ T.rateHint }}

{{ T.exchangePreview }}

{{ T.contribute1K }} ({{ modelForm.tier }}) {{ modelForm.contribute_rate }} {{ T.credits }}
{{ T.exchangeNote }}
{{ modelMsg }}
{{ T.modelName }}{{ T.displayName }}{{ T.tier }}{{ T.contributeRate }}{{ T.consumeRate }}{{ T.status }}{{ T.actions }}
{{ T.noModels }}
{{ m.name }} {{ m.display_name || '—' }} {{ m.tier }} {{ m.contribute_rate }} {{ m.consume_rate }} {{ m.enabled ? T.enabled : T.disabled }}
{{ T.totalUsers(users.length) }}
ID{{ T.email }}{{ T.nickname }}{{ T.balance }}{{ T.earned }}{{ T.apikeyPerm }}{{ T.adjustCredits }}
{{ T.noUsers }}
{{ u.id }} {{ u.email }} {{ u.nickname }} {{ Number(u.credits_balance).toFixed(1) }} {{ Number(u.credits_earned).toFixed(1) }} {{ u.can_create_apikey ? T.granted : T.notGranted }}
ID{{ T.userId }}{{ T.credits }}{{ T.status }}{{ T.time }}{{ T.userNote }}{{ T.adminNote }}{{ T.actions }}
{{ T.noOrders }}
{{ o.id }} {{ o.user_id }} {{ o.amount_credits }} {{ T.orderLabels[o.status] || o.status }} {{ fmtTime(o.created_at) }} {{ o.note || '—' }} {{ o.admin_note || '—' }}
{{ T.sysConfig }}
{{ T.configLabels[key] || key }}
{{ key }}
{{ T.loading }}
⚠ {{ T.noOnlineModels }}
{{ debugMode==='image' ? '输入提示词生成图片' : T.chatPlaceholder }}
{{ m.role === 'user' ? T.you : 'AI' }}
{{ m.content }}
{{ T.vaList }}
{{ T.vaName }}{{ T.vaBaseUrl }}{{ T.vaApiStyle }}{{ T.vaModels }}{{ T.vaEnabled }}{{ T.actions }}
{{ T.noVirtualAgents }}
{{ a.name }} 🔑 {{ (a.credentials && a.credentials.has_refresh_token) ? (lang==='zh'?'已登录':'linked') : (lang==='zh'?'未登录':'no token') }} · {{ a.credentials.email }} {{ a.base_url }} {{ a.api_style }} {{ vaModelName(m) }} {{ a.enabled ? T.enabled : T.disabled }}
{{ vaEditId ? T.vaEdit : T.vaAdd }}
{{ vaMsg }}
{{ type==='apps' ? '🔧' : '🔀' }}
{{ type==='apps' ? (lang==='zh'?'应用配置':'Apps Config') : (lang==='zh'?'场景路由':'Routes Config') }}
{{ distribInfo[type].uploaded ? (lang==='zh' ? `已上传 · ${distribInfo[type].bytes} 字节` : `Uploaded · ${distribInfo[type].bytes} bytes`) : (lang==='zh' ? '未上传' : 'Not uploaded') }}
{{ lang==='zh' ? '客户端下载地址' : 'Client Download URL' }}
GET /api/config/apps
GET /api/config/scenes
{{ lang==='zh' ? '需要用户 JWT 认证' : 'Requires user JWT' }}
{{ type==='apps' ? '🔧' : '🔀' }} {{ type==='apps' ? (lang==='zh' ? '应用配置 (tokenbank.tools.yaml)' : 'Apps Config (tokenbank.tools.yaml)') : (lang==='zh' ? '场景路由配置 (tokenbank.routes.yaml)' : 'Routes Config (tokenbank.routes.yaml)') }}
{{ distribMsg[type] }}
{{ lang==='zh' ? '管理员在此上传 YAML 配置后,已登录的客户端点击「导入配置 → 🔗 服务器」即可下载并应用。两个文件格式相同(统一 schema),应用配置含 tools/protocols/routing 段,路由配置含 scene_routes 段。' : 'After uploading YAML here, logged-in clients can pull it via Import Config → 🔗 Server. Both files share the same schema: tools config has tools/protocols/routing sections; routes config has scene_routes section.' }}