- Remove redundant status steps (understanding, preparing, generating)
from SSE stream — only emit retrieved docs and reasoning content
- ThinkingProcess: only show when there's actual reasoning or docs
- Collapse header shows concise state: thinking count or doc count
- Clean up unused icon imports
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add DeepSeek provider routing: deepseek-chat/deepseek-reasoner use
api.deepseek.com, other models use SiliconFlow
- Add stream_with_reasoning() using raw OpenAI SDK to capture
reasoning_content (langchain_openai strips this field)
- RAG chain and conversation chain both use stream_with_reasoning
for proper reasoning display in thinking models
- Frontend model selector: grouped by provider (DeepSeek official +
SiliconFlow), default changed to deepseek-chat
- Regenerate message converted to streaming with reasoning capture
- Minor UI: globals.css additions, chat store refactoring
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Backend: intercept reasoning_content from DeepSeek-R1/QwQ streaming
chunks and emit as thinking events (stage=reasoning)
- RAG chain: show retrieved document titles/previews in thinking steps
- Conversation chain: directly stream from LLM to capture reasoning
- Frontend: collapsible thinking panel with reasoning section,
document details, and time summary
- Replace relative time with HH:mm format for message timestamps
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>