From 11f4f20120b2466757ca0c237cf08bb4691abfb7 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 20 Dec 2024 16:34:54 +0700 Subject: [PATCH 01/17] fix: thread error handling --- web/containers/Providers/ModelHandler.tsx | 10 +++------- web/hooks/useDeleteThread.ts | 7 +++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/web/containers/Providers/ModelHandler.tsx b/web/containers/Providers/ModelHandler.tsx index ad7f5c974f..3a6c19e0dd 100644 --- a/web/containers/Providers/ModelHandler.tsx +++ b/web/containers/Providers/ModelHandler.tsx @@ -302,15 +302,10 @@ export default function ModelHandler() { const generateThreadTitle = (message: ThreadMessage, thread: Thread) => { // If this is the first ever prompt in the thread - if ( - (thread.title ?? thread.metadata?.title)?.trim() !== defaultThreadTitle - ) { + if ((thread.title ?? thread.metadata?.title)?.trim() !== defaultThreadTitle) return - } - if (!activeModelRef.current) { - return - } + if (!activeModelRef.current) return // Check model engine; we don't want to generate a title when it's not a local engine. remote model using first promp if (!isLocalEngine(activeModelRef.current?.engine as InferenceEngine)) { @@ -332,6 +327,7 @@ export default function ModelHandler() { ...updatedThread, }) }) + .catch(console.error) } // This is the first time message comes in on a new thread diff --git a/web/hooks/useDeleteThread.ts b/web/hooks/useDeleteThread.ts index 7b98a4ea5c..f69ccd47ea 100644 --- a/web/hooks/useDeleteThread.ts +++ b/web/hooks/useDeleteThread.ts @@ -37,9 +37,16 @@ export default function useDeleteThread() { async (threadId: string) => { const thread = threads.find((c) => c.id === threadId) if (!thread) return + const availableThreads = threads.filter((c) => c.id !== threadId) + setThreads(availableThreads) + + // delete the thread state + deleteThreadState(threadId) + const assistantInfo = await extensionManager .get(ExtensionTypeEnum.Conversational) ?.getThreadAssistant(thread.id) + .catch(console.error) if (!assistantInfo) return const model = models.find((c) => c.id === assistantInfo?.model?.id) From 4e43f9798d5415c9b1a9cdb5706300fa52cad844 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 20 Dec 2024 17:55:23 +0700 Subject: [PATCH 02/17] fix: fetch threads and messages without limiting (#4304) * fix: threads and messages are cutoff * fix: threads sorting * chore: bump cortex latest release and app version --- extensions/conversational-extension/src/index.ts | 6 +++--- extensions/inference-cortex-extension/bin/version.txt | 2 +- extensions/model-extension/src/cortex.ts | 2 +- web/containers/Providers/ModelHandler.tsx | 1 + web/hooks/useCreateNewThread.ts | 1 + web/hooks/useThreads.ts | 7 ++++++- web/package.json | 2 +- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/extensions/conversational-extension/src/index.ts b/extensions/conversational-extension/src/index.ts index b3530e5d53..854773556f 100644 --- a/extensions/conversational-extension/src/index.ts +++ b/extensions/conversational-extension/src/index.ts @@ -40,7 +40,7 @@ export default class CortexConversationalExtension extends ConversationalExtensi async listThreads(): Promise { return this.queue.add(() => ky - .get(`${API_URL}/v1/threads`) + .get(`${API_URL}/v1/threads?limit=-1`) .json() .then((e) => e.data) ) as Promise @@ -133,7 +133,7 @@ export default class CortexConversationalExtension extends ConversationalExtensi async listMessages(threadId: string): Promise { return this.queue.add(() => ky - .get(`${API_URL}/v1/threads/${threadId}/messages?order=asc`) + .get(`${API_URL}/v1/threads/${threadId}/messages?order=asc&limit=-1`) .json() .then((e) => e.data) ) as Promise @@ -147,7 +147,7 @@ export default class CortexConversationalExtension extends ConversationalExtensi */ async getThreadAssistant(threadId: string): Promise { return this.queue.add(() => - ky.get(`${API_URL}/v1/assistants/${threadId}`).json() + ky.get(`${API_URL}/v1/assistants/${threadId}?limit=-1`).json() ) as Promise } /** diff --git a/extensions/inference-cortex-extension/bin/version.txt b/extensions/inference-cortex-extension/bin/version.txt index cf13dd42bd..90a27f9cea 100644 --- a/extensions/inference-cortex-extension/bin/version.txt +++ b/extensions/inference-cortex-extension/bin/version.txt @@ -1 +1 @@ -1.0.5-rc2 +1.0.5 diff --git a/extensions/model-extension/src/cortex.ts b/extensions/model-extension/src/cortex.ts index 26316fbbc0..ca5763962d 100644 --- a/extensions/model-extension/src/cortex.ts +++ b/extensions/model-extension/src/cortex.ts @@ -53,7 +53,7 @@ export class CortexAPI implements ICortexAPI { */ getModels(): Promise { return this.queue - .add(() => ky.get(`${API_URL}/v1/models`).json()) + .add(() => ky.get(`${API_URL}/v1/models?limit=-1`).json()) .then((e) => typeof e === 'object' ? e.data.map((e) => this.transformModel(e)) : [] ) diff --git a/web/containers/Providers/ModelHandler.tsx b/web/containers/Providers/ModelHandler.tsx index 3a6c19e0dd..d838df3246 100644 --- a/web/containers/Providers/ModelHandler.tsx +++ b/web/containers/Providers/ModelHandler.tsx @@ -244,6 +244,7 @@ export default function ModelHandler() { const metadata = { ...thread.metadata, ...(messageContent && { lastMessage: messageContent }), + updated_at: Date.now(), } updateThread({ diff --git a/web/hooks/useCreateNewThread.ts b/web/hooks/useCreateNewThread.ts index c4c77d0a4f..1e1f7a8492 100644 --- a/web/hooks/useCreateNewThread.ts +++ b/web/hooks/useCreateNewThread.ts @@ -153,6 +153,7 @@ export const useCreateNewThread = () => { updated: createdAt, metadata: { title: 'New Thread', + updated_at: Date.now(), }, } diff --git a/web/hooks/useThreads.ts b/web/hooks/useThreads.ts index 1e3b428a9f..00ad354571 100644 --- a/web/hooks/useThreads.ts +++ b/web/hooks/useThreads.ts @@ -26,7 +26,12 @@ const useThreads = () => { useEffect(() => { const getThreads = async () => { - const localThreads = await getLocalThreads() + const localThreads = (await getLocalThreads()).sort((a, b) => { + return ((a.metadata?.updated_at as number) ?? 0) > + ((b.metadata?.updated_at as number) ?? 0) + ? -1 + : 1 + }) const localThreadStates: Record = {} const threadModelParams: Record = {} diff --git a/web/package.json b/web/package.json index db57facb51..b0411e7795 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "@janhq/web", - "version": "0.5.11", + "version": "0.5.12", "private": true, "homepage": "./", "scripts": { From af84a3a8d9e9ac031cb384194df68733e9e8a021 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Fri, 20 Dec 2024 23:39:08 +0800 Subject: [PATCH 03/17] fix: scroll bottom issue (#4308) --- web/containers/ModelDropdown/index.tsx | 4 +- .../ChatBody/EmptyThread/index.tsx | 4 +- .../ThreadCenterPanel/ChatBody/index.tsx | 66 ++++++++++++------- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/web/containers/ModelDropdown/index.tsx b/web/containers/ModelDropdown/index.tsx index 09240845d3..f5ad55ad51 100644 --- a/web/containers/ModelDropdown/index.tsx +++ b/web/containers/ModelDropdown/index.tsx @@ -378,14 +378,14 @@ const ModelDropdown = ({ !selectedModel && 'text-[hsla(var(--text-tertiary))]' )} > - {selectedModel?.name || 'Select Model'} + {selectedModel?.name || 'Select a model'} ) : ( { {showOnboardingStep ? ( <> -

- {`You don't have a local model yet.`} -

+

{`You don't have any model`}