@bolloon/bolloon-agent 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/llm/pi-ai.js CHANGED
@@ -920,6 +920,8 @@ export class PiAIModel {
920
920
  const _tAfter = Date.now();
921
921
  const promptBytes = JSON.stringify(messages).length;
922
922
  console.log(`[pi-ai timing] total=${_tAfter - _t0}ms attempt=${attempt + 1} fetch=${_tResp - _tFetch}ms parse=${_tParse - _tResp}ms reply=${content.length}B toolCalls=${toolCalls?.length ?? 0} model=${this.mapModel()} prompt=${promptBytes}B`);
923
+ lastAiTiming = { bytes: content.length, ms: Math.max(1, _tAfter - _t0), at: _tAfter }; // 状态栏 ↑ t/s 的真数
924
+ lastAiUsage = { cached: usage?.cachedTokens || 0, prompt: usage?.promptTokens || 0, at: _tAfter }; // 状态栏 ◎ 缓存命中率
923
925
  retryAgent?.destroy().catch(() => { });
924
926
  return { reply: content, toolCalls: toolCalls && toolCalls.length > 0 ? toolCalls : undefined, reasoningContent, usage };
925
927
  }
@@ -994,6 +996,8 @@ export class PiAIModel {
994
996
  console.log(formatKvServerLine(purpose, usage, { stream: true }));
995
997
  const toolCalls = acc.filter(Boolean);
996
998
  console.log(`[pi-ai timing] total=${Date.now() - t0}ms stream reply=${reply.length}B toolCalls=${toolCalls.length}`);
999
+ lastAiTiming = { bytes: reply.length, ms: Math.max(1, Date.now() - t0), at: Date.now() }; // 状态栏 ↑ t/s 的真数
1000
+ lastAiUsage = { cached: usage?.cachedTokens || 0, prompt: usage?.promptTokens || 0, at: Date.now() }; // 状态栏 ◎ 缓存命中率
997
1001
  return {
998
1002
  reply,
999
1003
  reasoningContent: reasoning || undefined,
@@ -1448,6 +1452,25 @@ export function getModel() {
1448
1452
  export function isModelAvailable() {
1449
1453
  return modelInstance !== null;
1450
1454
  }
1455
+ /**
1456
+ * 最近一次模型调用的**真实吞吐** (2026-09-30, 状态栏 `↑ ≈N t/s` 用)。
1457
+ *
1458
+ * 为什么不用"猜": 这里就是 pi-ai 自己打 timing 日志的地方 —— `total=<ms>` 与 `reply=<bytes>`
1459
+ * 都是**实测**, 状态栏直接读它 = 真数字 (字节折 token 才标 ≈)。
1460
+ * 注意: 只在**成功的模型调用**后更新; 没有记录时状态栏就不显示 ↑ (不编)。
1461
+ */
1462
+ let lastAiTiming = null;
1463
+ /** 读最近一次模型调用的吞吐记录 (null = 本进程还没成功调过) */
1464
+ export function getLastAiTiming() { return lastAiTiming; }
1465
+ /**
1466
+ * 最近一次模型调用的**用量** (2026-09-30, 状态栏 `◎ 缓存命中率` 用)。
1467
+ * cachedTokens / promptTokens 都来自 provider 的 usage 字段 (OpenAI/DeepSeek:
1468
+ * prompt_tokens_details.cached_tokens; llama.cpp: timings.cache_n) —— 见 extractUsage。
1469
+ * 命中率 = cached / prompt。**只报实测**, 没记录就不显示 (不编)。
1470
+ */
1471
+ let lastAiUsage = null;
1472
+ /** 读最近一次模型调用的用量记录 (null = 本进程还没有带 usage 的成功调用) */
1473
+ export function getLastAiUsage() { return lastAiUsage; }
1451
1474
  export function getMinimax() {
1452
1475
  return getModel();
1453
1476
  }
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema": "bolloon-mobile-web/1",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "channel": "stable",
5
5
  "build": "stable",
6
- "commit": "5d4b12a9059a6fa1679b349f9577e827a21fc427",
7
- "builtAt": "2026-09-30T02:06:24.229Z",
6
+ "commit": "4ac5fe0393fe1b00b21d7d23dade62e4e7854a52",
7
+ "builtAt": "2026-09-30T10:52:06.970Z",
8
8
  "layer": "web",
9
9
  "note": "web 资源层构建戳 (手机端 OTA 的身份第 ③ 级回退; 装机后以 OTA state.json 为准)"
10
10
  }
package/dist/web/sw.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * 现在: 代码类资源 (html/js/css/json) 一律 **network-first** (拿不到网才回退缓存),
7
7
  * 缓存名带版本号, activate 时清掉所有旧缓存; 图标等静态资源仍 cache-first。
8
8
  */
9
- const CACHE = 'bolloon-mobile-v0.5.3';
9
+ const CACHE = 'bolloon-mobile-v0.5.4';
10
10
  const SHELL = [
11
11
  './mobile.html',
12
12
  './mobile.css',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bolloon/bolloon-agent",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "type": "module",
5
5
  "description": "P2P AI Document Agent - 全局安装后执行 `bolloon` 启动产品",
6
6
  "main": "dist/cli-entry.js",