enzostvs HF Staff commited on
Commit
2afbe7d
·
1 Parent(s): 77895c9
src/lib/components/chat/Assistant.svelte CHANGED
@@ -17,6 +17,8 @@
17
  import Message from './Message.svelte';
18
  import Spinner from '$lib/components/loading/Spinner.svelte';
19
  import { formatUsageCost } from '$lib';
 
 
20
 
21
  let { id }: NodeProps = $props();
22
 
@@ -25,7 +27,9 @@
25
  const { update: updateNodes } = useNodes();
26
  const { update: updateEdges } = useEdges();
27
 
28
- let selectedModel = $derived((nodeData.current?.data.selectedModel as ChatModel) ?? null);
 
 
29
  let messages = $derived((nodeData.current?.data.messages as ChatMessage[]) ?? []);
30
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
31
  let usage = $derived((nodeData.current?.data.usage as TokenUsage) ?? null);
@@ -122,11 +126,11 @@
122
  class="group relative inline-flex h-8 shrink-0 items-center justify-center gap-1.5 rounded-md border bg-background px-3 text-sm font-normal! text-gray-600 has-[>svg]:px-2.5 dark:border-input dark:bg-input/30 dark:text-gray-400"
123
  >
124
  <img
125
- src={`https://huggingface.co/api/avatars/${selectedModel.owned_by}`}
126
- alt={selectedModel.id}
127
  class="size-3.5 rounded-full"
128
  />
129
- {selectedModel.id.split('/').pop() ?? selectedModel.id}
130
  </div>
131
  </div>
132
  </header>
@@ -141,14 +145,15 @@
141
  {/if}
142
  </div>
143
  {#if usage && !loading && message}
144
- {@const provider = selectedModel.provider ?? 'auto'}
 
145
  <div class="mt-3 flex items-center justify-between gap-2 border-t border-border pt-3">
146
  <p class="text-xs text-muted-foreground">
147
  {usage.total_tokens} tokens
148
- {#if formatUsageCost(selectedModel.providers.find((p) => p.provider === provider)?.pricing, usage)}
149
  <span class="mx-0.5">&middot;</span>
150
  {formatUsageCost(
151
- selectedModel.providers.find((p) => p.provider === provider)?.pricing,
152
  usage
153
  )}
154
  {/if}
@@ -160,8 +165,13 @@
160
  <span class="inline-flex items-center gap-0.5">
161
  Using
162
  <span class="inline-flex items-center gap-1 rounded-full bg-muted py-0.5 pr-2 pl-1">
163
- {#if provider === 'auto'}
164
- <Star class="size-3.5 fill-yellow-500 text-yellow-500" />
 
 
 
 
 
165
  {:else}
166
  <img
167
  src={`https://huggingface.co/api/avatars/${provider}`}
 
17
  import Message from './Message.svelte';
18
  import Spinner from '$lib/components/loading/Spinner.svelte';
19
  import { formatUsageCost } from '$lib';
20
+ import { modelsState } from '$lib/state/models.svelte';
21
+ import { PROVIDER_SELECTION_MODES } from '$lib/consts';
22
 
23
  let { id }: NodeProps = $props();
24
 
 
27
  const { update: updateNodes } = useNodes();
28
  const { update: updateEdges } = useEdges();
29
 
30
+ let selectedModel = $derived<string | null>(
31
+ (nodeData.current?.data.selectedModel as string) ?? null
32
+ );
33
  let messages = $derived((nodeData.current?.data.messages as ChatMessage[]) ?? []);
34
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
35
  let usage = $derived((nodeData.current?.data.usage as TokenUsage) ?? null);
 
126
  class="group relative inline-flex h-8 shrink-0 items-center justify-center gap-1.5 rounded-md border bg-background px-3 text-sm font-normal! text-gray-600 has-[>svg]:px-2.5 dark:border-input dark:bg-input/30 dark:text-gray-400"
127
  >
128
  <img
129
+ src={`https://huggingface.co/api/avatars/${selectedModel?.split('/')[0]}`}
130
+ alt={selectedModel?.split('/')[0]}
131
  class="size-3.5 rounded-full"
132
  />
133
+ {selectedModel?.split('/').pop() ?? selectedModel}
134
  </div>
135
  </div>
136
  </header>
 
145
  {/if}
146
  </div>
147
  {#if usage && !loading && message}
148
+ {@const modelSettings = modelsState.models.find((m) => m.id === selectedModel)}
149
+ {@const provider = modelSettings?.provider ?? 'auto'}
150
  <div class="mt-3 flex items-center justify-between gap-2 border-t border-border pt-3">
151
  <p class="text-xs text-muted-foreground">
152
  {usage.total_tokens} tokens
153
+ {#if formatUsageCost(modelSettings?.providers.find((p) => p.provider === provider)?.pricing, usage)}
154
  <span class="mx-0.5">&middot;</span>
155
  {formatUsageCost(
156
+ modelSettings?.providers.find((p) => p.provider === provider)?.pricing,
157
  usage
158
  )}
159
  {/if}
 
165
  <span class="inline-flex items-center gap-0.5">
166
  Using
167
  <span class="inline-flex items-center gap-1 rounded-full bg-muted py-0.5 pr-2 pl-1">
168
+ {#if PROVIDER_SELECTION_MODES.find((m) => m.value === provider)}
169
+ {@const mode = PROVIDER_SELECTION_MODES.find((m) => m.value === provider)!}
170
+ <span
171
+ class="inline-flex size-4 items-center justify-center rounded-full {mode.class}"
172
+ >
173
+ <mode.icon class="size-2.5 {mode.iconClass}" />
174
+ </span>
175
  {:else}
176
  <img
177
  src={`https://huggingface.co/api/avatars/${provider}`}