@blank-utils/llm 0.3.18 → 0.3.20
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.
- package/dist/{chunk-VJDH5U3G.js → chunk-7YC6ECAU.js} +101 -97
- package/dist/index.css +103 -232
- package/dist/index.js +1 -1
- package/dist/react/index.css +103 -232
- package/dist/react/index.js +1 -1
- package/package.json +1 -1
|
@@ -894,7 +894,7 @@ import { useRef as useRef3, useEffect as useEffect3, useState as useState3, useM
|
|
|
894
894
|
// src/react/chat-input.tsx
|
|
895
895
|
import "react";
|
|
896
896
|
import { useRef as useRef2, useEffect as useEffect2, useCallback as useCallback2, useState as useState2 } from "react";
|
|
897
|
-
import {
|
|
897
|
+
import { Square, ImagePlus, X } from "lucide-react";
|
|
898
898
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
899
899
|
function ChatInput({
|
|
900
900
|
value,
|
|
@@ -1006,7 +1006,7 @@ ${newText}` : newText);
|
|
|
1006
1006
|
return /* @__PURE__ */ jsxs2(
|
|
1007
1007
|
"div",
|
|
1008
1008
|
{
|
|
1009
|
-
className: `relative flex flex-col bg-
|
|
1009
|
+
className: `relative flex flex-col bg-black border border-white/30 rounded-none focus-within:border-white/60 transition-colors p-3 font-mono ${className}`,
|
|
1010
1010
|
onDragOver: (e) => {
|
|
1011
1011
|
e.preventDefault();
|
|
1012
1012
|
setIsDragging(true);
|
|
@@ -1014,9 +1014,9 @@ ${newText}` : newText);
|
|
|
1014
1014
|
onDragLeave: () => setIsDragging(false),
|
|
1015
1015
|
onDrop: handleDrop,
|
|
1016
1016
|
children: [
|
|
1017
|
-
isDragging && /* @__PURE__ */ jsxs2("div", { className: "absolute inset-x-0 inset-y-0 bg-
|
|
1018
|
-
/* @__PURE__ */ jsx2(ImagePlus, { className: "w-
|
|
1019
|
-
/* @__PURE__ */ jsx2("span", { className: "text-
|
|
1017
|
+
isDragging && /* @__PURE__ */ jsxs2("div", { className: "absolute inset-x-0 inset-y-0 bg-black/90 flex flex-col items-center justify-center z-20 border border-dashed border-white/50 rounded-none m-1", children: [
|
|
1018
|
+
/* @__PURE__ */ jsx2(ImagePlus, { className: "w-8 h-8 text-white mb-2" }),
|
|
1019
|
+
/* @__PURE__ */ jsx2("span", { className: "text-white font-light tracking-widest uppercase text-xs", children: "Drop file to attach" })
|
|
1020
1020
|
] }),
|
|
1021
1021
|
/* @__PURE__ */ jsx2(
|
|
1022
1022
|
"input",
|
|
@@ -1029,15 +1029,15 @@ ${newText}` : newText);
|
|
|
1029
1029
|
onChange: handleFileSelect
|
|
1030
1030
|
}
|
|
1031
1031
|
),
|
|
1032
|
-
images.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-
|
|
1032
|
+
images.length > 0 && /* @__PURE__ */ jsx2("div", { className: "flex flex-wrap gap-2 mb-3", children: images.map((img) => /* @__PURE__ */ jsxs2("div", { className: "relative w-16 h-16 overflow-hidden border border-white/30 rounded-none group select-none", children: [
|
|
1033
1033
|
/* @__PURE__ */ jsx2("img", { src: img.dataUrl, alt: "attachment", className: "w-full h-full object-cover grayscale transition-all group-hover:grayscale-0" }),
|
|
1034
1034
|
/* @__PURE__ */ jsx2(
|
|
1035
1035
|
"button",
|
|
1036
1036
|
{
|
|
1037
1037
|
type: "button",
|
|
1038
|
-
className: "absolute top-0 right-0 w-
|
|
1038
|
+
className: "absolute top-0 right-0 w-5 h-5 bg-black/80 text-white border-l border-b border-white/30 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity",
|
|
1039
1039
|
onClick: () => onImageRemove?.(img.id),
|
|
1040
|
-
children: /* @__PURE__ */ jsx2(X, { className: "w-
|
|
1040
|
+
children: /* @__PURE__ */ jsx2(X, { className: "w-3 h-3" })
|
|
1041
1041
|
}
|
|
1042
1042
|
)
|
|
1043
1043
|
] }, img.id)) }),
|
|
@@ -1052,46 +1052,43 @@ ${newText}` : newText);
|
|
|
1052
1052
|
placeholder,
|
|
1053
1053
|
disabled: disabled && !isGenerating,
|
|
1054
1054
|
rows: 1,
|
|
1055
|
-
className: "w-full min-h-[24px] max-h-[200px] resize-none border-none outline-none bg-transparent text-
|
|
1055
|
+
className: "w-full min-h-[24px] max-h-[200px] resize-none border-none outline-none bg-transparent text-white text-sm font-light font-mono leading-relaxed p-0 m-0 placeholder:text-white/30 placeholder:uppercase placeholder:tracking-widest scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent"
|
|
1056
1056
|
}
|
|
1057
1057
|
),
|
|
1058
|
-
/* @__PURE__ */ jsxs2("div", { className: "flex items-
|
|
1059
|
-
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-
|
|
1058
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center justify-between mt-3 pt-3 border-t border-white/10", children: [
|
|
1059
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
|
|
1060
1060
|
modelSelector && /* @__PURE__ */ jsx2("div", { className: "mr-2", children: modelSelector }),
|
|
1061
1061
|
/* @__PURE__ */ jsx2(
|
|
1062
1062
|
"button",
|
|
1063
1063
|
{
|
|
1064
1064
|
type: "button",
|
|
1065
|
-
className: "flex items-center justify-center w-
|
|
1065
|
+
className: "flex items-center justify-center w-8 h-8 rounded-none text-white/50 hover:text-white transition-colors",
|
|
1066
1066
|
onClick: () => fileInputRef.current?.click(),
|
|
1067
1067
|
title: "Attach image or PDF (Ctrl+V to paste)",
|
|
1068
|
-
children: /* @__PURE__ */ jsx2(ImagePlus, { className: "w-
|
|
1068
|
+
children: /* @__PURE__ */ jsx2(ImagePlus, { className: "w-4 h-4" })
|
|
1069
1069
|
}
|
|
1070
1070
|
),
|
|
1071
1071
|
actions
|
|
1072
1072
|
] }),
|
|
1073
|
-
/* @__PURE__ */ jsx2("div", { className: "flex items-center gap-
|
|
1073
|
+
/* @__PURE__ */ jsx2("div", { className: "flex items-center gap-2", children: isGenerating ? /* @__PURE__ */ jsxs2(
|
|
1074
1074
|
"button",
|
|
1075
1075
|
{
|
|
1076
1076
|
type: "button",
|
|
1077
|
-
className: "flex items-center justify-center h-
|
|
1077
|
+
className: "flex items-center justify-center h-8 px-4 rounded-none border border-red-500/50 bg-red-500/10 text-red-500 hover:bg-red-500/20 font-light text-[10px] uppercase tracking-widest transition-colors gap-2 cursor-pointer",
|
|
1078
1078
|
onClick: onStop,
|
|
1079
1079
|
children: [
|
|
1080
|
-
/* @__PURE__ */ jsx2(Square, { className: "w-
|
|
1080
|
+
/* @__PURE__ */ jsx2(Square, { className: "w-3 h-3 fill-current" }),
|
|
1081
1081
|
" STOP"
|
|
1082
1082
|
]
|
|
1083
1083
|
}
|
|
1084
|
-
) : /* @__PURE__ */
|
|
1084
|
+
) : /* @__PURE__ */ jsx2(
|
|
1085
1085
|
"button",
|
|
1086
1086
|
{
|
|
1087
1087
|
type: "button",
|
|
1088
|
-
className: `flex items-center justify-center h-
|
|
1088
|
+
className: `flex items-center justify-center h-8 px-4 rounded-none border text-[10px] font-light uppercase tracking-widest transition-colors gap-2 ${canSend ? "border-white/30 bg-transparent text-white hover:bg-white hover:text-black cursor-pointer" : "border-white/10 bg-transparent text-white/20 cursor-not-allowed"}`,
|
|
1089
1089
|
onClick: onSend,
|
|
1090
1090
|
disabled: !canSend,
|
|
1091
|
-
children:
|
|
1092
|
-
"SEND ",
|
|
1093
|
-
/* @__PURE__ */ jsx2(Send, { className: "w-4 h-4" })
|
|
1094
|
-
]
|
|
1091
|
+
children: "SEND"
|
|
1095
1092
|
}
|
|
1096
1093
|
) })
|
|
1097
1094
|
] })
|
|
@@ -1166,20 +1163,20 @@ function isVisionModel2(modelId) {
|
|
|
1166
1163
|
return lower.includes("vl") || lower.includes("vision") || lower.includes("moondream");
|
|
1167
1164
|
}
|
|
1168
1165
|
var markdownComponents = {
|
|
1169
|
-
h1: ({ children }) => /* @__PURE__ */ jsx3("h1", { className: "text-
|
|
1170
|
-
h2: ({ children }) => /* @__PURE__ */ jsx3("h2", { className: "text-
|
|
1171
|
-
h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-
|
|
1172
|
-
h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-
|
|
1173
|
-
p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-
|
|
1174
|
-
ul: ({ children }) => /* @__PURE__ */ jsx3("ul", { className: "my-
|
|
1175
|
-
ol: ({ children }) => /* @__PURE__ */ jsx3("ol", { className: "my-
|
|
1166
|
+
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 }),
|
|
1167
|
+
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 }),
|
|
1168
|
+
h3: ({ children }) => /* @__PURE__ */ jsx3("h3", { className: "text-lg font-light uppercase tracking-tight mt-4 mb-3 text-white", children }),
|
|
1169
|
+
h4: ({ children }) => /* @__PURE__ */ jsx3("h4", { className: "text-base font-light uppercase tracking-tight mt-4 mb-2 text-white", children }),
|
|
1170
|
+
p: ({ children }) => /* @__PURE__ */ jsx3("p", { className: "leading-relaxed [&:not(:first-child)]:mt-4 text-white/80 text-sm font-light font-mono", children }),
|
|
1171
|
+
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 }),
|
|
1172
|
+
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 }),
|
|
1176
1173
|
li: ({ children }) => /* @__PURE__ */ jsx3("li", { children }),
|
|
1177
|
-
blockquote: ({ children }) => /* @__PURE__ */ jsx3("blockquote", { className: "mt-
|
|
1178
|
-
a: ({ href, children }) => /* @__PURE__ */ jsx3("a", { href, className: "
|
|
1179
|
-
table: ({ children }) => /* @__PURE__ */ jsx3("div", { className: "my-
|
|
1180
|
-
tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b
|
|
1181
|
-
th: ({ children }) => /* @__PURE__ */ jsx3("th", { className: "border-r-
|
|
1182
|
-
td: ({ children }) => /* @__PURE__ */ jsx3("td", { className: "border-r-
|
|
1174
|
+
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 }),
|
|
1175
|
+
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 }),
|
|
1176
|
+
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 }) }),
|
|
1177
|
+
tr: ({ children }) => /* @__PURE__ */ jsx3("tr", { className: "m-0 border-b border-white/30 p-0 hover:bg-white/5", children }),
|
|
1178
|
+
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 }),
|
|
1179
|
+
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 })
|
|
1183
1180
|
};
|
|
1184
1181
|
function ModelSelector({
|
|
1185
1182
|
currentModel,
|
|
@@ -1210,7 +1207,7 @@ function ModelSelector({
|
|
|
1210
1207
|
"button",
|
|
1211
1208
|
{
|
|
1212
1209
|
type: "button",
|
|
1213
|
-
className: "flex items-center gap-2 px-3 py-1.5 border
|
|
1210
|
+
className: "flex items-center gap-2 px-3 py-1.5 border border-white/30 bg-transparent text-white hover:bg-white hover:text-black text-xs font-light uppercase tracking-widest transition-colors",
|
|
1214
1211
|
onClick: () => setIsOpen(!isOpen),
|
|
1215
1212
|
children: [
|
|
1216
1213
|
/* @__PURE__ */ jsx3("span", { children: displayModel }),
|
|
@@ -1218,14 +1215,14 @@ function ModelSelector({
|
|
|
1218
1215
|
]
|
|
1219
1216
|
}
|
|
1220
1217
|
),
|
|
1221
|
-
isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-
|
|
1222
|
-
/* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-
|
|
1218
|
+
isOpen && /* @__PURE__ */ jsxs3("div", { className: "absolute top-[calc(100%+8px)] left-0 w-72 max-h-[300px] overflow-y-auto bg-black border border-white/30 z-50 p-2 scrollbar-none", children: [
|
|
1219
|
+
/* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-white/50 uppercase tracking-widest border-b border-white/10 mb-1", children: "WebLLM" }),
|
|
1223
1220
|
Object.entries(WEBLLM_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
|
|
1224
1221
|
"button",
|
|
1225
1222
|
{
|
|
1226
1223
|
className: cn(
|
|
1227
|
-
"block w-full text-left px-3 py-2.5 text-xs font-
|
|
1228
|
-
currentModel === value ? "bg-
|
|
1224
|
+
"block w-full text-left px-3 py-2.5 text-xs font-light uppercase tracking-wider truncate transition-colors",
|
|
1225
|
+
currentModel === value ? "bg-white text-black" : "text-white hover:bg-white/10"
|
|
1229
1226
|
),
|
|
1230
1227
|
onClick: () => {
|
|
1231
1228
|
onSelect(value);
|
|
@@ -1239,13 +1236,13 @@ function ModelSelector({
|
|
|
1239
1236
|
},
|
|
1240
1237
|
key
|
|
1241
1238
|
)),
|
|
1242
|
-
/* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-
|
|
1239
|
+
/* @__PURE__ */ jsx3("div", { className: "px-3 py-2 text-[10px] font-light text-white/50 uppercase tracking-widest mt-4 border-b border-white/10 mb-1", children: "Transformers.js" }),
|
|
1243
1240
|
Object.entries(TRANSFORMERS_MODELS).map(([key, value]) => /* @__PURE__ */ jsxs3(
|
|
1244
1241
|
"button",
|
|
1245
1242
|
{
|
|
1246
1243
|
className: cn(
|
|
1247
|
-
"block w-full text-left px-3 py-2.5 text-xs font-
|
|
1248
|
-
currentModel === value ? "bg-
|
|
1244
|
+
"block w-full text-left px-3 py-2.5 text-xs font-light uppercase tracking-wider truncate transition-colors",
|
|
1245
|
+
currentModel === value ? "bg-white text-black" : "text-white hover:bg-white/10"
|
|
1249
1246
|
),
|
|
1250
1247
|
onClick: () => {
|
|
1251
1248
|
onSelect(value);
|
|
@@ -1397,64 +1394,65 @@ ${systemPrompt}` : systemPrompt;
|
|
|
1397
1394
|
setStreamingText("");
|
|
1398
1395
|
}
|
|
1399
1396
|
};
|
|
1400
|
-
return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col bg-
|
|
1401
|
-
showHeader && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between px-6 py-
|
|
1397
|
+
return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col bg-black text-white font-mono rounded-none overflow-hidden", className), style: { maxHeight, height: "100%" }, children: [
|
|
1398
|
+
showHeader && /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between px-6 py-4 bg-black border-b border-white/30", children: [
|
|
1402
1399
|
onModelChange ? /* @__PURE__ */ jsx3(
|
|
1403
1400
|
ModelSelector,
|
|
1404
1401
|
{
|
|
1405
1402
|
currentModel: modelId,
|
|
1406
1403
|
onSelect: onModelChange
|
|
1407
1404
|
}
|
|
1408
|
-
) : /* @__PURE__ */ jsxs3("div", { className: "px-
|
|
1409
|
-
/* @__PURE__ */ jsx3("span", { className: "text-
|
|
1410
|
-
modelId && isVisionModel2(modelId) && /* @__PURE__ */ jsx3("span", { className: "px-
|
|
1405
|
+
) : /* @__PURE__ */ jsxs3("div", { className: "px-3 py-1.5 border border-white/30 flex items-center gap-3", children: [
|
|
1406
|
+
/* @__PURE__ */ jsx3("span", { className: "text-xs font-light uppercase tracking-widest text-white", children: modelId?.split("/").pop() }),
|
|
1407
|
+
modelId && isVisionModel2(modelId) && /* @__PURE__ */ jsx3("span", { className: "px-1.5 py-0.5 border border-white/30 text-[9px] font-light uppercase tracking-widest text-white bg-transparent", children: "VISION" })
|
|
1411
1408
|
] }),
|
|
1412
1409
|
/* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
|
|
1413
|
-
/* @__PURE__ */ jsx3("span", { className: "text-
|
|
1410
|
+
/* @__PURE__ */ jsx3("span", { className: "text-[10px] font-light tracking-widest text-white uppercase opacity-70", children: error ? "ERR" : isReady ? "RDY" : isLoading ? "LOD" : "IDL" }),
|
|
1414
1411
|
/* @__PURE__ */ jsx3("div", { className: cn(
|
|
1415
|
-
"w-
|
|
1416
|
-
error ? "bg-red-500" : isReady ? "bg-
|
|
1412
|
+
"w-2 h-2 rounded-none",
|
|
1413
|
+
error ? "bg-red-500" : isReady ? "bg-white" : "bg-white/30 animate-pulse"
|
|
1417
1414
|
) })
|
|
1418
1415
|
] })
|
|
1419
1416
|
] }),
|
|
1420
|
-
showProgress && isLoading && loadProgress && /* @__PURE__ */ jsxs3("div", { className: "px-6 py-4 border-b
|
|
1421
|
-
/* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-2 font-mono uppercase tracking-widest text-
|
|
1422
|
-
/* @__PURE__ */ jsx3("span", { className: "text-
|
|
1423
|
-
/* @__PURE__ */ jsxs3("span", { className: "font-
|
|
1417
|
+
showProgress && isLoading && loadProgress && /* @__PURE__ */ jsxs3("div", { className: "px-6 py-4 border-b border-white/30 bg-black", children: [
|
|
1418
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex justify-between items-center mb-2 font-mono uppercase tracking-widest text-[10px]", children: [
|
|
1419
|
+
/* @__PURE__ */ jsx3("span", { className: "text-white/70 font-light truncate pr-4", children: loadProgress.status }),
|
|
1420
|
+
/* @__PURE__ */ jsxs3("span", { className: "font-light text-white/70", children: [
|
|
1424
1421
|
Math.round(loadProgress.progress),
|
|
1425
1422
|
"%"
|
|
1426
1423
|
] })
|
|
1427
1424
|
] }),
|
|
1428
|
-
/* @__PURE__ */ jsx3("div", { className: "h-
|
|
1425
|
+
/* @__PURE__ */ jsx3("div", { className: "h-1 w-full bg-white/10 rounded-none overflow-hidden relative", children: /* @__PURE__ */ jsx3(
|
|
1429
1426
|
"div",
|
|
1430
1427
|
{
|
|
1431
|
-
className: "h-full bg-
|
|
1428
|
+
className: "h-full bg-white transition-all duration-300 ease-out",
|
|
1432
1429
|
style: { width: `${Math.min(100, loadProgress.progress)}%` }
|
|
1433
1430
|
}
|
|
1434
1431
|
) })
|
|
1435
1432
|
] }),
|
|
1436
|
-
error && /* @__PURE__ */ jsxs3("div", { className: "flex flex-col sm:flex-row items-start sm:items-center justify-between mx-6 mt-6 p-4 border
|
|
1437
|
-
/* @__PURE__ */ jsx3("span", { className: "text-
|
|
1433
|
+
error && /* @__PURE__ */ jsxs3("div", { className: "flex flex-col sm:flex-row items-start sm:items-center justify-between mx-6 mt-6 p-4 border border-red-500/50 bg-red-500/10 rounded-none gap-4", children: [
|
|
1434
|
+
/* @__PURE__ */ jsx3("span", { className: "text-[10px] text-red-500 font-light uppercase tracking-wider", children: error.message }),
|
|
1438
1435
|
/* @__PURE__ */ jsxs3(
|
|
1439
1436
|
"button",
|
|
1440
1437
|
{
|
|
1441
|
-
className: "flex items-center gap-2 px-
|
|
1438
|
+
className: "flex items-center gap-2 px-3 py-1.5 bg-transparent text-red-500 border border-red-500/50 hover:bg-red-500/20 transition-colors rounded-none text-[10px] font-light uppercase tracking-widest",
|
|
1442
1439
|
onClick: reload,
|
|
1443
1440
|
children: [
|
|
1444
|
-
/* @__PURE__ */ jsx3(RotateCcw, { className: "w-
|
|
1441
|
+
/* @__PURE__ */ jsx3(RotateCcw, { className: "w-3 h-3" }),
|
|
1445
1442
|
" REBOOT"
|
|
1446
1443
|
]
|
|
1447
1444
|
}
|
|
1448
1445
|
)
|
|
1449
1446
|
] }),
|
|
1450
|
-
/* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto p-6 flex flex-col gap-
|
|
1451
|
-
!isLoading && messages.length === 0 && !error && /* @__PURE__ */ jsxs3("div", { className: "flex-1 flex flex-col items-center justify-center text-center mt-12 mb-8 p-8 border
|
|
1452
|
-
/* @__PURE__ */ jsx3("div", { className: "w-
|
|
1453
|
-
/* @__PURE__ */ jsx3("h3", { className: "text-
|
|
1454
|
-
/* @__PURE__ */ jsx3("p", { className: "text-
|
|
1447
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex-1 overflow-y-auto p-6 flex flex-col gap-6 scrollbar-thin scrollbar-thumb-white/20 scrollbar-track-transparent", children: [
|
|
1448
|
+
!isLoading && messages.length === 0 && !error && /* @__PURE__ */ jsxs3("div", { className: "flex-1 flex flex-col items-center justify-center text-center mt-12 mb-8 p-8 border border-white/10", children: [
|
|
1449
|
+
/* @__PURE__ */ jsx3("div", { className: "w-16 h-16 border border-white/30 mb-6 flex items-center justify-center text-xl font-light bg-transparent text-white/50", children: "//" }),
|
|
1450
|
+
/* @__PURE__ */ jsx3("h3", { className: "text-xl font-light uppercase tracking-widest text-white/70 mb-4", children: "SYSTEM READY" }),
|
|
1451
|
+
/* @__PURE__ */ jsx3("p", { className: "text-white/40 max-w-sm uppercase text-[10px] leading-relaxed tracking-widest font-light", children: "[ MARKDOWN | MATH | MERMAID ] INITIALIZED. AWAITING INPUT." })
|
|
1455
1452
|
] }),
|
|
1456
|
-
messages.map((msg, i) => /* @__PURE__ */ jsx3("div", { className:
|
|
1457
|
-
|
|
1453
|
+
messages.map((msg, i) => /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full", children: msg.role === "user" ? /* @__PURE__ */ jsxs3("div", { className: "bg-transparent text-white/50 px-4 py-4 border border-white/10 rounded-none w-full", children: [
|
|
1454
|
+
/* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50", children: "USER" }),
|
|
1455
|
+
msg.images && msg.images.length > 0 && /* @__PURE__ */ jsx3("div", { className: "flex flex-wrap gap-3 mb-4", children: msg.images.map((img) => /* @__PURE__ */ jsx3("img", { src: img.dataUrl, className: "w-24 h-24 object-cover border border-white/30", alt: "attachment" }, img.id)) }),
|
|
1458
1456
|
/* @__PURE__ */ jsx3("div", { className: "prose prose-base dark:prose-invert max-w-none font-mono", children: /* @__PURE__ */ jsx3(
|
|
1459
1457
|
Streamdown,
|
|
1460
1458
|
{
|
|
@@ -1468,36 +1466,42 @@ ${systemPrompt}` : systemPrompt;
|
|
|
1468
1466
|
children: msg.content
|
|
1469
1467
|
}
|
|
1470
1468
|
) })
|
|
1471
|
-
] }) : /* @__PURE__ */
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1469
|
+
] }) : /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none px-4 py-4 w-full min-w-0 font-mono border border-white/10 bg-transparent mt-1", children: [
|
|
1470
|
+
/* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50 text-white", children: "SYSTEM" }),
|
|
1471
|
+
/* @__PURE__ */ jsx3(
|
|
1472
|
+
Streamdown,
|
|
1473
|
+
{
|
|
1474
|
+
plugins: { code, mermaid, math },
|
|
1475
|
+
components: markdownComponents,
|
|
1476
|
+
animated: true,
|
|
1477
|
+
isAnimating: false,
|
|
1478
|
+
mermaid: mermaidOptions,
|
|
1479
|
+
controls: streamdownControls,
|
|
1480
|
+
parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
|
|
1481
|
+
children: msg.content
|
|
1482
|
+
}
|
|
1483
|
+
)
|
|
1484
|
+
] }) }, i)),
|
|
1485
|
+
streamingText && /* @__PURE__ */ jsx3("div", { className: "flex flex-col w-full mt-1", children: /* @__PURE__ */ jsxs3("div", { className: "prose prose-base dark:prose-invert max-w-none px-4 py-4 w-full min-w-0 font-mono border border-white/10 bg-transparent", children: [
|
|
1486
|
+
/* @__PURE__ */ jsx3("div", { className: "mb-2 text-[10px] tracking-widest uppercase opacity-50 text-white", children: "SYSTEM" }),
|
|
1487
|
+
/* @__PURE__ */ jsx3(
|
|
1488
|
+
Streamdown,
|
|
1489
|
+
{
|
|
1490
|
+
plugins: { code, mermaid, math },
|
|
1491
|
+
components: markdownComponents,
|
|
1492
|
+
animated: true,
|
|
1493
|
+
isAnimating: isGenerating,
|
|
1494
|
+
mermaid: mermaidOptions,
|
|
1495
|
+
controls: streamdownControls,
|
|
1496
|
+
parseMarkdownIntoBlocksFn: sanitizeMarkdownLanguageBlocks,
|
|
1497
|
+
caret: "block",
|
|
1498
|
+
children: streamingText
|
|
1499
|
+
}
|
|
1500
|
+
)
|
|
1501
|
+
] }) }),
|
|
1498
1502
|
/* @__PURE__ */ jsx3("div", { ref: messagesEndRef, className: "h-4" })
|
|
1499
1503
|
] }),
|
|
1500
|
-
/* @__PURE__ */ jsx3("div", { className: "p-
|
|
1504
|
+
/* @__PURE__ */ jsx3("div", { className: "p-4 bg-black border-t border-white/30", children: /* @__PURE__ */ jsx3(
|
|
1501
1505
|
ChatInput,
|
|
1502
1506
|
{
|
|
1503
1507
|
value: input,
|
|
@@ -1506,7 +1510,7 @@ ${systemPrompt}` : systemPrompt;
|
|
|
1506
1510
|
onStop: handleStop,
|
|
1507
1511
|
disabled: !isReady && !isLoading,
|
|
1508
1512
|
isGenerating,
|
|
1509
|
-
placeholder: isLoading ? "
|
|
1513
|
+
placeholder: isLoading ? "MODEL IS LOADING..." : "MESSAGE...",
|
|
1510
1514
|
actions: inputActions,
|
|
1511
1515
|
images,
|
|
1512
1516
|
onImageAdd: (img) => setImages((prev) => [...prev, img]),
|