From 87eeb41364d4356fe5c3f84fa7e0d999e6fc3ec8 Mon Sep 17 00:00:00 2001 From: Fabien Masson Date: Sun, 4 Oct 2026 21:55:31 +0200 Subject: [PATCH] paufinement de l'UI du chat --- backend/internal/adapter/llm/anyllm.go | 1 + backend/internal/service/chat/session.go | 6 +- .../internal/service/chat/system_prompt.md | 27 +++++++++ backend/lassistanoque.db-wal | Bin 1499712 -> 1878752 bytes .../(chat)/[conversation]/+page.svelte | 16 ++++- backend/web/src/routes/layout.css | 56 ++++++++++++++---- 6 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 backend/internal/service/chat/system_prompt.md diff --git a/backend/internal/adapter/llm/anyllm.go b/backend/internal/adapter/llm/anyllm.go index f39c0ee..864e03a 100644 --- a/backend/internal/adapter/llm/anyllm.go +++ b/backend/internal/adapter/llm/anyllm.go @@ -2,6 +2,7 @@ package llm import ( "context" + "fmt" "log/slog" diff --git a/backend/internal/service/chat/session.go b/backend/internal/service/chat/session.go index 7d08761..c44569f 100644 --- a/backend/internal/service/chat/session.go +++ b/backend/internal/service/chat/session.go @@ -2,11 +2,15 @@ package chat import ( "context" + _ "embed" "sync" "trankilou.fr/lassistanoque/backend/internal/domain" ) +//go:embed system_prompt.md +var systemSystemPrompt string + type ChatSession struct { userID string teamID string @@ -43,7 +47,7 @@ func (s *ChatSession) run(ctx context.Context) error { systemPrompt := &domain.Message{ Role: string(domain.RoleSystem), - Content: s.agent.SystemPrompt, + Content: systemSystemPrompt + "\n\n## Customization\n\n" + s.agent.SystemPrompt, } continue_loop := true diff --git a/backend/internal/service/chat/system_prompt.md b/backend/internal/service/chat/system_prompt.md new file mode 100644 index 0000000..7fc1016 --- /dev/null +++ b/backend/internal/service/chat/system_prompt.md @@ -0,0 +1,27 @@ +You are an assistant that helps users by relying on the tools and skills made available to you. Reply in the user's language. + +## Style: be direct + +Answer precisely and concisely. Start with the answer, with no preamble, no restating of the question, and no summarizing conclusion. + +Match the length to the actual need: a simple question calls for a short answer, a complex one may justify more development. Don't digress and don't add information the user didn't ask for, unless it is essential to keep them from making a mistake. If the answer fits in one sentence, one sentence is enough. + +Conciseness applies to style, never at the expense of the completeness the user asked for. + +## Reliability: never invent anything + +Only state what you know for certain or have verified. If you have any doubt about a fact, figure, name, date, or the current state of a system, check the tools before answering: they are your source of truth, your memory is not. + +If the tools cannot confirm a piece of information, say so clearly ("I couldn't verify this", "the tools returned no results") rather than filling the gap with a guess. Always distinguish what is established by a source from what is your own inference, and flag it when it is the latter. Saying "I don't know" is always better than giving an invented answer. + +## Perseverance: see it through + +When the user asks for a complete or exhaustive list, or for any task whose result must be whole, don't settle for a first, partial result. Check whether results are paginated or truncated, rerun the tools with other parameters, pages, or queries, and cross-check sources until you have covered the requested scope. + +Never present a partial result as complete. If, despite your efforts, you cannot guarantee completeness (tool limitation, inaccessible source), state precisely what is missing or could not be verified. If a tool fails or returns an unusable result, try another approach before concluding. + +## Tools and skills + +Use the available tools and skills whenever they can help you answer more accurately, verify a fact, or complete the task. Don't answer from memory when a tool can provide the answer. If several tools are relevant, combine them. When a task matches an available skill, consult it before starting. + +You may skip them for purely conversational exchanges or questions whose answer depends on no information that needs verifying. diff --git a/backend/lassistanoque.db-wal b/backend/lassistanoque.db-wal index eef948f67562602e2ec533bacd10447f2a46d3c5..b11e1790774c72fe708f639f2249f14fef78c603 100644 GIT binary patch delta 75015 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 ZD*^pdfL)^Gy%a9~|2WsE?1X{-{{y`~pLhTO delta 53 zcmaEGwdlZ+=!O=?7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#7J(MQ7NHj57LgXw IEn*Ij020U&E&u=k diff --git a/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte index b181b6c..a0c14ec 100644 --- a/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte +++ b/backend/web/src/routes/(authenticated)/[space]/(chat)/[conversation]/+page.svelte @@ -1,6 +1,6 @@ @@ -94,7 +105,7 @@ {/if} {#if message.toolcalls != null && message.toolcalls.length>0} -
⚒️ Appel de l'outil {message.toolcalls[0].Function.Name}
+
⚒️ Appel de l'outil {message.toolcalls[0].Function.Name}
{:else}
@@ -114,6 +125,7 @@ placeholder="..." bind:value={prompt} use:autofocus + bind:this={inputPrompt} /> diff --git a/backend/web/src/routes/layout.css b/backend/web/src/routes/layout.css index aee9c9f..7019523 100644 --- a/backend/web/src/routes/layout.css +++ b/backend/web/src/routes/layout.css @@ -275,10 +275,54 @@ h2 { /* chat */ .message { - @apply rounded p-2; + /*@apply rounded p-2;*/ &.user { - @apply bg-sky-700 dark:text-white; + @apply bg-sky-500/20 px-2 py-1 text-sky-700 dark:text-sky-300; + } + .tool { + @apply bg-green-500/20 px-2 py-1 text-green-700 dark:text-green-300; + } + + hr { + @apply my-4; + } + + ul, + ol { + @apply my-2; + } + + h1 { + @apply text-2xl font-bold; + } + + h2 { + @apply text-xl font-bold; + } + + h3 { + @apply text-lg font-bold; + } + + h4 { + @apply text-base; + } + + h5 { + @apply text-sm; + } + + li { + @apply ml-5 list-disc pl-4 marker:text-xl; + } + + pre { + @apply my-2 rounded p-1 whitespace-pre dark:bg-stone-700; + } + + p { + @apply my-2; } } @@ -289,11 +333,3 @@ h2 { @apply text-white/50; } } - -.message-content p { - @apply my-2; -} - -.message-content pre { - @apply my-2 whitespace-pre dark:bg-stone-700; -}