diff --git a/studio/frontend/src/features/chat/chat-page.tsx b/studio/frontend/src/features/chat/chat-page.tsx
index 1184183088..986a3ee642 100644
--- a/studio/frontend/src/features/chat/chat-page.tsx
+++ b/studio/frontend/src/features/chat/chat-page.tsx
@@ -218,9 +218,9 @@ function InlineSidebar({
className={cn(
"bg-sidebar text-sidebar-foreground h-full overflow-hidden rounded-2xl corner-squircle transition-[width] duration-200 ease-linear",
!collapsed &&
- (side === "left"
- ? "border-r border-0 border-sidebar-border"
- : "border-l border-0 border-sidebar-border"),
+ (side === "left"
+ ? "border-r border-0 border-sidebar-border"
+ : "border-l border-0 border-sidebar-border"),
collapsed ? "w-0" : "w-(--sidebar-width)",
)}
>
@@ -301,9 +301,18 @@ export function ChatPage(): ReactElement {
const handleCheckpointChange = useCallback(
(value: string, meta?: { isLora: boolean }) => {
- void selectModel({ id: value, isLora: meta?.isLora });
+ const currentCheckpoint =
+ useChatRuntimeStore.getState().params.checkpoint;
+ if (!value || value === currentCheckpoint) return;
+ setView({ mode: "single", newThreadNonce: crypto.randomUUID() });
+ void (async () => {
+ if (currentCheckpoint) {
+ await ejectModel();
+ }
+ await selectModel({ id: value, isLora: meta?.isLora });
+ })();
},
- [selectModel],
+ [selectModel, ejectModel],
);
const handleEject = useCallback(() => {
void ejectModel();
@@ -475,99 +484,99 @@ export function ChatPage(): ReactElement {
return (
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
- {loadingModel ? (
-
-
-
- Downloading model…
-
-
- ) : null}
-
- {modelsError && (
-
- {modelsError}
+
+
+
+
+
+
+ {loadingModel ? (
+
+
+
+ Downloading model…
+
+
+ ) : null}
+ {modelsError && (
+
+ {modelsError}
+
+ )}
+
+
+
+
+ {view.mode === "single" ? (
+
+ ) : (
+
)}
-
-
- {view.mode === "single" ? (
-
- ) : (
-
- )}
-
-
-
-
+
+
);
}
diff --git a/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts b/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts
index 961967cc9c..3dca94d7f5 100644
--- a/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts
+++ b/studio/frontend/src/features/chat/hooks/use-chat-model-runtime.ts
@@ -165,8 +165,10 @@ export function useChatModelRuntime() {
setLoadingModel({ id: modelId, displayName });
try {
async function performLoad(): Promise
{
- if (params.checkpoint) {
- await unloadModel({ model_path: params.checkpoint });
+ const currentCheckpoint =
+ useChatRuntimeStore.getState().params.checkpoint;
+ if (currentCheckpoint) {
+ await unloadModel({ model_path: currentCheckpoint });
}
const loadResponse = await loadModel({