Newer
Older
navi-1 / webclient / src / components / messages / ThinkingCard.vue
@Eugene Sukhodolskiy Eugene Sukhodolskiy on 25 Apr 882 bytes Collapse thinking and plan cards by default
<template>
  <details ref="detailsEl" class="thinking-card">
    <summary>
      <i class="ph ph-brain"></i>
      Thinking
      <span v-if="!msg.thinking.done" class="spinner"></span>
      <i class="ph ph-caret-down thinking-chevron"></i>
    </summary>
    <div class="thinking-body">{{ cleanedText }}</div>
  </details>
</template>

<script setup>
import { ref, computed } from 'vue'

const props = defineProps({ msg: { type: Object, required: true } })

const detailsEl = ref(null)

const cleanedText = computed(() => {
  const raw = props.msg.thinking?.text ?? ''
  return raw
    // Strip <thought> / </thought> XML tags (Ollama sometimes leaks these)
    .replace(/^<thought>\s*/i, '')
    .replace(/\s*<\/thought>\s*$/i, '')
    // Strip a bare "thought" or "thought:" that appears alone on the first line
    .replace(/^thought\s*:?\s*\n+/i, '')
    .trim()
})
</script>