@blank-utils/llm 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -910,7 +910,8 @@ function ChatInput({
910
910
  images = [],
911
911
  onImageAdd,
912
912
  onImageRemove,
913
- modelSelector
913
+ modelSelector,
914
+ theme = "dark"
914
915
  }) {
915
916
  const textareaRef = useRef2(null);
916
917
  const fileInputRef = useRef2(null);
@@ -1014,7 +1015,7 @@ ${newText}` : newText);
1014
1015
  onDragLeave: () => setIsDragging(false),
1015
1016
  onDrop: handleDrop,
1016
1017
  children: [
1017
- isDragging && /* @__PURE__ */ jsx2("div", { className: "absolute inset-x-0 inset-y-0 bg-current/90 flex flex-col items-center justify-center z-20 backdrop-blur-sm", children: /* @__PURE__ */ jsx2("span", { className: "text-black dark:text-white font-light tracking-[0.2em] uppercase text-xs", children: "DROP FILE TO ATTACH" }) }),
1018
+ isDragging && /* @__PURE__ */ jsx2("div", { className: `absolute inset-x-0 inset-y-0 flex flex-col items-center justify-center z-20 backdrop-blur-sm transition-colors ${theme === "dark" ? "bg-white/10 text-white" : "bg-black/10 text-black"}`, children: /* @__PURE__ */ jsx2("span", { className: "font-light tracking-[0.2em] uppercase text-xs", children: "DROP FILE TO ATTACH" }) }),
1018
1019
  /* @__PURE__ */ jsx2(
1019
1020
  "input",
1020
1021
  {
@@ -1032,7 +1033,7 @@ ${newText}` : newText);
1032
1033
  "button",
1033
1034
  {
1034
1035
  type: "button",
1035
- className: "absolute top-0 right-0 w-5 h-5 bg-black/80 text-white flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity text-[8px]",
1036
+ className: `absolute top-0 right-0 w-5 h-5 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity text-[8px] ${theme === "dark" ? "bg-black/80 text-white" : "bg-white/80 text-black"}`,
1036
1037
  onClick: () => onImageRemove?.(img.id),
1037
1038
  children: "[X]"
1038
1039
  }
@@ -1157,24 +1158,25 @@ function isVisionModel2(modelId) {
1157
1158
  return lower.includes("vl") || lower.includes("vision") || lower.includes("moondream");
1158
1159
  }
