diff options
| author | haoyuren <13851610112@163.com> | 2026-02-12 12:45:24 -0600 |
|---|---|---|
| committer | haoyuren <13851610112@163.com> | 2026-02-12 12:45:24 -0600 |
| commit | c8fae0256c91a0ebe495270aa15baa2f27211268 (patch) | |
| tree | efc908a9fb259a18809ab5151a15fc0f1e10fdf1 /frontend/src/components/Stage3.jsx | |
| parent | 92e1fccb1bdcf1bab7221aa9ed90f9dc72529131 (diff) | |
Multi-turn conversation, stop generation, SSE fix, and UI improvements
- Multi-turn context: all council stages now receive conversation history
(user messages + Stage 3 chairman responses) for coherent follow-ups
- Stop generation: abort streaming mid-request, recover query to input box
- SSE parsing: buffer-based chunking to prevent JSON split across packets
- Atomic storage: user + assistant messages saved together after completion,
preventing dangling messages on abort
- GFM markdown: tables, strikethrough via remark-gfm plugin + table styles
- Performance: memo user messages and completed assistant messages, only
re-render the active streaming message
- Model config: gpt-5.2, claude-opus-4.6 as chairman
- Always show input box for multi-turn conversations
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'frontend/src/components/Stage3.jsx')
| -rw-r--r-- | frontend/src/components/Stage3.jsx | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/frontend/src/components/Stage3.jsx b/frontend/src/components/Stage3.jsx index 9a9dbf7..f63a442 100644 --- a/frontend/src/components/Stage3.jsx +++ b/frontend/src/components/Stage3.jsx @@ -1,4 +1,5 @@ import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; import './Stage3.css'; export default function Stage3({ finalResponse }) { @@ -14,7 +15,7 @@ export default function Stage3({ finalResponse }) { Chairman: {finalResponse.model.split('/')[1] || finalResponse.model} </div> <div className="final-text markdown-content"> - <ReactMarkdown>{finalResponse.response}</ReactMarkdown> + <ReactMarkdown remarkPlugins={[remarkGfm]}>{finalResponse.response}</ReactMarkdown> </div> </div> </div> |
