v0.16.13: 修复流式渲染失效 Bug + 版本号更新
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://img.shields.io/badge/version-v0.16.12-E8734A?style=flat-square" alt="version">
|
<img src="https://img.shields.io/badge/version-v0.16.13-E8734A?style=flat-square" alt="version">
|
||||||
<img src="https://img.shields.io/badge/electron-33+-47848F?style=flat-square&logo=electron" alt="electron">
|
<img src="https://img.shields.io/badge/electron-33+-47848F?style=flat-square&logo=electron" alt="electron">
|
||||||
<img src="https://img.shields.io/badge/typescript-5.7+-3178C6?style=flat-square&logo=typescript" alt="typescript">
|
<img src="https://img.shields.io/badge/typescript-5.7+-3178C6?style=flat-square&logo=typescript" alt="typescript">
|
||||||
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="license">
|
<img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="license">
|
||||||
@@ -245,7 +245,7 @@ npm start
|
|||||||
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
|
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
|
||||||
```
|
```
|
||||||
|
|
||||||
产出:`release/Metona Ollama Setup v0.16.12.exe`
|
产出:`release/Metona Ollama Setup v0.16.13.exe`
|
||||||
|
|
||||||
## 🛠️ 常用命令
|
## 🛠️ 常用命令
|
||||||
|
|
||||||
@@ -485,7 +485,7 @@ npm start
|
|||||||
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
|
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ npm run dist
|
||||||
```
|
```
|
||||||
|
|
||||||
Output: `release/Metona Ollama Setup v0.16.12.exe`
|
Output: `release/Metona Ollama Setup v0.16.13.exe`
|
||||||
|
|
||||||
## 🛠️ Common Commands
|
## 🛠️ Common Commands
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "metona-ollama-desktop",
|
"name": "metona-ollama-desktop",
|
||||||
"version": "0.16.12",
|
"version": "0.16.13",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "metona-ollama-desktop",
|
"name": "metona-ollama-desktop",
|
||||||
"version": "0.16.12",
|
"version": "0.16.13",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ffmpeg-static": "^5.2.0",
|
"ffmpeg-static": "^5.2.0",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "metona-ollama-desktop",
|
"name": "metona-ollama-desktop",
|
||||||
"version": "0.16.12",
|
"version": "0.16.13",
|
||||||
"description": "Metona Ollama - TypeScript + Electron 桌面 AI 聊天客户端",
|
"description": "Metona Ollama - TypeScript + Electron 桌面 AI 聊天客户端",
|
||||||
"main": "dist/main/main.js",
|
"main": "dist/main/main.js",
|
||||||
"author": "thzxx",
|
"author": "thzxx",
|
||||||
|
|||||||
+1
-1
@@ -101,7 +101,7 @@ export function createMenu(): void {
|
|||||||
dialog.showMessageBox(mainWindow!, {
|
dialog.showMessageBox(mainWindow!, {
|
||||||
type: 'info',
|
type: 'info',
|
||||||
title: '关于 Metona Ollama',
|
title: '关于 Metona Ollama',
|
||||||
message: 'Metona Ollama Desktop v0.16.12',
|
message: 'Metona Ollama Desktop v0.16.13',
|
||||||
detail: 'TypeScript + Electron Ollama AI 聊天客户端\n\nhttps://gitee.com/thzxx/metona-ollama',
|
detail: 'TypeScript + Electron Ollama AI 聊天客户端\n\nhttps://gitee.com/thzxx/metona-ollama',
|
||||||
icon: getIconPath()
|
icon: getIconPath()
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -115,22 +115,28 @@ export class OllamaAPI {
|
|||||||
|
|
||||||
for (const line of lines) {
|
for (const line of lines) {
|
||||||
if (!line.trim()) continue;
|
if (!line.trim()) continue;
|
||||||
|
let chunk: OllamaStreamChunk;
|
||||||
try {
|
try {
|
||||||
const chunk: OllamaStreamChunk = JSON.parse(line);
|
chunk = JSON.parse(line);
|
||||||
if (onChunk) onChunk(chunk);
|
|
||||||
if (chunk.done) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} catch {
|
} catch {
|
||||||
|
continue; // 跳过无法解析的行(可能是不完整的 JSON)
|
||||||
|
}
|
||||||
|
// onChunk 回调错误不再被静默吞掉,而是向上传播给调用方
|
||||||
|
if (onChunk) onChunk(chunk);
|
||||||
|
if (chunk.done) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buffer.trim()) {
|
if (buffer.trim()) {
|
||||||
|
let chunk: OllamaStreamChunk;
|
||||||
try {
|
try {
|
||||||
const chunk: OllamaStreamChunk = JSON.parse(buffer);
|
chunk = JSON.parse(buffer);
|
||||||
if (onChunk) onChunk(chunk);
|
} catch {
|
||||||
} catch { /* ignore */ }
|
return; // 末尾 buffer 无法解析,忽略
|
||||||
|
}
|
||||||
|
if (onChunk) onChunk(chunk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -478,9 +478,11 @@ export function updateLastAssistantMessage(
|
|||||||
addCodeBlockCopyButtons(contentDiv);
|
addCodeBlockCopyButtons(contentDiv);
|
||||||
} else {
|
} else {
|
||||||
// 流式期间:实时 Markdown 渲染 + rAF 节流
|
// 流式期间:实时 Markdown 渲染 + rAF 节流
|
||||||
|
// R58-fix: 移除对未声明变量 _streamRenderThink/_streamRenderModel 的赋值
|
||||||
|
// 原代码在严格模式下会抛出 ReferenceError,被 chatStream 的空 catch 静默吞掉,
|
||||||
|
// 导致 requestAnimationFrame(_doStreamRender) 永远不会被调用,流式渲染完全失效。
|
||||||
|
// think 和 model 已在上方(model tag)和下方(think block)直接处理,无需传递给 _doStreamRender。
|
||||||
_streamRenderContent = safeContent;
|
_streamRenderContent = safeContent;
|
||||||
_streamRenderThink = think;
|
|
||||||
_streamRenderModel = model;
|
|
||||||
if (!_streamRenderPending) {
|
if (!_streamRenderPending) {
|
||||||
_streamRenderPending = true;
|
_streamRenderPending = true;
|
||||||
requestAnimationFrame(_doStreamRender);
|
requestAnimationFrame(_doStreamRender);
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
<div class="header-left">
|
<div class="header-left">
|
||||||
<img class="logo" src="./assets/icons/llama.png" alt="logo" />
|
<img class="logo" src="./assets/icons/llama.png" alt="logo" />
|
||||||
<span class="app-title">Metona Ollama</span>
|
<span class="app-title">Metona Ollama</span>
|
||||||
<span class="app-version">v0.16.12</span>
|
<span class="app-version">v0.16.13</span>
|
||||||
<button class="icon-btn help-btn" id="btnHelp" title="使用帮助">
|
<button class="icon-btn help-btn" id="btnHelp" title="使用帮助">
|
||||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
<circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
|
<circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user