Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	Use `uuid` for message ID generation instead of crypto method (#882)
Browse filesBecause `crypto.randomUUID()` is not available on non-secure contexts
(for example `http` versions of chat-ui), this would break on non-https
deployments of chat-ui.
This should fix #870 and fix #868
- package-lock.json +20 -0
 - package.json +2 -0
 - src/lib/types/Message.ts +2 -1
 - src/lib/utils/tree/addChildren.ts +3 -2
 - src/lib/utils/tree/addSibling.ts +2 -1
 - src/lib/utils/tree/convertLegacyConversation.ts +2 -1
 - src/lib/utils/tree/isMessageId.spec.ts +2 -1
 - src/routes/conversation/+server.ts +2 -1
 - src/routes/conversation/[id]/+page.svelte +2 -1
 - vite.config.ts +1 -1
 
    	
        package-lock.json
    CHANGED
    
    | 
         @@ -35,6 +35,7 @@ 
     | 
|
| 35 | 
         
             
            				"sharp": "^0.33.2",
         
     | 
| 36 | 
         
             
            				"tailwind-scrollbar": "^3.0.0",
         
     | 
| 37 | 
         
             
            				"tailwindcss": "^3.4.0",
         
     | 
| 
         | 
|
| 38 | 
         
             
            				"zod": "^3.22.3"
         
     | 
| 39 | 
         
             
            			},
         
     | 
| 40 | 
         
             
            			"devDependencies": {
         
     | 
| 
         @@ -46,6 +47,7 @@ 
     | 
|
| 46 | 
         
             
            				"@types/jsdom": "^21.1.1",
         
     | 
| 47 | 
         
             
            				"@types/marked": "^4.0.8",
         
     | 
| 48 | 
         
             
            				"@types/parquetjs": "^0.10.3",
         
     | 
| 
         | 
|
| 49 | 
         
             
            				"@typescript-eslint/eslint-plugin": "^6.x",
         
     | 
| 50 | 
         
             
            				"@typescript-eslint/parser": "^6.x",
         
     | 
| 51 | 
         
             
            				"eslint": "^8.28.0",
         
     | 
| 
         @@ -1847,6 +1849,12 @@ 
     | 
|
| 1847 | 
         
             
            			"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
         
     | 
| 1848 | 
         
             
            			"dev": true
         
     | 
| 1849 | 
         
             
            		},
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 1850 | 
         
             
            		"node_modules/@types/webidl-conversions": {
         
     | 
| 1851 | 
         
             
            			"version": "7.0.0",
         
     | 
| 1852 | 
         
             
            			"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
         
     | 
| 
         @@ -7249,6 +7257,18 @@ 
     | 
|
| 7249 | 
         
             
            			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
         
     | 
| 7250 | 
         
             
            			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
         
     | 
| 7251 | 
         
             
            		},
         
     | 
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 
         | 
|
| 7252 | 
         
             
            		"node_modules/v8-compile-cache-lib": {
         
     | 
| 7253 | 
         
             
            			"version": "3.0.1",
         
     | 
| 7254 | 
         
             
            			"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
         
     | 
| 
         | 
|
| 35 | 
         
             
            				"sharp": "^0.33.2",
         
     | 
| 36 | 
         
             
            				"tailwind-scrollbar": "^3.0.0",
         
     | 
| 37 | 
         
             
            				"tailwindcss": "^3.4.0",
         
     | 
| 38 | 
         
            +
            				"uuid": "^9.0.1",
         
     | 
| 39 | 
         
             
            				"zod": "^3.22.3"
         
     | 
| 40 | 
         
             
            			},
         
     | 
