feat(chatbot): toggle de mode branché sur les 5 interfaces chatbot
Placeholder (/ et /agences desktop), Sheet (/ mobile), Réseaux (/agences mobile), chatbot de /trouver-du-taf et Pensées (/media) envoient `profondeur` dans le body et l'enregistrent sur chaque message (badge conservé à la restauration). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015vcVGz8i4WpZm2dixKUiSD
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4c57f30f6a
commit
52b79e1e8e
@@ -42,6 +42,7 @@
|
||||
<template v-for="(msg, i) in messages" :key="i">
|
||||
<div v-if="msg.role === 'user'" class="chatbot-bubble user">{{ msg.content }}</div>
|
||||
<div v-else class="chatbot-bubble assistant">
|
||||
<ChatModeBadge :profondeur="msg.profondeur" />
|
||||
<div class="chatbot-md" v-html="renderMd(msg.content)" />
|
||||
<div v-if="msg.auteur" class="chatbot-auteur-tag">
|
||||
<span>{{ msg.auteur.nom }}</span>
|
||||
@@ -60,6 +61,11 @@
|
||||
<ChatNewConversation v-if="hasHistory && !loading" @reset="clearMessages" />
|
||||
</div>
|
||||
|
||||
<!-- Mode de réponse -->
|
||||
<div class="chatbot-mode-row">
|
||||
<ChatModeToggle v-model="profondeur" :disabled="loading" />
|
||||
</div>
|
||||
|
||||
<!-- Input -->
|
||||
<div class="chatbot-input-row">
|
||||
<input
|
||||
@@ -94,6 +100,7 @@ interface ChatMessage {
|
||||
role: 'user' | 'assistant'
|
||||
content: string
|
||||
auteur?: { slug: string; nom: string } | null
|
||||
profondeur?: string
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -105,6 +112,8 @@ const props = defineProps<{
|
||||
// ne mélange pas les historiques, et un rechargement restaure le bon.
|
||||
const sessionKey = computed(() => props.auteurContext ? `pensees-${slugify(props.auteurContext)}` : 'pensees')
|
||||
const { messages, hasHistory, clear } = useChatSession<ChatMessage>(sessionKey)
|
||||
// `profondeur` (et non `mode`, réservé au mode de recherche LightRAG côté serveur)
|
||||
const profondeur = useChatProfondeur('pensees')
|
||||
const inputText = ref('')
|
||||
const loading = ref(false)
|
||||
const errorMsg = ref('')
|
||||
@@ -134,6 +143,7 @@ async function sendMessage() {
|
||||
errorMsg.value = ''
|
||||
messages.value.push({ role: 'user', content: query })
|
||||
loading.value = true
|
||||
const mode = profondeur.value
|
||||
|
||||
await nextTick()
|
||||
scrollToBottom()
|
||||
@@ -147,6 +157,7 @@ async function sendMessage() {
|
||||
body: {
|
||||
query,
|
||||
corpus: corpusMode.value,
|
||||
profondeur: mode,
|
||||
auteur_slug: props.auteurContext ? slugify(props.auteurContext) : undefined,
|
||||
},
|
||||
})
|
||||
@@ -154,6 +165,7 @@ async function sendMessage() {
|
||||
role: 'assistant',
|
||||
content: res.response,
|
||||
auteur: res.auteur ?? null,
|
||||
profondeur: mode,
|
||||
})
|
||||
} catch (e: any) {
|
||||
const status = e?.statusCode ?? e?.status
|
||||
@@ -382,6 +394,16 @@ function slugify(str: string): string {
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
/* Mode de réponse */
|
||||
.chatbot-mode-row {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
padding: 6px 10px 0;
|
||||
border-top: 1px solid rgba(180, 170, 160, 0.22);
|
||||
background: var(--nav-surface);
|
||||
}
|
||||
.chatbot-mode-row + .chatbot-input-row { border-top: none; }
|
||||
|
||||
/* Input */
|
||||
.chatbot-input-row {
|
||||
flex-shrink: 0;
|
||||
|
||||
Reference in New Issue
Block a user