1159
1160
  var markdownComponents = {
1160
- h1: ({ children }) => /* @__PURE__ */ jsx3("h1", { className: "text-2xl font-light uppercase tracking-tight mt-6 mb-4 text-white border-b border-white/30 pb-2", children }),
1161
- h2: ({ children }) => /* @__PURE__ */ jsx3("h2", { className: "text-xl font-light uppercase tracking-tight mt-6 mb-4 text-white border-b border-white/30 pb-2", children }),
1162
- h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-lg font-light uppercase tracking-tight mt-4 mb-3 text-white", children }),
1163
- h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-base font-light uppercase tracking-tight mt-4 mb-2 text-white", children }),
1164
- p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-4 text-white/80 text-sm font-light font-mono", children }),
1165
- ul: ({ children }) => /* @__PURE__ */ jsx3("ul", { className: "my-4 ml-6 list-square [&>li]:mt-2 text-white/80 font-mono text-sm font-light", children }),
1166
- ol: ({ children }) => /* @__PURE__ */ jsx3("ol", { className: "my-4 ml-6 list-decimal [&>li]:mt-2 text-white/80 font-mono text-sm font-light", children }),
1161
+ h1: ({ children }) => /* @__PURE__ */ jsx3("h1", { className: "text-2xl font-light uppercase tracking-tight mt-6 mb-4 text-current border-b border-current/30 pb-2", children }),
1162
+ h2: ({ children }) => /* @__PURE__ */ jsx3("h2", { className: "text-xl font-light uppercase tracking-tight mt-6 mb-4 text-current border-b border-current/30 pb-2", children }),
1163
+ h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-lg font-light uppercase tracking-tight mt-4 mb-3 text-current", children }),
1164
+ h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-base font-light uppercase tracking-tight mt-4 mb-2 text-current", children }),
1165
+ p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-4 text-current/80 text-sm font-light font-mono", children }),
1166
+ ul: ({ children }) => /* @__PURE__ */ jsx3("ul", { className: "my-4 ml-6 list-square [&>li]:mt-2 text-current/80 font-mono text-sm font-light", children }),
1167
+ ol: ({ children }) => /* @__PURE__ */ jsx3("ol", { className: "my-4 ml-6 list-decimal [&>li]:mt-2 text-current/80 font-mono text-sm font-light", children }),
1167
1168
  li: ({ children }) => /* @__PURE__ */ jsx3("li", { children }),
1168
- blockquote: ({ children }) => /* @__PURE__ */ jsx3("blockquote", { className: "mt-4 border border-white/30 p-4 italic text-white/60 font-mono text-sm font-light bg-transparent", children }),
1169
- a: ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, className: "underline text-white hover:bg-white hover:text-black transition-colors", target: "_blank", rel: "noopener noreferrer", children }),
1170
- table: ({ children }) => /* @__PURE__ */ jsx3("div", { className: "my-4 w-full overflow-y-auto border border-white/30", children: /* @__PURE__ */ jsx3("table", { className: "w-full text-sm font-mono font-light text-white", children }) }),
1171
- tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b border-white/30 p-0 hover:bg-white/5", children }),
1172
- th: ({ children }) => /* @__PURE__ */ jsx3("th", { className: "border-r border-white/30 last:border-r-0 text-white/50 px-4 py-2 font-light uppercase text-left", children }),
1173
- td: ({ children }) => /* @__PURE__ */ jsx3("td", { className: "border-r border-white/30 last:border-r-0 px-4 py-2 text-left text-white/80", children })
1169
+ blockquote: ({ children }) => /* @__PURE__ */ jsx3("blockquote", { className: "mt-4 border border-current/30 p-4 italic text-current/60 font-mono text-sm font-light bg-transparent", children }),
1170
+ a: ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, className: "underline text-current hover:opacity-70 transition-opacity", target: "_blank", rel: "noopener noreferrer", children }),
1171
+ table: ({ children }) => /* @__PURE__ */ jsx3("div", { className: "my-4 w-full overflow-y-auto border border-current/30", children: /* @__PURE__ */ jsx3("table", { className: "w-full text-sm font-mono font-light text-current", children }) }),
1172
+ tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b border-current/30 p-0 hover:bg-current/5", children }),
1173
+ th: ({ children }) => /* @__PURE__ */ jsx3("th", { className: "border-r border-current/30 last:border-r-0 text-current/50 px-4 py-2 font-light uppercase text-left", children }),
1174
+ td: ({ children }) => /* @__PURE__ */ jsx3("td", { className: "border-r border-current/30 last:border-r-0 px-4 py-2 text-left text-current/80", children })
1174
1175
  };
1175
1176
  function ModelSelector({
1176
1177
  currentModel,
1177
- onSelect
1178
+ onSelect,
1179
+ theme
1178
1180
  }) {
1179
1181
  const [isOpen, setIsOpen] = useState3(false);
1180
1182
  const ref = useRef3(null);
@@ -1210,14 +1212,17 @@ function ModelSelector({
1210
1212
  ] })
1211
1213
  }
1212
1214
  ),
