File size: 4,485 Bytes
41a5ab2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
```mermaid

sequenceDiagram

    participant UI as 🧩 +layout.svelte

    participant serverStore as πŸ—„οΈ serverStore

    participant PropsSvc as βš™οΈ PropsService

    participant API as 🌐 llama-server



    Note over serverStore: State:<br/>props: ApiLlamaCppServerProps | null<br/>loading, error<br/>role: ServerRole | null (MODEL | ROUTER)<br/>fetchPromise (deduplication)



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,API: πŸš€ INITIALIZATION

    %% ═══════════════════════════════════════════════════════════════════════════



    UI->>serverStore: fetch()

    activate serverStore



    alt fetchPromise exists (already fetching)

        serverStore-->>UI: return fetchPromise

        Note right of serverStore: Deduplicate concurrent calls

    end



    serverStore->>serverStore: loading = true

    serverStore->>serverStore: fetchPromise = new Promise()



    serverStore->>PropsSvc: fetch()

    PropsSvc->>API: GET /props

    API-->>PropsSvc: ApiLlamaCppServerProps

    Note right of API: {role, model_path, model_alias,<br/>modalities, default_generation_settings, ...}



    PropsSvc-->>serverStore: props

    serverStore->>serverStore: props = $state(data)



    serverStore->>serverStore: detectRole(props)

    Note right of serverStore: role = props.role === "router"<br/>  ? ServerRole.ROUTER<br/>  : ServerRole.MODEL



    serverStore->>serverStore: loading = false

    serverStore->>serverStore: fetchPromise = null

    deactivate serverStore



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,API: πŸ“Š COMPUTED GETTERS

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over serverStore: Getters from props:



    rect rgb(240, 255, 240)

        Note over serverStore: defaultParams<br/>β†’ props.default_generation_settings.params<br/>(temperature, top_p, top_k, etc.)

    end



    rect rgb(240, 255, 240)

        Note over serverStore: contextSize<br/>β†’ props.default_generation_settings.n_ctx

    end



    rect rgb(255, 240, 240)

        Note over serverStore: isRouterMode<br/>β†’ role === ServerRole.ROUTER

    end



    rect rgb(255, 240, 240)

        Note over serverStore: isModelMode<br/>β†’ role === ServerRole.MODEL

    end



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,API: πŸ”— RELATIONSHIPS

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over serverStore: Used by:

    Note right of serverStore: - modelsStore: role detection, MODEL mode modalities<br/>- settingsStore: syncWithServerDefaults (defaultParams)<br/>- chatStore: contextSize for processing state<br/>- UI components: isRouterMode for conditional rendering



    %% ═══════════════════════════════════════════════════════════════════════════

    Note over UI,API: ❌ ERROR HANDLING

    %% ═══════════════════════════════════════════════════════════════════════════



    Note over serverStore: getErrorMessage(): string | null<br/>Returns formatted error for UI display



    Note over serverStore: clear(): void<br/>Resets all state (props, error, loading, role)

```