mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-17 12:16:21 +02:00
Theme neo-brutaliste + panneau raisonnement + repli sans outils
UI : reskin complet vers un theme neo-brutaliste clair (bordures noires 3px, ombres dures, accent orange, polices Press Start 2P + DM Mono). - tailwind.config / index.css / index.html : palette, polices, ombres, scrollbars - TopBar, ActivityBar, LeftPanel, ChatPanel, PreviewPanel, SettingsView, ToolCard, ModelSelector, Icon : restyle complet Chat : panneau « Raisonnement » repliable et redimensionnable affichant le thinking de l'agent en direct (diffuse depuis le backend, persiste dans meta). Robustesse Ollama : les echecs de generation de parseur d'outils (« Unable to generate parser for this template ») declenchent desormais le repli automatique en conversation simple sans outils, au lieu d'un 400. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
e8e6a1446c
commit
b4fc8cee3d
16 files changed
+488
-419
No files matched your search
@@ -2,7 +2,7 @@ import { useEffect, useRef, useState } from "react";
|
||||
import { useStore } from "../store/useStore";
|
||||
import { ChevronDown } from "./Icon";
|
||||
|
||||
/** Sélecteur de modèle Ollama (chip de la barre supérieure). */
|
||||
/** Sélecteur de modèle Ollama (chip orange de la barre supérieure). */
|
||||
export function ModelSelector() {
|
||||
const { models, selectedModel, setSelectedModel } = useStore();
|
||||
const [open, setOpen] = useState(false);
|
||||
@@ -20,19 +20,18 @@ export function ModelSelector() {
|
||||
<div className="relative" ref={ref}>
|
||||
<button
|
||||
onClick={() => setOpen((v) => !v)}
|
||||
className="flex h-7 items-center gap-2 rounded-lg border border-line-strong bg-[#2a251f] px-[11px]"
|
||||
className="flex h-[34px] items-center gap-2 border-[3px] border-white bg-accent px-3 text-white shadow-accent-soft"
|
||||
style={{ borderRadius: 7 }}
|
||||
>
|
||||
<span className="h-1.5 w-1.5 rounded-full bg-accent" />
|
||||
<span className="font-mono text-xs font-medium text-[#e7ddcd]">
|
||||
{selectedModel || "—"}
|
||||
</span>
|
||||
<ChevronDown size={12} className="text-muted-2" />
|
||||
<span className="h-2.5 w-2.5 border-2 border-line bg-white" />
|
||||
<span className="text-[14px] leading-none">{selectedModel || "—"}</span>
|
||||
<ChevronDown size={12} />
|
||||
</button>
|
||||
|
||||
{open && (
|
||||
<div className="absolute right-0 top-9 z-20 w-64 rounded-lg border border-line bg-card p-1 shadow-frame">
|
||||
<div className="absolute right-0 top-11 z-20 w-64 border-[3px] border-line bg-card p-1 shadow-hard">
|
||||
{models.length === 0 && (
|
||||
<div className="px-3 py-2 text-xs text-muted-3">
|
||||
<div className="px-3 py-2 text-xs text-muted-2">
|
||||
Aucun modèle installé
|
||||
</div>
|
||||
)}
|
||||
@@ -43,22 +42,18 @@ export function ModelSelector() {
|
||||
setSelectedModel(m.name);
|
||||
setOpen(false);
|
||||
}}
|
||||
className={`flex w-full items-center gap-2 rounded-md px-2 py-2 text-left hover:bg-[#252019] ${
|
||||
m.name === selectedModel ? "bg-[#252019]" : ""
|
||||
className={`flex w-full items-center gap-2 px-2 py-2 text-left hover:bg-base ${
|
||||
m.name === selectedModel ? "bg-base" : ""
|
||||
}`}
|
||||
>
|
||||
<span
|
||||
className={`h-1.5 w-1.5 rounded-full ${
|
||||
m.name === selectedModel ? "bg-accent" : "bg-muted-3"
|
||||
className={`h-2 w-2 border-2 border-line ${
|
||||
m.name === selectedModel ? "bg-accent" : "bg-card"
|
||||
}`}
|
||||
/>
|
||||
<span className="flex-1 font-mono text-xs text-ink-2">
|
||||
{m.name}
|
||||
</span>
|
||||
<span className="flex-1 text-xs text-ink-2">{m.name}</span>
|
||||
{m.size_go > 0 && (
|
||||
<span className="font-mono text-[10px] text-muted-3">
|
||||
{m.size_go} Go
|
||||
</span>
|
||||
<span className="text-[10px] text-muted-2">{m.size_go} Go</span>
|
||||
)}
|
||||
</button>
|
||||
))}
|
||||
|
||||
Reference in new issue
Block a user