| 41 | 
         
             
            			"devDependencies": {
         
     | 
| 
         | 
|
| 47 | 
         
             
            				"@types/jsdom": "^21.1.1",
         
     | 
| 48 | 
         
             
            				"@types/marked": "^4.0.8",
         
     | 
| 49 | 
         
             
            				"@types/parquetjs": "^0.10.3",
         
     | 
| 50 | 
         
            +
            				"@types/uuid": "^9.0.8",
         
     | 
| 51 | 
         
             
            				"@typescript-eslint/eslint-plugin": "^6.x",
         
     | 
| 52 | 
         
             
            				"@typescript-eslint/parser": "^6.x",
         
     | 
| 53 | 
         
             
            				"eslint": "^8.28.0",
         
     | 
| 
         | 
|
| 1849 | 
         
             
            			"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
         
     | 
| 1850 | 
         
             
            			"dev": true
         
     | 
| 1851 | 
         
             
            		},
         
     | 
| 1852 | 
         
            +
            		"node_modules/@types/uuid": {
         
     | 
| 1853 | 
         
            +
            			"version": "9.0.8",
         
     | 
| 1854 | 
         
            +
            			"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz",
         
     | 
| 1855 | 
         
            +
            			"integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
         
     | 
| 1856 | 
         
            +
            			"dev": true
         
     | 
| 1857 | 
         
            +
            		},
         
     | 
| 1858 | 
         
             
            		"node_modules/@types/webidl-conversions": {
         
     | 
| 1859 | 
         
             
            			"version": "7.0.0",
         
     | 
| 1860 | 
         
             
            			"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
         
     | 
| 
         | 
|
| 7257 | 
         
             
            			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
         
     | 
| 7258 | 
         
             
            			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
         
     | 
| 7259 | 
         
             
            		},
         
     | 
| 7260 | 
         
            +
            		"node_modules/uuid": {
         
     | 
| 7261 | 
         
            +
            			"version": "9.0.1",
         
     | 
| 7262 | 
         
            +
            			"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
         
     | 
| 7263 | 
         
            +
            			"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
         
     | 
| 7264 | 
         
            +
            			"funding": [
         
     | 
| 7265 | 
         
            +
            				"https://github.com/sponsors/broofa",
         
     | 
| 7266 | 
         
            +
            				"https://github.com/sponsors/ctavan"
         
     | 
| 7267 | 
         
            +
            			],
         
     | 
| 7268 | 
         
            +
            			"bin": {
         
     | 
| 7269 | 
         
            +
            				"uuid": "dist/bin/uuid"
         
     | 
| 7270 | 
         
            +
            			}
         
     | 
| 7271 | 
         
            +
            		},
         
     | 
| 7272 | 
         
             
            		"node_modules/v8-compile-cache-lib": {
         
     | 
| 7273 | 
         
             
            			"version": "3.0.1",
         
     | 
| 7274 | 
         
             
            			"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
         
     | 
    	
        package.json
    CHANGED
    
    | 
         @@ -24,6 +24,7 @@ 
     | 
|
| 24 | 
         
             
            		"@types/jsdom": "^21.1.1",
         
     | 
| 25 | 
         
             
            		"@types/marked": "^4.0.8",
         
     | 
| 26 | 
         
             
            		"@types/parquetjs": "^0.10.3",
         
     | 
| 
         | 
|
| 27 | 
         
             
            		"@typescript-eslint/eslint-plugin": "^6.x",
         
     | 
| 28 | 
         
             
            		"@typescript-eslint/parser": "^6.x",
         
     | 
| 29 | 
         
             
            		"eslint": "^8.28.0",
         
     | 
| 
         @@ -71,6 +72,7 @@ 
     | 
|
| 71 | 
         
             
            		"sharp": "^0.33.2",
         
     | 
| 72 | 
         
             
            		"tailwind-scrollbar": "^3.0.0",
         
     | 
| 73 | 
         
             
            		"tailwindcss": "^3.4.0",
         
     | 
| 
         | 
|
| 74 | 
         
             
            		"zod": "^3.22.3"
         
     | 
| 75 | 
         
             
            	},
         
     | 
