enzostvs HF Staff commited on
Commit
dc766b5
·
1 Parent(s): 83d96e0

ui for persona

Browse files
src/lib/components/chat/Assistant.svelte CHANGED
@@ -17,7 +17,7 @@
17
  import { Button } from '$lib/components/ui/button';
18
  import Message from './Message.svelte';
19
  import Spinner from '$lib/components/loading/Spinner.svelte';
20
- import { formatUsageCost, getProviderName } from '$lib';
21
  import { modelsState } from '$lib/state/models.svelte';
22
  import ListModels from '$lib/components/model/ListModels.svelte';
23
  import { DEFAULT_PERSONA, personasState } from '$lib/state/personas.svelte';
@@ -35,9 +35,9 @@
35
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
36
  let usage = $derived((nodeData.current?.data.usage as TokenUsage) ?? null);
37
  let persona = $derived(
38
- nodeData.current?.data.persone !== DEFAULT_PERSONA.id
39
- ? personasState.personas.find((p) => p.id === nodeData.current?.data.persona)
40
- : null
41
  );
42
 
43
  let message = $derived(
@@ -157,11 +157,11 @@
157
  </div>
158
  {#if persona}
159
  <div
160
- class="inline-flex max-w-max items-center gap-0.5 rounded-md bg-accent px-2 py-1 text-xs text-muted-foreground"
 
 
161
  >
162
- <span class="flex size-4 items-center justify-center rounded-full bg-muted">
163
- <Drama class="size-3" />
164
- </span>
165
  {persona.name}
166
  </div>
167
  {/if}
 
17
  import { Button } from '$lib/components/ui/button';
18
  import Message from './Message.svelte';
19
  import Spinner from '$lib/components/loading/Spinner.svelte';
20
+ import { formatUsageCost, getAvatarClass, getProviderName } from '$lib';
21
  import { modelsState } from '$lib/state/models.svelte';
22
  import ListModels from '$lib/components/model/ListModels.svelte';
23
  import { DEFAULT_PERSONA, personasState } from '$lib/state/personas.svelte';
 
35
  let loading = $derived((nodeData.current?.data.loading as boolean) ?? false);
36
  let usage = $derived((nodeData.current?.data.usage as TokenUsage) ?? null);
37
  let persona = $derived(
38
+ nodeData.current?.data.persona === DEFAULT_PERSONA.id
39
+ ? null
40
+ : personasState.personas.find((p) => p.id === nodeData.current?.data.persona)
41
  );
42
 
43
  let message = $derived(
 
157
  </div>
158
  {#if persona}
159
  <div
160
+ class="inline-flex max-w-max items-center gap-1 rounded-md px-2 py-1 text-xs {getAvatarClass(
161
+ persona.name
162
+ )}"
163
  >
164
+ <Drama class="size-3" />
 
 
165
  {persona.name}
166
  </div>
167
  {/if}
src/lib/components/chat/Welcome.svelte CHANGED
@@ -1,5 +1,4 @@
1
  <script lang="ts">
2
- import { useNodes, useNodesData, type NodeProps } from '@xyflow/svelte';
3
  import { fly } from 'svelte/transition';
4
 
5
  import HFLogo from '$lib/assets/hf-logo.svg';
 
1
  <script lang="ts">
 
2
  import { fly } from 'svelte/transition';
3
 
4
  import HFLogo from '$lib/assets/hf-logo.svg';
src/lib/components/flow/actions/PersonasModal.svelte CHANGED
@@ -14,6 +14,7 @@
14
  } from '$lib/state/personas.svelte';
15
  import { Input } from '$lib/components/ui/input';
16
  import type { Persona } from '$lib/state/personas.svelte';
 
17
 
18
  // bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300
19
  // bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300
@@ -21,14 +22,6 @@
21
  // bg-sky-100 text-sky-700 dark:bg-sky-900/30 dark:text-sky-300
22
  // bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300
23
  // bg-slate-100 text-slate-600 dark:bg-slate-700/50 dark:text-slate-300
24
- const AVATAR_CLASSES = [
25
- 'bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300',
26
- 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300',
27
- 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-300',
28
- 'bg-sky-100 text-sky-700 dark:bg-sky-900/30 dark:text-sky-300',
29
- 'bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300',
30
- 'bg-slate-100 text-slate-600 dark:bg-slate-700/50 dark:text-slate-300'
31
- ];
32
 
33
  let open = $state(false);
34
  let openFormPersona = $state.raw<string | null>(null);
@@ -70,22 +63,6 @@
70
  }
71
  openFormPersona = null;
72
  }
73
-
74
- function getInitials(name: string): string {
75
- return name
76
- .split(' ')
77
- .slice(0, 2)
78
- .map((w) => w[0]?.toUpperCase() ?? '')
79
- .join('');
80
- }
81
-
82
- function getAvatarClass(name: string): string {
83
- let hash = 0;
84
- for (let i = 0; i < name.length; i++) {
85
- hash = name.charCodeAt(i) + ((hash << 5) - hash);
86
- }
87
- return AVATAR_CLASSES[Math.abs(hash) % AVATAR_CLASSES.length];
88
- }
89
  </script>
90
 
91
  <Sheet.Root bind:open>
 
14
  } from '$lib/state/personas.svelte';
15
  import { Input } from '$lib/components/ui/input';
16
  import type { Persona } from '$lib/state/personas.svelte';
17
+ import { getAvatarClass, getInitials } from '$lib';
18
 
19
  // bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300
20
  // bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300
 
22
  // bg-sky-100 text-sky-700 dark:bg-sky-900/30 dark:text-sky-300
23
  // bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300
24
  // bg-slate-100 text-slate-600 dark:bg-slate-700/50 dark:text-slate-300
 
 
 
 
 
 
 
 
25
 
26
  let open = $state(false);
27
  let openFormPersona = $state.raw<string | null>(null);
 
63
  }
64
  openFormPersona = null;
65
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  </script>
67
 
68
  <Sheet.Root bind:open>
src/lib/index.ts CHANGED
@@ -33,3 +33,28 @@ export function getProviderName(provider: string) {
33
  };
34
  return providersMap[provider as keyof typeof providersMap] ?? provider;
35
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  };
34
  return providersMap[provider as keyof typeof providersMap] ?? provider;
35
  }
36
+
37
+ export function getInitials(name: string): string {
38
+ return name
39
+ .split(' ')
40
+ .slice(0, 2)
41
+ .map((w) => w[0]?.toUpperCase() ?? '')
42
+ .join('');
43
+ }
44
+
45
+ export function getAvatarClass(name: string): string {
46
+ let hash = 0;
47
+ for (let i = 0; i < name.length; i++) {
48
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
49
+ }
50
+ return AVATAR_CLASSES[Math.abs(hash) % AVATAR_CLASSES.length];
51
+ }
52
+
53
+ export const AVATAR_CLASSES = [
54
+ 'bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300',
55
+ 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300',
56
+ 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-300',
57
+ 'bg-sky-100 text-sky-700 dark:bg-sky-900/30 dark:text-sky-300',
58
+ 'bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300',
59
+ 'bg-slate-100 text-slate-600 dark:bg-slate-700/50 dark:text-slate-300'
60
+ ];