Z User commited on
Commit
8d9d6b7
·
1 Parent(s): 9274cab

feat: Qwen3 Coder 480B as primary + Gemma 4 31B as fallback

Browse files

- Set main model to qwen/qwen3-coder:free (Qwen3-Coder-480B-A35B)
- Add fallback_model: google/gemma-4-31b-it:free (auto-failover)
- Dashboard: show fallback model info in status + model panels
- entry.py: expose fallback_model in /api/status response

Files changed (3) hide show
  1. config.yaml +3 -0
  2. dashboard.html +8 -1
  3. entry.py +3 -0
config.yaml CHANGED
@@ -1,5 +1,8 @@
1
  model: qwen/qwen3-coder:free
2
  provider: openrouter
 
 
 
3
  max_turns: 90
4
  platforms:
5
  feishu:
 
1
  model: qwen/qwen3-coder:free
2
  provider: openrouter
3
+ fallback_model:
4
+ provider: openrouter
5
+ model: google/gemma-4-31b-it:free
6
  max_turns: 90
7
  platforms:
8
  feishu:
dashboard.html CHANGED
@@ -207,7 +207,8 @@ body{font-family:-apple-system,"SF Pro Display","Noto Sans SC","PingFang SC","He
207
  <div class="card purple"><div class="card-label">进程 PID</div><div class="card-val" id="x-pid2">--</div></div>
208
  <div class="card cyan"><div class="card-label">活跃会话</div><div class="card-val" id="x-sess2">0</div></div>
209
  <div class="card cyan"><div class="card-label">连接平台</div><div class="card-val" id="x-plat2">飞书</div><div class="card-sub" id="x-plat-s2">WebSocket</div></div>
210
- <div class="card orange"><div class="card-label">当前模型</div><div class="card-val" id="x-model2">--</div><div class="card-sub">OpenRouter</div></div>
 
211
  </div>
212
 
213
  <div class="sec-title">配置详情</div>
@@ -241,6 +242,7 @@ body{font-family:-apple-system,"SF Pro Display","Noto Sans SC","PingFang SC","He
241
  <div class="sec-title">模型信息</div>
242
  <div class="cfg-list">
243
  <div class="cfg-row"><span class="cfg-k">当前模型</span><span class="cfg-v" id="x-cur-model">--</span></div>
 
244
  <div class="cfg-row"><span class="cfg-k">提供商</span><span class="cfg-v">OpenRouter</span></div>
245
  <div class="cfg-row"><span class="cfg-k">状态</span><span class="cfg-v" id="x-model-status" style="color:var(--accent)">运行中</span></div>
246
  </div>
@@ -376,6 +378,11 @@ async function poll(){
376
  var modelName=(d.model||'--').split('/').pop();
377
  document.getElementById('x-model2').textContent=modelName.length>25?modelName.substring(0,25)+'…':modelName;
378
  document.getElementById('x-cur-model').textContent=modelName.length>35?modelName.substring(0,35)+'…':modelName;
 
 
 
 
 
379
  document.getElementById('x-model-status').textContent=d.running?'运行中':'已停止';
380
  document.getElementById('x-model-status').style.color=d.running?'var(--accent)':'var(--red)';
381
  // Config
 
207
  <div class="card purple"><div class="card-label">进程 PID</div><div class="card-val" id="x-pid2">--</div></div>
208
  <div class="card cyan"><div class="card-label">活跃会话</div><div class="card-val" id="x-sess2">0</div></div>
209
  <div class="card cyan"><div class="card-label">连接平台</div><div class="card-val" id="x-plat2">飞书</div><div class="card-sub" id="x-plat-s2">WebSocket</div></div>
210
+ <div class="card orange"><div class="card-label">当前模型</div><div class="card-val" id="x-model2">--</div><div class="card-sub" id="x-model-sub">OpenRouter</div></div>
211
+ <div class="card" style="border-color:var(--border)"><div class="card-label">备用模型</div><div class="card-val" id="x-fallback">--</div><div class="card-sub">自动回退</div></div>
212
  </div>
213
 
214
  <div class="sec-title">配置详情</div>
 
242
  <div class="sec-title">模型信息</div>
243
  <div class="cfg-list">
244
  <div class="cfg-row"><span class="cfg-k">当前模型</span><span class="cfg-v" id="x-cur-model">--</span></div>
245
+ <div class="cfg-row"><span class="cfg-k">备用模型</span><span class="cfg-v" id="x-cur-fallback" style="color:var(--tx3)">--</span></div>
246
  <div class="cfg-row"><span class="cfg-k">提供商</span><span class="cfg-v">OpenRouter</span></div>
247
  <div class="cfg-row"><span class="cfg-k">状态</span><span class="cfg-v" id="x-model-status" style="color:var(--accent)">运行中</span></div>
248
  </div>
 
378
  var modelName=(d.model||'--').split('/').pop();
379
  document.getElementById('x-model2').textContent=modelName.length>25?modelName.substring(0,25)+'…':modelName;
380
  document.getElementById('x-cur-model').textContent=modelName.length>35?modelName.substring(0,35)+'…':modelName;
381
+ if(d.fallback_model){
382
+ var fbName=d.fallback_model.split('/').pop();
383
+ document.getElementById('x-fallback').textContent=fbName.length>25?fbName.substring(0,25)+'…':fbName;
384
+ document.getElementById('x-cur-fallback').textContent=fbName.length>35?fbName.substring(0,35)+'…':fbName;
385
+ }
386
  document.getElementById('x-model-status').textContent=d.running?'运行中':'已停止';
387
  document.getElementById('x-model-status').style.color=d.running?'var(--accent)':'var(--red)';
388
  // Config
entry.py CHANGED
@@ -332,12 +332,15 @@ class DashboardHandler(BaseHTTPRequestHandler):
332
 
333
  model = cfg.get("model", env.get("LLM_MODEL", "unknown"))
334
  provider = cfg.get("provider", "openrouter")
 
 
335
 
336
  return {
337
  "running": is_running,
338
  "pid": pid,
339
  "model": model,
340
  "provider": provider,
 
341
  "platform": "飞书 Feishu",
342
  "platform_mode": "WebSocket",
343
  "sessions": _get_sessions_count(),
 
332
 
333
  model = cfg.get("model", env.get("LLM_MODEL", "unknown"))
334
  provider = cfg.get("provider", "openrouter")
335
+ fallback = cfg.get("fallback_model", {})
336
+ fallback_model = fallback.get("model", "") if isinstance(fallback, dict) else ""
337
 
338
  return {
339
  "running": is_running,
340
  "pid": pid,
341
  "model": model,
342
  "provider": provider,
343
+ "fallback_model": fallback_model,
344
  "platform": "飞书 Feishu",
345
  "platform_mode": "WebSocket",
346
  "sessions": _get_sessions_count(),