blob: ff31f0bc50b098fe43871eb2bd77f22c99e8af00 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<script lang="ts">
/**
* The `compaction` view — message compaction with the store adapters.
* Per-conversation (keyed so the percent + feedback can't bleed across tabs;
* the {#key} moved inside the wrapper).
*/
import {
CompactionView,
type CompactNowResult,
type SaveCompactPercentResult,
} from "../../features/chat";
import type { AppViewPorts } from "../view-ports";
let { ports }: { ports: AppViewPorts } = $props();
const store = $derived(ports.store);
// Adapt the store's compact result to the compaction view's port.
async function compactNow(): Promise<CompactNowResult | null> {
const result = await store.compactNow();
if (result === null) return null;
return result.ok
? {
ok: true,
messagesSummarized: result.response.messagesSummarized,
messagesKept: result.response.messagesKept,
}
: { ok: false, error: result.error };
}
async function saveCompactPercent(
percent: number,
): Promise<SaveCompactPercentResult | null> {
const result = await store.setCompactPercent(percent);
if (result === null) return null;
return result.ok
? { ok: true, percent: result.percent }
: { ok: false, error: result.error };
}
</script>
{#key store.currentConversationId}
<CompactionView
percent={store.compactPercent}
canCompact={store.activeConversationId !== null}
{compactNow}
savePercent={saveCompactPercent}
/>
{/key}
|