enzostvs HF Staff commited on
Commit
6af683b
·
1 Parent(s): 12a05ec

set provider in response

Browse files
src/lib/components/chat/Assistant.svelte CHANGED
@@ -1,20 +1,9 @@
1
  <script lang="ts">
2
- import {
3
- Handle,
4
- useEdges,
5
- useNodes,
6
- useNodesData,
7
- Position,
8
- type NodeProps,
9
- type Edge,
10
- type Node,
11
- useSvelteFlow
12
- } from '@xyflow/svelte';
13
 
14
  import type { ChatModel, ChatMessage } from '$lib/helpers/types';
15
  import { Button } from '$lib/components/ui/button';
16
- import ComboBoxModels from '$lib/components/model/ComboBoxModels.svelte';
17
- import { onMount } from 'svelte';
18
  import Message from './Message.svelte';
19
  import Spinner from '$lib/components/loading/Spinner.svelte';
20
 
@@ -23,7 +12,7 @@
23
  // svelte-ignore state_referenced_locally
24
  const nodeData = useNodesData(id);
25
 
26
- let selectedModels = $derived((nodeData.current?.data.selectedModels as ChatModel[]) ?? []);
27
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
28
  let message = $derived(
29
  nodeData.current?.data.content
@@ -40,12 +29,14 @@
40
  <div class="nodrag">
41
  <header class="mb-3 flex items-center justify-between">
42
  <div class="flex flex-wrap items-center gap-1">
43
- {#each selectedModels as model}
44
- <Button variant="outline" size="sm" class="group relative font-normal! shadow-none!">
45
- <img src={model.avatarUrl} alt={model.modelName} class="size-3.5 rounded-full" />
46
- {model.modelName}
47
- </Button>
48
- {/each}
 
 
49
  </div>
50
  </header>
51
 
@@ -56,7 +47,7 @@
56
  </div>
57
  {/if}
58
  {#if message}
59
- <Message {message} />
60
  {/if}
61
  </div>
62
  </article>
 
1
  <script lang="ts">
2
+ import { Handle, useNodesData, Position, type NodeProps } from '@xyflow/svelte';
3
+ import { Star } from '@lucide/svelte';
 
 
 
 
 
 
 
 
 
4
 
5
  import type { ChatModel, ChatMessage } from '$lib/helpers/types';
6
  import { Button } from '$lib/components/ui/button';
 
 
7
  import Message from './Message.svelte';
8
  import Spinner from '$lib/components/loading/Spinner.svelte';
9
 
 
12
  // svelte-ignore state_referenced_locally
13
  const nodeData = useNodesData(id);
14
 
15
+ let selectedModel = $derived((nodeData.current?.data.selectedModel as ChatModel) ?? null);
16
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
17
  let message = $derived(
18
  nodeData.current?.data.content
 
29
  <div class="nodrag">
30
  <header class="mb-3 flex items-center justify-between">
31
  <div class="flex flex-wrap items-center gap-1">
32
+ <Button variant="outline" size="sm" class="group relative font-normal! shadow-none!">
33
+ <img
34
+ src={selectedModel.avatarUrl}
35
+ alt={selectedModel.modelName}
36
+ class="size-3.5 rounded-full"
37
+ />
38
+ {selectedModel.modelName}
39
+ </Button>
40
  </div>
41
  </header>
42
 
 
47
  </div>
48
  {/if}
49
  {#if message}
50
+ <Message {message} provider={selectedModel.provider} />
51
  {/if}
52
  </div>
53
  </article>
src/lib/components/chat/Message.svelte CHANGED
@@ -11,8 +11,9 @@
11
  import ListItem from './markdown/ListItem.svelte';
12
  import Link from './markdown/Link.svelte';
13
  import Hr from './markdown/Hr.svelte';
 
14
 
15
- let { message }: { message: ChatMessage } = $props();
16
 
17
  const renderers = {
18
  paragraph: Paragraph,
@@ -35,9 +36,22 @@
35
  {:else}
36
  <SvelteMarkdown source={message.content} renderers={renderers as any} />
37
  {#if message.timestamp}
38
- <p class="text-xs text-muted-foreground/70">
39
- - Generated in
40
- {message.timestamp / 1000}s
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  </p>
42
  {/if}
43
  {/if}
 
11
  import ListItem from './markdown/ListItem.svelte';
12
  import Link from './markdown/Link.svelte';
13
  import Hr from './markdown/Hr.svelte';
14
+ import { Star } from '@lucide/svelte';
15
 
16
+ let { message, provider }: { message: ChatMessage; provider?: string } = $props();
17
 
18
  const renderers = {
19
  paragraph: Paragraph,
 
36
  {:else}
37
  <SvelteMarkdown source={message.content} renderers={renderers as any} />
38
  {#if message.timestamp}
39
+ <p class="flex items-center gap-1 text-xs text-muted-foreground/70">
40
+ Generated in
41
+ {message.timestamp / 1000}s using
42
+ <span class="flex items-center gap-1 rounded bg-muted py-0.5 pr-1 pl-0.5">
43
+ {#if provider === 'auto'}
44
+ <Star class="size-4 fill-yellow-500 text-yellow-500" />
45
+ {:else}
46
+ <img
47
+ src={`https://huggingface.co/api/avatars/${provider}`}
48
+ alt={provider}
49
+ class="size-4"
50
+ />
51
+ {/if}
52
+ {provider}
53
+ </span>
54
+ provider
55
  </p>
56
  {/if}
57
  {/if}
src/lib/components/chat/User.svelte CHANGED
@@ -80,7 +80,7 @@
80
  },
81
  data: {
82
  role: 'assistant',
83
- selectedModels: [m],
84
  content: '',
85
  loading: true
86
  }
@@ -106,10 +106,7 @@
106
 
107
  async function handleTriggerAiCall(newNodes: Node[]) {
108
  newNodes.forEach(async (node) => {
109
- const model =
110
- (node?.data?.selectedModels as ChatModel[])?.length > 0
111
- ? (node?.data?.selectedModels as ChatModel[])[0]
112
- : null;
113
  if (!model) return;
114
  try {
115
  const start = Date.now();
@@ -148,7 +145,7 @@
148
  data: {
149
  role: 'user',
150
  messages: [...messages, { role: 'assistant', content }],
151
- selectedModels: [model]
152
  }
153
  };
154
  const newEdge: Edge = {
 
80
  },
81
  data: {
82
  role: 'assistant',
83
+ selectedModel: m,
84
  content: '',
85
  loading: true
86
  }
 
106
 
107
  async function handleTriggerAiCall(newNodes: Node[]) {
108
  newNodes.forEach(async (node) => {
109
+ const model = node?.data?.selectedModel as ChatModel;
 
 
 
110
  if (!model) return;
111
  try {
112
  const start = Date.now();
 
145
  data: {
146
  role: 'user',
147
  messages: [...messages, { role: 'assistant', content }],
148
+ selectedModel: model
149
  }
150
  };
151
  const newEdge: Edge = {
src/lib/components/model/SettingsModel.svelte CHANGED
@@ -45,7 +45,10 @@
45
  });
46
  </script>
47
 
48
- <Popover.Root bind:open>
 
 
 
49
  <Popover.Trigger>{@render children?.()}</Popover.Trigger>
50
  <Popover.Content class="w-80 rounded-2xl p-0">
51
  <div class="grid gap-4">
@@ -149,7 +152,7 @@
149
  <header class="border-t border-border px-5 pt-4">
150
  <h4 class="text-sm leading-none font-medium text-muted-foreground">Provider</h4>
151
  </header>
152
- <main class="w-full px-5">
153
  <Select.Root type="single" bind:value={provider}>
154
  <Select.Trigger class="flex w-full items-center justify-between gap-2 capitalize">
155
  <div class="flex items-center gap-2">
@@ -184,16 +187,6 @@
184
  </Select.Content>
185
  </Select.Root>
186
  </main>
187
- <footer class="flex justify-end border-t border-border px-5 pt-3 pb-3">
188
- <Button
189
- variant="default"
190
- size="xs"
191
- onclick={() => {
192
- onSave({ ...model, temperature, max_tokens, top_p, provider });
193
- open = false;
194
- }}>Save Settings</Button
195
- >
196
- </footer>
197
  </div>
198
  </Popover.Content>
199
  </Popover.Root>
 
45
  });
46
  </script>
47
 
48
+ <Popover.Root
49
+ bind:open
50
+ onOpenChange={(value) => !value && onSave({ ...model, temperature, max_tokens, top_p, provider })}
51
+ >
52
  <Popover.Trigger>{@render children?.()}</Popover.Trigger>
53
  <Popover.Content class="w-80 rounded-2xl p-0">
54
  <div class="grid gap-4">
 
152
  <header class="border-t border-border px-5 pt-4">
153
  <h4 class="text-sm leading-none font-medium text-muted-foreground">Provider</h4>
154
  </header>
155
+ <main class="w-full px-5 pb-5">
156
  <Select.Root type="single" bind:value={provider}>
157
  <Select.Trigger class="flex w-full items-center justify-between gap-2 capitalize">
158
  <div class="flex items-center gap-2">
 
187
  </Select.Content>
188
  </Select.Root>
189
  </main>
 
 
 
 
 
 
 
 
 
 
190
  </div>
191
  </Popover.Content>
192
  </Popover.Root>