mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 14:08:11 +02:00
Fiabilise le préchargement et le benchmark
This commit is contained in:
1 parent
d9169a1d27
commit
0f6abf6dde
7 files changed
+154
-49
No files matched your search
@@ -23,6 +23,9 @@ export function SettingsView() {
|
||||
selectedModel,
|
||||
setSelectedModel,
|
||||
refreshModels,
|
||||
loadedModels,
|
||||
warmingModel,
|
||||
warmError,
|
||||
status,
|
||||
config,
|
||||
availableTools,
|
||||
@@ -153,6 +156,8 @@ export function SettingsView() {
|
||||
)}
|
||||
{models.map((m) => {
|
||||
const on = m.name === selectedModel;
|
||||
const loaded = loadedModels.find((item) => item.name === m.name);
|
||||
const warming = warmingModel === m.name;
|
||||
return (
|
||||
<div
|
||||
key={m.name}
|
||||
@@ -187,6 +192,28 @@ export function SettingsView() {
|
||||
.filter(Boolean)
|
||||
.join(" · ")}
|
||||
</div>
|
||||
<div className="mt-1.5 flex items-center gap-1.5 text-[11px]">
|
||||
<span
|
||||
className={`h-2 w-2 border border-line ${
|
||||
warming
|
||||
? "bg-accent animate-pulse"
|
||||
: loaded?.on_gpu
|
||||
? "bg-ok"
|
||||
: loaded
|
||||
? "bg-warn"
|
||||
: "bg-card"
|
||||
}`}
|
||||
/>
|
||||
<span className={on ? "text-on-dark-2" : "text-muted-2"}>
|
||||
{warming
|
||||
? "Préchargement en cours…"
|
||||
: loaded?.on_gpu
|
||||
? "Chargé sur GPU"
|
||||
: loaded
|
||||
? `Chargé · ${loaded.gpu_percent}% GPU`
|
||||
: "Non chargé"}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button
|
||||
@@ -205,6 +232,11 @@ export function SettingsView() {
|
||||
{deleteError}
|
||||
</div>
|
||||
)}
|
||||
{warmError && (
|
||||
<div className="border-2 border-warn bg-base px-3 py-2 text-[12px] text-warn">
|
||||
Préchargement : {warmError}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="my-4 h-[3px] bg-line" />
|
||||
@@ -461,6 +493,7 @@ function BenchCard() {
|
||||
const selectedModel = useStore((s) => s.selectedModel);
|
||||
const [scores, setScores] = useState<Record<string, BenchResult>>({});
|
||||
const [running, setRunning] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [progress, setProgress] = useState<
|
||||
{ task: string; score: number | null; detail?: string }[]
|
||||
>([]);
|
||||
@@ -472,6 +505,7 @@ function BenchCard() {
|
||||
const launch = async () => {
|
||||
if (!selectedModel || running) return;
|
||||
setRunning(true);
|
||||
setError(null);
|
||||
setProgress([]);
|
||||
try {
|
||||
const result = await runBench(selectedModel, (task, score, detail) => {
|
||||
@@ -481,6 +515,8 @@ function BenchCard() {
|
||||
});
|
||||
});
|
||||
if (result) setScores((s) => ({ ...s, [selectedModel]: result }));
|
||||
} catch (err) {
|
||||
setError(err instanceof Error ? err.message : "benchmark impossible");
|
||||
} finally {
|
||||
setRunning(false);
|
||||
}
|
||||
@@ -524,6 +560,12 @@ function BenchCard() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{error && (
|
||||
<div className="border-2 border-warn bg-base px-3 py-2 text-[12px] text-warn">
|
||||
Échec du test : {error}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{!running && current && (
|
||||
<div className="border-2 border-line bg-base px-3 py-2">
|
||||
<div className="mb-1 flex items-center justify-between">
|
||||
|
||||
Reference in new issue
Block a user