Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Thomas G. Lopes
commited on
Commit
·
7c08d14
1
Parent(s):
96cfab0
add markdown parsing
Browse files- package.json +2 -0
- pnpm-lock.yaml +45 -0
- src/app.css +1 -0
- src/lib/components/inference-playground/generation-config.svelte +12 -0
- src/lib/components/inference-playground/message-textarea.svelte +2 -2
- src/lib/components/inference-playground/message.svelte +40 -22
- src/lib/spells/textarea-autosize.svelte.ts +1 -1
- src/lib/state/conversations.svelte.ts +4 -0
package.json
CHANGED
|
@@ -74,8 +74,10 @@
|
|
| 74 |
},
|
| 75 |
"type": "module",
|
| 76 |
"dependencies": {
|
|
|
|
| 77 |
"dequal": "^2.0.3",
|
| 78 |
"eslint-plugin-svelte": "^3.11.0",
|
|
|
|
| 79 |
"remult": "^3.0.2",
|
| 80 |
"typia": "^8.0.0"
|
| 81 |
},
|
|
|
|
| 74 |
},
|
| 75 |
"type": "module",
|
| 76 |
"dependencies": {
|
| 77 |
+
"@tailwindcss/typography": "^0.5.16",
|
| 78 |
"dequal": "^2.0.3",
|
| 79 |
"eslint-plugin-svelte": "^3.11.0",
|
| 80 |
+
"marked": "^16.1.2",
|
| 81 |
"remult": "^3.0.2",
|
| 82 |
"typia": "^8.0.0"
|
| 83 |
},
|
pnpm-lock.yaml
CHANGED
|
@@ -8,12 +8,18 @@ importers:
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
|
|
|
|
|
|
|
|
|
| 11 |
dequal:
|
| 12 |
specifier: ^2.0.3
|
| 13 |
version: 2.0.3
|
| 14 |
eslint-plugin-svelte:
|
| 15 |
specifier: ^3.11.0
|
| 16 |
version: 3.11.0(eslint@9.22.0(jiti@2.4.2))(svelte@5.36.16)
|
|
|
|
|
|
|
|
|
|
| 17 |
remult:
|
| 18 |
specifier: ^3.0.2
|
| 19 |
version: 3.0.2
|
|
@@ -1128,6 +1134,11 @@ packages:
|
|
| 1128 |
'@tailwindcss/postcss@4.0.9':
|
| 1129 |
resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==}
|
| 1130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1131 |
'@testing-library/dom@10.4.0':
|
| 1132 |
resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
|
| 1133 |
engines: {node: '>=18'}
|
|
@@ -2207,6 +2218,12 @@ packages:
|
|
| 2207 |
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
|
| 2208 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 2209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2210 |
lodash.merge@4.6.2:
|
| 2211 |
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
| 2212 |
|
|
@@ -2233,6 +2250,11 @@ packages:
|
|
| 2233 |
magic-string@0.30.17:
|
| 2234 |
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
| 2235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2236 |
matcher@3.0.0:
|
| 2237 |
resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
|
| 2238 |
engines: {node: '>=10'}
|
|
@@ -2518,6 +2540,10 @@ packages:
|
|
| 2518 |
peerDependencies:
|
| 2519 |
postcss: ^8.4.29
|
| 2520 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2521 |
postcss-selector-parser@7.1.0:
|
| 2522 |
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
|
| 2523 |
engines: {node: '>=4'}
|
|
@@ -4045,6 +4071,14 @@ snapshots:
|
|
| 4045 |
postcss: 8.5.3
|
| 4046 |
tailwindcss: 4.0.9
|
| 4047 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4048 |
'@testing-library/dom@10.4.0':
|
| 4049 |
dependencies:
|
| 4050 |
'@babel/code-frame': 7.27.1
|
|
@@ -5168,6 +5202,10 @@ snapshots:
|
|
| 5168 |
dependencies:
|
| 5169 |
p-locate: 6.0.0
|
| 5170 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5171 |
lodash.merge@4.6.2: {}
|
| 5172 |
|
| 5173 |
lodash@4.17.21: {}
|
|
@@ -5189,6 +5227,8 @@ snapshots:
|
|
| 5189 |
dependencies:
|
| 5190 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 5191 |
|
|
|
|
|
|
|
| 5192 |
matcher@3.0.0:
|
| 5193 |
dependencies:
|
| 5194 |
escape-string-regexp: 4.0.0
|
|
@@ -5456,6 +5496,11 @@ snapshots:
|
|
| 5456 |
dependencies:
|
| 5457 |
postcss: 8.5.3
|
| 5458 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5459 |
postcss-selector-parser@7.1.0:
|
| 5460 |
dependencies:
|
| 5461 |
cssesc: 3.0.0
|
|
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
| 11 |
+
'@tailwindcss/typography':
|
| 12 |
+
specifier: ^0.5.16
|
| 13 |
+
version: 0.5.16(tailwindcss@4.0.9)
|
| 14 |
dequal:
|
| 15 |
specifier: ^2.0.3
|
| 16 |
version: 2.0.3
|
| 17 |
eslint-plugin-svelte:
|
| 18 |
specifier: ^3.11.0
|
| 19 |
version: 3.11.0(eslint@9.22.0(jiti@2.4.2))(svelte@5.36.16)
|
| 20 |
+
marked:
|
| 21 |
+
specifier: ^16.1.2
|
| 22 |
+
version: 16.1.2
|
| 23 |
remult:
|
| 24 |
specifier: ^3.0.2
|
| 25 |
version: 3.0.2
|
|
|
|
| 1134 |
'@tailwindcss/postcss@4.0.9':
|
| 1135 |
resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==}
|
| 1136 |
|
| 1137 |
+
'@tailwindcss/typography@0.5.16':
|
| 1138 |
+
resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==}
|
| 1139 |
+
peerDependencies:
|
| 1140 |
+
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1'
|
| 1141 |
+
|
| 1142 |
'@testing-library/dom@10.4.0':
|
| 1143 |
resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
|
| 1144 |
engines: {node: '>=18'}
|
|
|
|
| 2218 |
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
|
| 2219 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 2220 |
|
| 2221 |
+
lodash.castarray@4.4.0:
|
| 2222 |
+
resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
|
| 2223 |
+
|
| 2224 |
+
lodash.isplainobject@4.0.6:
|
| 2225 |
+
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
| 2226 |
+
|
| 2227 |
lodash.merge@4.6.2:
|
| 2228 |
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
|
| 2229 |
|
|
|
|
| 2250 |
magic-string@0.30.17:
|
| 2251 |
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
| 2252 |
|
| 2253 |
+
marked@16.1.2:
|
| 2254 |
+
resolution: {integrity: sha512-rNQt5EvRinalby7zJZu/mB+BvaAY2oz3wCuCjt1RDrWNpS1Pdf9xqMOeC9Hm5adBdcV/3XZPJpG58eT+WBc0XQ==}
|
| 2255 |
+
engines: {node: '>= 20'}
|
| 2256 |
+
hasBin: true
|
| 2257 |
+
|
| 2258 |
matcher@3.0.0:
|
| 2259 |
resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
|
| 2260 |
engines: {node: '>=10'}
|
|
|
|
| 2540 |
peerDependencies:
|
| 2541 |
postcss: ^8.4.29
|
| 2542 |
|
| 2543 |
+
postcss-selector-parser@6.0.10:
|
| 2544 |
+
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
|
| 2545 |
+
engines: {node: '>=4'}
|
| 2546 |
+
|
| 2547 |
postcss-selector-parser@7.1.0:
|
| 2548 |
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
|
| 2549 |
engines: {node: '>=4'}
|
|
|
|
| 4071 |
postcss: 8.5.3
|
| 4072 |
tailwindcss: 4.0.9
|
| 4073 |
|
| 4074 |
+
'@tailwindcss/typography@0.5.16(tailwindcss@4.0.9)':
|
| 4075 |
+
dependencies:
|
| 4076 |
+
lodash.castarray: 4.4.0
|
| 4077 |
+
lodash.isplainobject: 4.0.6
|
| 4078 |
+
lodash.merge: 4.6.2
|
| 4079 |
+
postcss-selector-parser: 6.0.10
|
| 4080 |
+
tailwindcss: 4.0.9
|
| 4081 |
+
|
| 4082 |
'@testing-library/dom@10.4.0':
|
| 4083 |
dependencies:
|
| 4084 |
'@babel/code-frame': 7.27.1
|
|
|
|
| 5202 |
dependencies:
|
| 5203 |
p-locate: 6.0.0
|
| 5204 |
|
| 5205 |
+
lodash.castarray@4.4.0: {}
|
| 5206 |
+
|
| 5207 |
+
lodash.isplainobject@4.0.6: {}
|
| 5208 |
+
|
| 5209 |
lodash.merge@4.6.2: {}
|
| 5210 |
|
| 5211 |
lodash@4.17.21: {}
|
|
|
|
| 5227 |
dependencies:
|
| 5228 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 5229 |
|
| 5230 |
+
marked@16.1.2: {}
|
| 5231 |
+
|
| 5232 |
matcher@3.0.0:
|
| 5233 |
dependencies:
|
| 5234 |
escape-string-regexp: 4.0.0
|
|
|
|
| 5496 |
dependencies:
|
| 5497 |
postcss: 8.5.3
|
| 5498 |
|
| 5499 |
+
postcss-selector-parser@6.0.10:
|
| 5500 |
+
dependencies:
|
| 5501 |
+
cssesc: 3.0.0
|
| 5502 |
+
util-deprecate: 1.0.2
|
| 5503 |
+
|
| 5504 |
postcss-selector-parser@7.1.0:
|
| 5505 |
dependencies:
|
| 5506 |
cssesc: 3.0.0
|
src/app.css
CHANGED
|
@@ -2,6 +2,7 @@
|
|
| 2 |
@import "tailwindcss";
|
| 3 |
|
| 4 |
@plugin '@tailwindcss/container-queries';
|
|
|
|
| 5 |
|
| 6 |
@custom-variant dark (&:where(.dark, .dark *));
|
| 7 |
|
|
|
|
| 2 |
@import "tailwindcss";
|
| 3 |
|
| 4 |
@plugin '@tailwindcss/container-queries';
|
| 5 |
+
@plugin '@tailwindcss/typography';
|
| 6 |
|
| 7 |
@custom-variant dark (&:where(.dark, .dark *));
|
| 8 |
|
src/lib/components/inference-playground/generation-config.svelte
CHANGED
|
@@ -137,6 +137,18 @@
|
|
| 137 |
</span>
|
| 138 |
<button class="btn-mini ml-auto" type="button" onclick={openExtraParamsModal}>edit</button>
|
| 139 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
</div>
|
| 141 |
|
| 142 |
<StructuredOutputModal {conversation} />
|
|
|
|
| 137 |
</span>
|
| 138 |
<button class="btn-mini ml-auto" type="button" onclick={openExtraParamsModal}>edit</button>
|
| 139 |
</div>
|
| 140 |
+
|
| 141 |
+
<label class="mt-2 flex cursor-pointer items-center justify-between">
|
| 142 |
+
<input
|
| 143 |
+
type="checkbox"
|
| 144 |
+
bind:checked={() => conversation.data.parseMarkdown, v => conversation.update({ parseMarkdown: v })}
|
| 145 |
+
class="peer sr-only"
|
| 146 |
+
/>
|
| 147 |
+
<span class="text-sm font-medium text-gray-900 dark:text-gray-300">Parse Markdown</span>
|
| 148 |
+
<div
|
| 149 |
+
class="peer relative h-5 w-9 rounded-full bg-gray-200 peer-checked:bg-black peer-focus:outline-hidden after:absolute after:start-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700 dark:peer-checked:bg-blue-600"
|
| 150 |
+
></div>
|
| 151 |
+
</label>
|
| 152 |
</div>
|
| 153 |
|
| 154 |
<StructuredOutputModal {conversation} />
|
src/lib/components/inference-playground/message-textarea.svelte
CHANGED
|
@@ -5,14 +5,14 @@
|
|
| 5 |
import { images } from "$lib/state/images.svelte";
|
| 6 |
import type { ConversationMessage } from "$lib/types.js";
|
| 7 |
import { fileToDataURL } from "$lib/utils/file.js";
|
|
|
|
| 8 |
import { cmdOrCtrl } from "$lib/utils/platform.js";
|
| 9 |
import { FileUpload } from "melt/builders";
|
|
|
|
| 10 |
import IconImage from "~icons/carbon/image-reference";
|
| 11 |
import IconMaximize from "~icons/carbon/maximize";
|
| 12 |
import Tooltip from "../tooltip.svelte";
|
| 13 |
import { previewImage } from "./img-preview.svelte";
|
| 14 |
-
import { omit } from "$lib/utils/object.svelte";
|
| 15 |
-
import { fade } from "svelte/transition";
|
| 16 |
|
| 17 |
const multiple = $derived(conversations.active.length > 1);
|
| 18 |
const loading = $derived(conversations.generating);
|
|
|
|
| 5 |
import { images } from "$lib/state/images.svelte";
|
| 6 |
import type { ConversationMessage } from "$lib/types.js";
|
| 7 |
import { fileToDataURL } from "$lib/utils/file.js";
|
| 8 |
+
import { omit } from "$lib/utils/object.svelte";
|
| 9 |
import { cmdOrCtrl } from "$lib/utils/platform.js";
|
| 10 |
import { FileUpload } from "melt/builders";
|
| 11 |
+
import { fade } from "svelte/transition";
|
| 12 |
import IconImage from "~icons/carbon/image-reference";
|
| 13 |
import IconMaximize from "~icons/carbon/maximize";
|
| 14 |
import Tooltip from "../tooltip.svelte";
|
| 15 |
import { previewImage } from "./img-preview.svelte";
|
|
|
|
|
|
|
| 16 |
|
| 17 |
const multiple = $derived(conversations.active.length > 1);
|
| 18 |
const loading = $derived(conversations.generating);
|
src/lib/components/inference-playground/message.svelte
CHANGED
|
@@ -16,6 +16,7 @@
|
|
| 16 |
import IconCustom from "../icon-custom.svelte";
|
| 17 |
import LocalToasts from "../local-toasts.svelte";
|
| 18 |
import { previewImage } from "./img-preview.svelte";
|
|
|
|
| 19 |
|
| 20 |
type Props = {
|
| 21 |
conversation: ConversationClass;
|
|
@@ -59,6 +60,13 @@
|
|
| 59 |
if (message?.role === "assistant") return "Regenerate";
|
| 60 |
return isLast ? "Generate from here" : "Regenerate from here";
|
| 61 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
</script>
|
| 63 |
|
| 64 |
<div
|
|
@@ -88,28 +96,38 @@
|
|
| 88 |
{message?.role}
|
| 89 |
</div>
|
| 90 |
<div class="flex w-full gap-4">
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
<!-- Sticky wrapper for action buttons -->
|
| 115 |
<div class={["top-8 z-10 self-start", shouldStick && "sticky"]}>
|
|
|
|
| 16 |
import IconCustom from "../icon-custom.svelte";
|
| 17 |
import LocalToasts from "../local-toasts.svelte";
|
| 18 |
import { previewImage } from "./img-preview.svelte";
|
| 19 |
+
import { marked } from "marked";
|
| 20 |
|
| 21 |
type Props = {
|
| 22 |
conversation: ConversationClass;
|
|
|
|
| 60 |
if (message?.role === "assistant") return "Regenerate";
|
| 61 |
return isLast ? "Generate from here" : "Regenerate from here";
|
| 62 |
});
|
| 63 |
+
|
| 64 |
+
const parsedContent = $derived.by(() => {
|
| 65 |
+
if (!conversation.data.parseMarkdown || !message?.content) {
|
| 66 |
+
return message?.content ?? "";
|
| 67 |
+
}
|
| 68 |
+
return marked(message.content);
|
| 69 |
+
});
|
| 70 |
</script>
|
| 71 |
|
| 72 |
<div
|
|
|
|
| 96 |
{message?.role}
|
| 97 |
</div>
|
| 98 |
<div class="flex w-full gap-4">
|
| 99 |
+
{#if conversation.data.parseMarkdown && message?.role === "assistant"}
|
| 100 |
+
<div
|
| 101 |
+
class="prose prose-sm dark:prose-invert max-w-none grow rounded-lg bg-transparent px-2 py-2.5 ring-gray-100 outline-none group-hover/message:ring-3 hover:bg-white @2xl:px-3 dark:ring-gray-600 dark:hover:bg-gray-900"
|
| 102 |
+
data-message
|
| 103 |
+
data-test-id={TEST_IDS.message}
|
| 104 |
+
>
|
| 105 |
+
{@html parsedContent}
|
| 106 |
+
</div>
|
| 107 |
+
{:else}
|
| 108 |
+
<textarea
|
| 109 |
+
value={message?.content}
|
| 110 |
+
onchange={e => {
|
| 111 |
+
const el = e.target as HTMLTextAreaElement;
|
| 112 |
+
const content = el?.value;
|
| 113 |
+
if (!message || !content) return;
|
| 114 |
+
conversation.updateMessage({ index, message: { ...message, content } });
|
| 115 |
+
}}
|
| 116 |
+
onkeydown={e => {
|
| 117 |
+
if ((e.ctrlKey || e.metaKey) && e.key === "g") {
|
| 118 |
+
e.preventDefault();
|
| 119 |
+
e.stopPropagation();
|
| 120 |
+
onRegen?.();
|
| 121 |
+
}
|
| 122 |
+
}}
|
| 123 |
+
placeholder="Enter {message?.role} message"
|
| 124 |
+
class="grow resize-none overflow-hidden rounded-lg bg-transparent px-2 py-2.5 ring-gray-100 outline-none group-hover/message:ring-3 hover:bg-white focus:bg-white focus:ring-3 @2xl:px-3 dark:ring-gray-600 dark:hover:bg-gray-900 dark:focus:bg-gray-900"
|
| 125 |
+
rows="1"
|
| 126 |
+
data-message
|
| 127 |
+
data-test-id={TEST_IDS.message}
|
| 128 |
+
{@attach autosized.attachment}
|
| 129 |
+
></textarea>
|
| 130 |
+
{/if}
|
| 131 |
|
| 132 |
<!-- Sticky wrapper for action buttons -->
|
| 133 |
<div class={["top-8 z-10 self-start", shouldStick && "sticky"]}>
|
src/lib/spells/textarea-autosize.svelte.ts
CHANGED
|
@@ -150,7 +150,7 @@ export class TextareaAutosize {
|
|
| 150 |
}
|
| 151 |
|
| 152 |
// Only update if height actually changed
|
| 153 |
-
if (this.textareaHeight !== newHeight) {
|
| 154 |
this.textareaHeight = newHeight;
|
| 155 |
this.element.style[this.styleProp] = `${newHeight}px`;
|
| 156 |
}
|
|
|
|
| 150 |
}
|
| 151 |
|
| 152 |
// Only update if height actually changed
|
| 153 |
+
if (this.textareaHeight !== newHeight || !this.element.style[this.styleProp]) {
|
| 154 |
this.textareaHeight = newHeight;
|
| 155 |
this.element.style[this.styleProp] = `${newHeight}px`;
|
| 156 |
}
|
src/lib/state/conversations.svelte.ts
CHANGED
|
@@ -38,6 +38,9 @@ export class ConversationEntity {
|
|
| 38 |
schema?: string;
|
| 39 |
};
|
| 40 |
|
|
|
|
|
|
|
|
|
|
| 41 |
@Fields.json()
|
| 42 |
messages?: ConversationMessage[];
|
| 43 |
|
|
@@ -82,6 +85,7 @@ function getDefaultConversation(projectId: string) {
|
|
| 82 |
config: { ...defaultGenerationConfig },
|
| 83 |
messages: [],
|
| 84 |
streaming: true,
|
|
|
|
| 85 |
createdAt: new Date(),
|
| 86 |
} satisfies Partial<ConversationEntityMembers>;
|
| 87 |
}
|
|
|
|
| 38 |
schema?: string;
|
| 39 |
};
|
| 40 |
|
| 41 |
+
@Fields.boolean()
|
| 42 |
+
parseMarkdown = false;
|
| 43 |
+
|
| 44 |
@Fields.json()
|
| 45 |
messages?: ConversationMessage[];
|
| 46 |
|
|
|
|
| 85 |
config: { ...defaultGenerationConfig },
|
| 86 |
messages: [],
|
| 87 |
streaming: true,
|
| 88 |
+
parseMarkdown: false,
|
| 89 |
createdAt: new Date(),
|
| 90 |
} satisfies Partial<ConversationEntityMembers>;
|
| 91 |
}
|