1213
- isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-black dark:bg-white border border-white/20 dark:border-black/20 z-50 p-2 scrollbar-none", children: [
1214
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-current opacity-50 uppercase tracking-widest border-b border-white/10 dark:border-black/10 mb-1", children: "WebLLM" }),
1215
+ isOpen && /* @__PURE__ */ jsxs3("div", { className: cn(
1216
+ "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto border z-50 p-2 scrollbar-none",
1217
+ theme === "dark" ? "bg-black border-white/20" : "bg-[#fafafa] border-black/20"
1218
+ ), children: [
1219
+ /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-current opacity-50 uppercase tracking-widest border-b border-current/10 mb-1", children: "WebLLM" }),
1215
1220
  Object.entries(WEBLLM_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1216
1221
  "button",
1217
1222
  {
1218
1223
  className: cn(
1219
1224
  "block w-full text-left px-3 py-2.5 text-[11px] font-light uppercase tracking-widest truncate transition-colors text-current",
1220
- currentModel === value ? "bg-white text-black dark:bg-black dark:text-white" : "hover:bg-white/10 dark:hover:bg-black/10"
1225
+ currentModel === value ? theme === "dark" ? "bg-white text-black" : "bg-black text-white" : "hover:opacity-60"
1221
1226
  ),
1222
1227
  onClick: () => {
1223
1228
  onSelect(value);
@@ -1231,13 +1236,13 @@ function ModelSelector({
1231
1236
  },
1232
1237
  key
1233
1238
  )),
1234
- /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light opacity-50 uppercase tracking-widest mt-4 border-b border-white/10 dark:border-black/10 mb-1", children: "Transformers.js" }),
1239
+ /* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-current opacity-50 uppercase tracking-widest mt-4 border-b border-current/10 mb-1", children: "Transformers.js" }),
1235
1240
  Object.entries(TRANSFORMERS_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
1236
1241
  "button",
1237
1242
  {
1238
1243
  className: cn(
1239
1244
  "block w-full text-left px-3 py-2.5 text-[11px] font-light uppercase tracking-widest truncate transition-colors text-current",
1240
- currentModel === value ? "bg-white text-black dark:bg-black dark:text-white" : "hover:bg-white/10 dark:hover:bg-black/10"
1245
+ currentModel === value ? theme === "dark" ? "bg-white text-black" : "bg-black text-white" : "hover:opacity-60"
1241
1246
  ),
1242
1247
  onClick: () => {
1243
1248
  onSelect(value);
@@ -1408,7 +1413,8 @@ ${systemPrompt}` : systemPrompt;
1408
1413
  ModelSelector,
1409
1414
  {
1410
1415
  currentModel: modelId,
1411
- onSelect: onModelChange
1416
+ onSelect: onModelChange,
1417
+ theme: localTheme
1412
1418
  }
1413
1419
  ) : /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxs3("span", { className: "text-[11px] font-light uppercase tracking-[0.2em]", children: [
1414
1420
  "[ ",
@@ -1518,7 +1524,8 @@ ${systemPrompt}` : systemPrompt;
1518
1524
  actions: inputActions,
1519
1525
  images,
1520
1526
  onImageAdd: (img) => setImages((prev) => [...prev, img]),
1521
- onImageRemove: (id) => setImages((prev) => prev.filter((img) => img.id !== id))
1527
+ onImageRemove: (id) => setImages((prev) => prev.filter((img) => img.id !== id)),
1528
+ theme: localTheme
1522
1529
  }
1523
1530
  ) })
1524
1531
  ] });
@@ -635,7 +635,8 @@ interface ChatInputProps {
635
635
  onImageAdd?: (image: ImageAttachment) => void;
636
636
  onImageRemove?: (id: string) => void;
637
637
  modelSelector?: React.ReactNode;
638
+ theme?: 'dark' | 'light';
638
639
  }
639
- declare function ChatInput({ value, onChange, onSend, onStop, disabled, isGenerating, placeholder, maxRows, actions, className, images, onImageAdd, onImageRemove, modelSelector, }: ChatInputProps): react_jsx_runtime.JSX.Element;
640
+ declare function ChatInput({ value, onChange, onSend, onStop, disabled, isGenerating, placeholder, maxRows, actions, className, images, onImageAdd, onImageRemove, modelSelector, theme, }: ChatInputProps): react_jsx_runtime.JSX.Element;
640
641
 
641
642
  export { type AttachOptions as A, type BrowserCapabilities as B, type ChatMessage as C, type Device as D, useCompletion as E, useLLM as F, type GenerateOptions as G, useStream as H, ChatApp as I, type ChatAppProps as J, type ImageAttachment as K, type LLMProvider$1 as L, type MessageRole as M, type Quantization as Q, type StreamCallback as S, TRANSFORMERS_MODELS as T, type UseChatOptions as U, WEBLLM_MODELS as W, type Backend as a, type LoadProgressCallback as b, Chat as c, ChatInput as d, type ChatInputProps as e, type ChatProps as f, DEFAULT_TRANSFORMERS_MODEL as g, DEFAULT_WEBLLM_MODEL as h, type LLMConfig as i, type LLMContextValue as j, LLMLoading as k, type LLMLoadingProps as l, LLMProvider as m, type LLMProviderProps as n, LLMReady as o, type LLMReadyProps as p, type LoadProgress as q, type LocalLLM as r, type UseChatReturn as s, type UseCompletionOptions as t, type UseCompletionReturn as u, type UseStreamOptions as v, type UseStreamReturn as w, createLLM as x, isWebGPUSupported as y, useChat as z };
package/dist/index.css CHANGED
@@ -2563,6 +2563,9 @@ video {
2563
2563
  .border-none {
2564
2564
  border-style: none;
2565
2565
  }
2566
+ .border-black\/20 {
2567
+ border-color: rgb(0 0 0 / 0.2);
2568
+ }
2566
2569
  .border-current {
2567
2570
  border-color: currentColor;
2568
2571
  }
@@ -2572,15 +2575,9 @@ video {
2572
2575
  .border-red-500\/30 {
2573
2576
  border-color: rgb(239 68 68 / 0.3);
2574
2577
  }
2575
- .border-white\/10 {
2576
- border-color: rgb(255 255 255 / 0.1);
2577
- }
2578
2578
  .border-white\/20 {
2579
2579
  border-color: rgb(255 255 255 / 0.2);
2580
2580
  }
2581
- .border-white\/30 {
2582
- border-color: rgb(255 255 255 / 0.3);
2583
- }
2584
2581
  .bg-\[\#fafafa\] {
2585
2582
  --tw-bg-opacity: 1;
2586
2583
  background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));
@@ -2622,6 +2619,12 @@ video {
2622
2619
  --tw-bg-opacity: 1;
2623
2620
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2624
2621
  }
2622
+ .bg-white\/10 {
2623
+ background-color: rgb(255 255 255 / 0.1);
2624
+ }
2625
+ .bg-white\/80 {
2626
+ background-color: rgb(255 255 255 / 0.8);
2627
+ }
2625
2628
  .object-cover {
2626
2629
  -o-object-fit: cover;
2627
2630
  object-fit: cover;
@@ -2850,15 +2853,6 @@ video {
2850
2853
  --tw-text-opacity: 1;
2851
2854
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
2852
2855
  }
2853
- .text-white\/50 {
2854
- color: rgb(255 255 255 / 0.5);
2855
- }
2856
- .text-white\/60 {
2857
- color: rgb(255 255 255 / 0.6);
2858
- }
2859
- .text-white\/80 {
2860
- color: rgb(255 255 255 / 0.8);
2861
- }
2862
2856
  .underline {
2863
2857
  text-decoration-line: underline;
2864
2858
  }
@@ -3094,23 +3088,12 @@ video {
3094
3088
  .hover\:bg-red-500\/30:hover {
3095
3089
  background-color: rgb(239 68 68 / 0.3);
3096
3090
  }
3097
- .hover\:bg-white:hover {
3098
- --tw-bg-opacity: 1;
3099
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3100
- }
3101
- .hover\:bg-white\/10:hover {
3102
- background-color: rgb(255 255 255 / 0.1);
3103
- }
3104
- .hover\:bg-white\/5:hover {
3105
- background-color: rgb(255 255 255 / 0.05);
3106
- }
3107
- .hover\:text-black:hover {
3108
- --tw-text-opacity: 1;
3109
- color: rgb(0 0 0 / var(--tw-text-opacity, 1));
3110
- }
3111
3091
  .hover\:opacity-100:hover {
3112
3092
  opacity: 1;
3113
3093
  }
3094
+ .hover\:opacity-60:hover {
3095
+ opacity: 0.6;
3096
+ }
3114
3097
  .hover\:opacity-70:hover {
3115
3098
  opacity: 0.7;
3116
3099
  }
@@ -3141,33 +3124,12 @@ video {
3141
3124
  }
3142
3125
  }
3143
3126
  @media (prefers-color-scheme: dark) {
3144
- .dark\:border-black\/10 {
3145
- border-color: rgb(0 0 0 / 0.1);
3146
- }
3147
- .dark\:border-black\/20 {
3148
- border-color: rgb(0 0 0 / 0.2);
3149
- }
3150
3127
  .dark\:bg-\[var\(--shiki-dark-bg\,var\(--sdm-tbg\)\)\] {
3151
3128
  background-color: var(--shiki-dark-bg,var(--sdm-tbg));
3152
3129
  }
3153
- .dark\:bg-black {
3154
- --tw-bg-opacity: 1;
3155
- background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
3156
- }
3157
- .dark\:bg-white {
3158
- --tw-bg-opacity: 1;
3159
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3160
- }
3161
3130
  .dark\:text-\[var\(--shiki-dark\,var\(--sdm-c\,inherit\)\)\] {
3162
3131
  color: var(--shiki-dark,var(--sdm-c,inherit));
3163
3132
  }
3164
- .dark\:text-white {
3165
- --tw-text-opacity: 1;
3166
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3167
- }
3168
- .dark\:hover\:bg-black\/10:hover {
3169
- background-color: rgb(0 0 0 / 0.1);
3170
- }
3171
3133
  }
3172
3134
  .\[\&\:not\(\:first-child\)\]\:mt-4:not(:first-child) {
3173
3135
  margin-top: 1rem;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BrowserCapabilities, L as LLMProvider, a as Backend, b as LoadProgressCallback, C as ChatMessage, G as GenerateOptions, S as StreamCallback, D as Device, Q as Quantization, A as AttachOptions } from './index-fIqGfqTG.js';
2
- export { c as Chat, d as ChatInput, e as ChatInputProps, f as ChatProps, g as DEFAULT_TRANSFORMERS_MODEL, h as DEFAULT_WEBLLM_MODEL, i as LLMConfig, j as LLMContextValue, k as LLMLoading, l as LLMLoadingProps, m as LLMProvider, n as LLMProviderProps, o as LLMReady, p as LLMReadyProps, q as LoadProgress, r as LocalLLM, M as MessageRole, T as TRANSFORMERS_MODELS, U as UseChatOptions, s as UseChatReturn, t as UseCompletionOptions, u as UseCompletionReturn, v as UseStreamOptions, w as UseStreamReturn, W as WEBLLM_MODELS, x as createLLM, x as default, y as isWebGPUSupported, z as useChat, E as useCompletion, F as useLLM, H as useStream } from './index-fIqGfqTG.js';
1
+ import { B as BrowserCapabilities, L as LLMProvider, a as Backend, b as LoadProgressCallback, C as ChatMessage, G as GenerateOptions, S as StreamCallback, D as Device, Q as Quantization, A as AttachOptions } from './index-C3lo7t8l.js';
2
+ export { c as Chat, d as ChatInput, e as ChatInputProps, f as ChatProps, g as DEFAULT_TRANSFORMERS_MODEL, h as DEFAULT_WEBLLM_MODEL, i as LLMConfig, j as LLMContextValue, k as LLMLoading, l as LLMLoadingProps, m as LLMProvider, n as LLMProviderProps, o as LLMReady, p as LLMReadyProps, q as LoadProgress, r as LocalLLM, M as MessageRole, T as TRANSFORMERS_MODELS, U as UseChatOptions, s as UseChatReturn, t as UseCompletionOptions, u as UseCompletionReturn, v as UseStreamOptions, w as UseStreamReturn, W as WEBLLM_MODELS, x as createLLM, x as default, y as isWebGPUSupported, z as useChat, E as useCompletion, F as useLLM, H as useStream } from './index-C3lo7t8l.js';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
5
5
 
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ import {
26
26
  useCompletion,
27
27
  useLLM,
28
28
  useStream
29
- } from "./chunk-PTPT4EPO.js";
29
+ } from "./chunk-MDEYMUE4.js";
30
30
  export {
31
31
  Chat,
32
32
  ChatInput,
@@ -2563,6 +2563,9 @@ video {
2563
2563
  .border-none {
2564
2564
  border-style: none;
2565
2565
  }
2566
+ .border-black\/20 {
2567
+ border-color: rgb(0 0 0 / 0.2);
2568
+ }
2566
2569
  .border-current {
2567
2570
  border-color: currentColor;
2568
2571
  }
@@ -2572,15 +2575,9 @@ video {
2572
2575
  .border-red-500\/30 {
2573
2576
  border-color: rgb(239 68 68 / 0.3);
2574
2577
  }
2575
- .border-white\/10 {
2576
- border-color: rgb(255 255 255 / 0.1);
2577
- }
2578
2578
  .border-white\/20 {
2579
2579
  border-color: rgb(255 255 255 / 0.2);
2580
2580
  }
2581
- .border-white\/30 {
2582
- border-color: rgb(255 255 255 / 0.3);
2583
- }
2584
2581
  .bg-\[\#fafafa\] {
2585
2582
  --tw-bg-opacity: 1;
2586
2583
  background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));
@@ -2622,6 +2619,12 @@ video {
2622
2619
  --tw-bg-opacity: 1;
2623
2620
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
2624
2621
  }
2622
+ .bg-white\/10 {
2623
+ background-color: rgb(255 255 255 / 0.1);
2624
+ }
2625
+ .bg-white\/80 {
2626
+ background-color: rgb(255 255 255 / 0.8);
2627
+ }
2625
2628
  .object-cover {
2626
2629
  -o-object-fit: cover;
2627
2630
  object-fit: cover;
@@ -2850,15 +2853,6 @@ video {
2850
2853
  --tw-text-opacity: 1;
2851
2854
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
2852
2855
  }
2853
- .text-white\/50 {
2854
- color: rgb(255 255 255 / 0.5);
2855
- }
2856
- .text-white\/60 {
2857
- color: rgb(255 255 255 / 0.6);
2858
- }
2859
- .text-white\/80 {
2860
- color: rgb(255 255 255 / 0.8);
2861
- }
2862
2856
  .underline {
2863
2857
  text-decoration-line: underline;
2864
2858
  }
@@ -3094,23 +3088,12 @@ video {
3094
3088
  .hover\:bg-red-500\/30:hover {
3095
3089
  background-color: rgb(239 68 68 / 0.3);
3096
3090
  }
3097
- .hover\:bg-white:hover {
3098
- --tw-bg-opacity: 1;
3099
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3100
- }
3101
- .hover\:bg-white\/10:hover {
3102
- background-color: rgb(255 255 255 / 0.1);
3103
- }
3104
- .hover\:bg-white\/5:hover {
3105
- background-color: rgb(255 255 255 / 0.05);
3106
- }
3107
- .hover\:text-black:hover {
3108
- --tw-text-opacity: 1;
3109
- color: rgb(0 0 0 / var(--tw-text-opacity, 1));
3110
- }
3111
3091
  .hover\:opacity-100:hover {
3112
3092
  opacity: 1;
3113
3093
  }
3094
+ .hover\:opacity-60:hover {
3095
+ opacity: 0.6;
3096
+ }
3114
3097
  .hover\:opacity-70:hover {
3115
3098
  opacity: 0.7;
3116
3099
  }
@@ -3141,33 +3124,12 @@ video {
3141
3124
  }
3142
3125
  }
3143
3126
  @media (prefers-color-scheme: dark) {
3144
- .dark\:border-black\/10 {
3145
- border-color: rgb(0 0 0 / 0.1);
3146
- }
3147
- .dark\:border-black\/20 {
3148
- border-color: rgb(0 0 0 / 0.2);
3149
- }
3150
3127
  .dark\:bg-\[var\(--shiki-dark-bg\,var\(--sdm-tbg\)\)\] {
3151
3128
  background-color: var(--shiki-dark-bg,var(--sdm-tbg));
3152
3129
  }
3153
- .dark\:bg-black {
3154
- --tw-bg-opacity: 1;
3155
- background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
3156
- }
3157
- .dark\:bg-white {
3158
- --tw-bg-opacity: 1;
3159
- background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
3160
- }
3161
3130
  .dark\:text-\[var\(--shiki-dark\,var\(--sdm-c\,inherit\)\)\] {
3162
3131
  color: var(--shiki-dark,var(--sdm-c,inherit));
3163
3132
  }
3164
- .dark\:text-white {
3165
- --tw-text-opacity: 1;
3166
- color: rgb(255 255 255 / var(--tw-text-opacity, 1));
3167
- }
3168
- .dark\:hover\:bg-black\/10:hover {
3169
- background-color: rgb(0 0 0 / 0.1);
3170
- }
3171
3133
  }
3172
3134
  .\[\&\:not\(\:first-child\)\]\:mt-4:not(:first-child) {
3173
3135
  margin-top: 1rem;
@@ -1,3 +1,3 @@
1
- export { c as Chat, I as ChatApp, J as ChatAppProps, d as ChatInput, e as ChatInputProps, f as ChatProps, K as ImageAttachment, j as LLMContextValue, k as LLMLoading, l as LLMLoadingProps, m as LLMProvider, n as LLMProviderProps, o as LLMReady, p as LLMReadyProps, U as UseChatOptions, s as UseChatReturn, t as UseCompletionOptions, u as UseCompletionReturn, v as UseStreamOptions, w as UseStreamReturn, z as useChat, E as useCompletion, F as useLLM, H as useStream } from '../index-fIqGfqTG.js';
1
+ export { c as Chat, I as ChatApp, J as ChatAppProps, d as ChatInput, e as ChatInputProps, f as ChatProps, K as ImageAttachment, j as LLMContextValue, k as LLMLoading, l as LLMLoadingProps, m as LLMProvider, n as LLMProviderProps, o as LLMReady, p as LLMReadyProps, U as UseChatOptions, s as UseChatReturn, t as UseCompletionOptions, u as UseCompletionReturn, v as UseStreamOptions, w as UseStreamReturn, z as useChat, E as useCompletion, F as useLLM, H as useStream } from '../index-C3lo7t8l.js';
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
@@ -9,7 +9,7 @@ import {
9
9
  useCompletion,
10
10
  useLLM,
11
11
  useStream
12
- } from "../chunk-PTPT4EPO.js";
12
+ } from "../chunk-MDEYMUE4.js";
13
13
  export {
14
14
  Chat,
15
15
  ChatApp,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blank-utils/llm",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Run LLMs directly in your browser with WebGPU acceleration. Supports React hooks and eager background loading.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",