Private
Public Access
1
0

Rough-in support for deepseeek-style separate reasoning output

This commit is contained in:
2025-01-25 19:18:52 +00:00
parent fb3edad0c3
commit 9372c1d2c0
10 changed files with 94 additions and 39 deletions

View File

@@ -116,19 +116,42 @@ func (m *Model) renderMessage(i int) string {
// Write message contents
sb := &strings.Builder{}
sb.Grow(len(msg.Content) * 2)
sb.Grow((len(msg.Content) + len(msg.ReasoningContent) * 2))
isLast := i == len(m.App.Messages)-1
isAssistant := msg.Role == api.MessageRoleAssistant
hasReasoning := msg.ReasoningContent != ""
if hasReasoning {
reasoning := strings.Builder{}
reasoning.WriteString("<thinking>\n")
if m.showDetails {
//_ = m.App.Ctx.Chroma.Highlight(sb, msg.ReasoningContent)
reasoning.WriteString(msg.ReasoningContent)
} else {
reasoning.WriteString("...")
}
if m.state == pendingResponse && isLast && isAssistant && msg.Content == "" {
// Show the assistant's cursor
reasoning.WriteString(m.replyCursor.View())
}
reasoning.WriteString("\n</thinking>")
_ = m.App.Ctx.Chroma.Highlight(sb, reasoning.String())
}
if msg.Content != "" {
if hasReasoning {
sb.WriteString("\n\n")
}
err := m.App.Ctx.Chroma.Highlight(sb, msg.Content)
if err != nil {
// This would wipe out the thinking text
sb.Reset()
sb.WriteString(msg.Content)
}
}
isLast := i == len(m.App.Messages)-1
isAssistant := msg.Role == api.MessageRoleAssistant
if m.state == pendingResponse && isLast && isAssistant {
if m.state == pendingResponse && isLast && isAssistant && (!hasReasoning || msg.Content != "") {
// Show the assistant's cursor
sb.WriteString(m.replyCursor.View())
}