| 76 | 
         
             
            	"optionalDependencies": {
         
     | 
| 
         | 
|
| 24 | 
         
             
            		"@types/jsdom": "^21.1.1",
         
     | 
| 25 | 
         
             
            		"@types/marked": "^4.0.8",
         
     | 
| 26 | 
         
             
            		"@types/parquetjs": "^0.10.3",
         
     | 
| 27 | 
         
            +
            		"@types/uuid": "^9.0.8",
         
     | 
| 28 | 
         
             
            		"@typescript-eslint/eslint-plugin": "^6.x",
         
     | 
| 29 | 
         
             
            		"@typescript-eslint/parser": "^6.x",
         
     | 
| 30 | 
         
             
            		"eslint": "^8.28.0",
         
     | 
| 
         | 
|
| 72 | 
         
             
            		"sharp": "^0.33.2",
         
     | 
| 73 | 
         
             
            		"tailwind-scrollbar": "^3.0.0",
         
     | 
| 74 | 
         
             
            		"tailwindcss": "^3.4.0",
         
     | 
| 75 | 
         
            +
            		"uuid": "^9.0.1",
         
     | 
| 76 | 
         
             
            		"zod": "^3.22.3"
         
     | 
| 77 | 
         
             
            	},
         
     | 
| 78 | 
         
             
            	"optionalDependencies": {
         
     | 
    	
        src/lib/types/Message.ts
    CHANGED
    
    | 
         @@ -1,10 +1,11 @@ 
     | 
|
| 1 | 
         
             
            import type { MessageUpdate } from "./MessageUpdate";
         
     | 
| 2 | 
         
             
            import type { Timestamps } from "./Timestamps";
         
     | 
| 3 | 
         
             
            import type { WebSearch } from "./WebSearch";
         
     | 
| 
         | 
|
| 4 | 
         | 
| 5 | 
         
             
            export type Message = Partial<Timestamps> & {
         
     | 
| 6 | 
         
             
            	from: "user" | "assistant" | "system";
         
     | 
| 7 | 
         
            -
            	id: ReturnType<typeof  
     | 
| 8 | 
         
             
            	content: string;
         
     | 
| 9 | 
         
             
            	updates?: MessageUpdate[];
         
     | 
| 10 | 
         
             
            	webSearchId?: WebSearch["_id"]; // legacy version
         
     | 
| 
         | 
|
| 1 | 
         
             
            import type { MessageUpdate } from "./MessageUpdate";
         
     | 
| 2 | 
         
             
            import type { Timestamps } from "./Timestamps";
         
     | 
| 3 | 
         
             
            import type { WebSearch } from "./WebSearch";
         
     | 
| 4 | 
         
            +
            import type { v4 } from "uuid";
         
     | 
| 5 | 
         | 
| 6 | 
         
             
            export type Message = Partial<Timestamps> & {
         
     | 
| 7 | 
         
             
            	from: "user" | "assistant" | "system";
         
     | 
| 8 | 
         
            +
            	id: ReturnType<typeof v4>;
         
     | 
| 9 | 
         
             
            	content: string;
         
     | 
| 10 | 
         
             
            	updates?: MessageUpdate[];
         
     | 
| 11 | 
         
             
            	webSearchId?: WebSearch["_id"]; // legacy version
         
     | 
    	
        src/lib/utils/tree/addChildren.ts
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 
         | 
|
| 3 | 
         | 
| 4 | 
         
             
            export function addChildren(
         
     | 
| 5 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId">,
         
     | 
| 
         @@ -8,7 +9,7 @@ export function addChildren( 
     | 
|
| 8 | 
         
             
            ): Message["id"] {
         
     | 
| 9 | 
         
             
            	// if this is the first message we just push it
         
     | 
| 10 | 
         
             
            	if (conv.messages.length === 0) {
         
     | 
| 11 | 
         
            -
            		const messageId =  
     | 
| 12 | 
         
             
            		conv.rootMessageId = messageId;
         
     | 
| 13 | 
         
             
            		conv.messages.push({
         
     | 
| 14 | 
         
             
            			...message,
         
     | 
| 
         @@ -22,7 +23,7 @@ export function addChildren( 
     | 
|
| 22 | 
         
             
            		throw new Error("You need to specify a parentId if this is not the first message");
         
     | 
| 23 | 
         
             
            	}
         
     | 
| 24 | 
         | 
| 25 | 
         
            -
            	const messageId =  
     | 
| 26 | 
         
             
            	if (!conv.rootMessageId) {
         
     | 
| 27 | 
         
             
            		// if there is no parentId we just push the message
         
     | 
| 28 | 
         
             
            		if (!!parentId && parentId !== conv.messages[conv.messages.length - 1].id) {
         
     | 
| 
         | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 3 | 
         
            +
            import { v4 } from "uuid";
         
     | 
| 4 | 
         | 
| 5 | 
         
             
            export function addChildren(
         
     | 
| 6 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId">,
         
     | 
| 
         | 
|
| 9 | 
         
             
            ): Message["id"] {
         
     | 
| 10 | 
         
             
            	// if this is the first message we just push it
         
     | 
| 11 | 
         
             
            	if (conv.messages.length === 0) {
         
     | 
| 12 | 
         
            +
            		const messageId = v4();
         
     | 
| 13 | 
         
             
            		conv.rootMessageId = messageId;
         
     | 
| 14 | 
         
             
            		conv.messages.push({
         
     | 
| 15 | 
         
             
            			...message,
         
     | 
| 
         | 
|
| 23 | 
         
             
            		throw new Error("You need to specify a parentId if this is not the first message");
         
     | 
| 24 | 
         
             
            	}
         
     | 
| 25 | 
         | 
| 26 | 
         
            +
            	const messageId = v4();
         
     | 
| 27 | 
         
             
            	if (!conv.rootMessageId) {
         
     | 
| 28 | 
         
             
            		// if there is no parentId we just push the message
         
     | 
| 29 | 
         
             
            		if (!!parentId && parentId !== conv.messages[conv.messages.length - 1].id) {
         
     | 
    	
        src/lib/utils/tree/addSibling.ts
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 
         | 
|
| 3 | 
         | 
| 4 | 
         
             
            export function addSibling(
         
     | 
| 5 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId">,
         
     | 
| 
         @@ -23,7 +24,7 @@ export function addSibling( 
     | 
|
| 23 | 
         
             
            		throw new Error("The sibling message is the root message, therefore we can't add a sibling");
         
     | 
| 24 | 
         
             
            	}
         
     | 
| 25 | 
         | 
| 26 | 
         
            -
            	const messageId =  
     | 
| 27 | 
         | 
| 28 | 
         
             
            	conv.messages.push({
         
     | 
| 29 | 
         
             
            		...message,
         
     | 
| 
         | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 3 | 
         
            +
            import { v4 } from "uuid";
         
     | 
| 4 | 
         | 
| 5 | 
         
             
            export function addSibling(
         
     | 
| 6 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId">,
         
     | 
| 
         | 
|
| 24 | 
         
             
            		throw new Error("The sibling message is the root message, therefore we can't add a sibling");
         
     | 
| 25 | 
         
             
            	}
         
     | 
| 26 | 
         | 
| 27 | 
         
            +
            	const messageId = v4();
         
     | 
| 28 | 
         | 
| 29 | 
         
             
            	conv.messages.push({
         
     | 
| 30 | 
         
             
            		...message,
         
     | 
    	
        src/lib/utils/tree/convertLegacyConversation.ts
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 
         | 
|
| 3 | 
         | 
| 4 | 
         
             
            export function convertLegacyConversation(
         
     | 
| 5 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId" | "preprompt">
         
     | 
| 
         @@ -12,7 +13,7 @@ export function convertLegacyConversation( 
     | 
|
| 12 | 
         
             
            			content: conv.preprompt ?? "",
         
     | 
| 13 | 
         
             
            			createdAt: new Date(),
         
     | 
| 14 | 
         
             
            			updatedAt: new Date(),
         
     | 
| 15 | 
         
            -
            			id:  
     | 
| 16 | 
         
             
            		} satisfies Message,
         
     | 
| 17 | 
         
             
            		...conv.messages,
         
     | 
| 18 | 
         
             
            	];
         
     | 
| 
         | 
|
| 1 | 
         
             
            import type { Conversation } from "$lib/types/Conversation";
         
     | 
| 2 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 3 | 
         
            +
            import { v4 } from "uuid";
         
     | 
| 4 | 
         | 
| 5 | 
         
             
            export function convertLegacyConversation(
         
     | 
| 6 | 
         
             
            	conv: Pick<Conversation, "messages" | "rootMessageId" | "preprompt">
         
     | 
| 
         | 
|
| 13 | 
         
             
            			content: conv.preprompt ?? "",
         
     | 
| 14 | 
         
             
            			createdAt: new Date(),
         
     | 
| 15 | 
         
             
            			updatedAt: new Date(),
         
     | 
| 16 | 
         
            +
            			id: v4(),
         
     | 
| 17 | 
         
             
            		} satisfies Message,
         
     | 
| 18 | 
         
             
            		...conv.messages,
         
     | 
| 19 | 
         
             
            	];
         
     | 
    	
        src/lib/utils/tree/isMessageId.spec.ts
    CHANGED
    
    | 
         @@ -1,9 +1,10 @@ 
     | 
|
| 1 | 
         
             
            import { describe, expect, it } from "vitest";
         
     | 
| 2 | 
         
             
            import { isMessageId } from "./isMessageId";
         
     | 
| 
         | 
|
| 3 | 
         | 
| 4 | 
         
             
            describe("isMessageId", () => {
         
     | 
| 5 | 
         
             
            	it("should return true for a valid message id", () => {
         
     | 
| 6 | 
         
            -
            		expect(isMessageId( 
     | 
| 7 | 
         
             
            	});
         
     | 
| 8 | 
         
             
            	it("should return false for an invalid message id", () => {
         
     | 
| 9 | 
         
             
            		expect(isMessageId("1-2-3-4")).toBe(false);
         
     | 
| 
         | 
|
| 1 | 
         
             
            import { describe, expect, it } from "vitest";
         
     | 
| 2 | 
         
             
            import { isMessageId } from "./isMessageId";
         
     | 
| 3 | 
         
            +
            import { v4 } from "uuid";
         
     | 
| 4 | 
         | 
| 5 | 
         
             
            describe("isMessageId", () => {
         
     | 
| 6 | 
         
             
            	it("should return true for a valid message id", () => {
         
     | 
| 7 | 
         
            +
            		expect(isMessageId(v4())).toBe(true);
         
     | 
| 8 | 
         
             
            	});
         
     | 
| 9 | 
         
             
            	it("should return false for an invalid message id", () => {
         
     | 
| 10 | 
         
             
            		expect(isMessageId("1-2-3-4")).toBe(false);
         
     | 
    	
        src/routes/conversation/+server.ts
    CHANGED
    
    | 
         @@ -7,6 +7,7 @@ import { z } from "zod"; 
     | 
|
| 7 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 8 | 
         
             
            import { models, validateModel } from "$lib/server/models";
         
     | 
| 9 | 
         
             
            import { defaultEmbeddingModel } from "$lib/server/embeddingModels";
         
     | 
| 
         | 
|
| 10 | 
         | 
| 11 | 
         
             
            export const POST: RequestHandler = async ({ locals, request }) => {
         
     | 
| 12 | 
         
             
            	const body = await request.text();
         
     | 
| 
         @@ -24,7 +25,7 @@ export const POST: RequestHandler = async ({ locals, request }) => { 
     | 
|
| 24 | 
         | 
| 25 | 
         
             
            	let messages: Message[] = [
         
     | 
| 26 | 
         
             
            		{
         
     | 
| 27 | 
         
            -
            			id:  
     | 
| 28 | 
         
             
            			from: "system",
         
     | 
| 29 | 
         
             
            			content: values.preprompt ?? "",
         
     | 
| 30 | 
         
             
            			createdAt: new Date(),
         
     | 
| 
         | 
|
| 7 | 
         
             
            import type { Message } from "$lib/types/Message";
         
     | 
| 8 | 
         
             
            import { models, validateModel } from "$lib/server/models";
         
     | 
| 9 | 
         
             
            import { defaultEmbeddingModel } from "$lib/server/embeddingModels";
         
     | 
| 10 | 
         
            +
            import { v4 } from "uuid";
         
     | 
| 11 | 
         | 
| 12 | 
         
             
            export const POST: RequestHandler = async ({ locals, request }) => {
         
     | 
| 13 | 
         
             
            	const body = await request.text();
         
     | 
| 
         | 
|
| 25 | 
         | 
| 26 | 
         
             
            	let messages: Message[] = [
         
     | 
| 27 | 
         
             
            		{
         
     | 
| 28 | 
         
            +
            			id: v4(),
         
     | 
| 29 | 
         
             
            			from: "system",
         
     | 
| 30 | 
         
             
            			content: values.preprompt ?? "",
         
     | 
| 31 | 
         
             
            			createdAt: new Date(),
         
     | 
    	
        src/routes/conversation/[id]/+page.svelte
    CHANGED
    
    | 
         @@ -18,6 +18,7 @@ 
     | 
|
| 18 | 
         
             
            	import { addChildren } from "$lib/utils/tree/addChildren";
         
     | 
| 19 | 
         
             
            	import { addSibling } from "$lib/utils/tree/addSibling";
         
     | 
| 20 | 
         
             
            	import { createConvTreeStore } from "$lib/stores/convTree";
         
     | 
| 
         | 
|
| 21 | 
         | 
| 22 | 
         
             
            	export let data;
         
     | 
| 23 | 
         | 
| 
         @@ -72,7 +73,7 @@ 
     | 
|
| 72 | 
         
             
            		isContinue = false,
         
     | 
| 73 | 
         
             
            	}: {
         
     | 
| 74 | 
         
             
            		prompt?: string;
         
     | 
| 75 | 
         
            -
            		messageId?: ReturnType<typeof  
     | 
| 76 | 
         
             
            		isRetry?: boolean;
         
     | 
| 77 | 
         
             
            		isContinue?: boolean;
         
     | 
| 78 | 
         
             
            	}): Promise<void> {
         
     | 
| 
         | 
|
| 18 | 
         
             
            	import { addChildren } from "$lib/utils/tree/addChildren";
         
     | 
| 19 | 
         
             
            	import { addSibling } from "$lib/utils/tree/addSibling";
         
     | 
| 20 | 
         
             
            	import { createConvTreeStore } from "$lib/stores/convTree";
         
     | 
| 21 | 
         
            +
            	import type { v4 } from "uuid";
         
     | 
| 22 | 
         | 
| 23 | 
         
             
            	export let data;
         
     | 
| 24 | 
         | 
| 
         | 
|
| 73 | 
         
             
            		isContinue = false,
         
     | 
| 74 | 
         
             
            	}: {
         
     | 
| 75 | 
         
             
            		prompt?: string;
         
     | 
| 76 | 
         
            +
            		messageId?: ReturnType<typeof v4>;
         
     | 
| 77 | 
         
             
            		isRetry?: boolean;
         
     | 
| 78 | 
         
             
            		isContinue?: boolean;
         
     | 
| 79 | 
         
             
            	}): Promise<void> {
         
     | 
    	
        vite.config.ts
    CHANGED
    
    | 
         @@ -26,6 +26,6 @@ export default defineConfig({ 
     | 
|
| 26 | 
         
             
            		loadTTFAsArrayBuffer(),
         
     | 
| 27 | 
         
             
            	],
         
     | 
| 28 | 
         
             
            	optimizeDeps: {
         
     | 
| 29 | 
         
            -
            		include: ["browser-image-resizer"],
         
     | 
| 30 | 
         
             
            	},
         
     | 
| 31 | 
         
             
            });
         
     | 
| 
         | 
|
| 26 | 
         
             
            		loadTTFAsArrayBuffer(),
         
     | 
| 27 | 
         
             
            	],
         
     | 
| 28 | 
         
             
            	optimizeDeps: {
         
     | 
| 29 | 
         
            +
            		include: ["browser-image-resizer", "uuid"],
         
     | 
| 30 | 
         
             
            	},
         
     | 
| 31 | 
         
             
            });
         
     |