diff --git a/src/components/ModelPicker.tsx b/src/components/ModelPicker.tsx index 24e8ff3..5266005 100644 --- a/src/components/ModelPicker.tsx +++ b/src/components/ModelPicker.tsx @@ -61,14 +61,16 @@ export function ModelPicker({ const getModelDisplayName = () => { if (selectedModel.provider === "ollama") { return ( - ollamaModels.find((model: LocalModel) => model.modelName === selectedModel.name) - ?.displayName || selectedModel.name + ollamaModels.find( + (model: LocalModel) => model.modelName === selectedModel.name + )?.displayName || selectedModel.name ); } if (selectedModel.provider === "lmstudio") { return ( - lmStudioModels.find((model: LocalModel) => model.modelName === selectedModel.name) - ?.displayName || selectedModel.name // Fallback to path if not found + lmStudioModels.find( + (model: LocalModel) => model.modelName === selectedModel.name + )?.displayName || selectedModel.name // Fallback to path if not found ); } @@ -92,8 +94,10 @@ export function ModelPicker({ ); // Determine availability of local models - const hasOllamaModels = !ollamaLoading && !ollamaError && ollamaModels.length > 0; - const hasLMStudioModels = !lmStudioLoading && !lmStudioError && lmStudioModels.length > 0; + const hasOllamaModels = + !ollamaLoading && !ollamaError && ollamaModels.length > 0; + const hasLMStudioModels = + !lmStudioLoading && !lmStudioError && lmStudioModels.length > 0; return ( @@ -110,10 +114,11 @@ export function ModelPicker({ - {/* Increased width slightly */} + + {" "} + {/* Increased width slightly */} Cloud Models - {/* Cloud models */} {cloudModels.map((model) => ( @@ -151,177 +156,183 @@ export function ModelPicker({ {model.description} ))} - - - {/* Ollama Models SubMenu */} + {/* Local Models Parent SubMenu */} - +
- Local models (Ollama) - {ollamaLoading ? ( - - Loading... - - ) : ollamaError ? ( - - Error loading - - ): !hasOllamaModels ? ( - - None available - - ) : ( - - {ollamaModels.length} models - - )} + Local models + + LM Studio, Ollama +
- Ollama Models - - - {ollamaLoading && ollamaModels.length === 0 ? ( // Show loading only if no models are loaded yet -
- Loading models... -
- ) : ollamaError ? ( -
-
- Error loading models - - Is Ollama running? - -
-
- ) : !hasOllamaModels ? ( -
-
- No local models found - - Ensure Ollama is running and models are pulled. - -
-
- ) : ( - ollamaModels.map((model: LocalModel) => ( - { - onModelSelect({ - name: model.modelName, - provider: "ollama", - }); - setOpen(false); - }} - > -
- {model.displayName} - - {model.modelName} + {/* Ollama Models SubMenu */} + + +
+ Ollama + {ollamaLoading ? ( + + Loading... + ) : ollamaError ? ( + Error loading + ) : !hasOllamaModels ? ( + + None available + + ) : ( + + {ollamaModels.length} models + + )} +
+
+ + Ollama Models + + + {ollamaLoading && ollamaModels.length === 0 ? ( // Show loading only if no models are loaded yet +
+ Loading models...
- - )) - )} + ) : ollamaError ? ( +
+
+ Error loading models + + Is Ollama running? + +
+
+ ) : !hasOllamaModels ? ( +
+
+ No local models found + + Ensure Ollama is running and models are pulled. + +
+
+ ) : ( + ollamaModels.map((model: LocalModel) => ( + { + onModelSelect({ + name: model.modelName, + provider: "ollama", + }); + setOpen(false); + }} + > +
+ {model.displayName} + + {model.modelName} + +
+
+ )) + )} +
+
+ + {/* LM Studio Models SubMenu */} + + +
+ LM Studio + {lmStudioLoading ? ( + + Loading... + + ) : lmStudioError ? ( + Error loading + ) : !hasLMStudioModels ? ( + + None available + + ) : ( + + {lmStudioModels.length} models + + )} +
+
+ + LM Studio Models + + + {lmStudioLoading && lmStudioModels.length === 0 ? ( // Show loading only if no models are loaded yet +
+ Loading models... +
+ ) : lmStudioError ? ( +
+
+ Error loading models + + {lmStudioError.message} {/* Display specific error */} + +
+
+ ) : !hasLMStudioModels ? ( +
+
+ No loaded models found + + Ensure LM Studio is running and models are loaded. + +
+
+ ) : ( + lmStudioModels.map((model: LocalModel) => ( + { + onModelSelect({ + name: model.modelName, + provider: "lmstudio", + }); + setOpen(false); + }} + > +
+ {/* Display the user-friendly name */} + {model.displayName} + {/* Show the path as secondary info */} + + {model.modelName} + +
+
+ )) + )} +
+
- - {/* LM Studio Models SubMenu */} - - -
- Local models (LM Studio) - {lmStudioLoading ? ( - - Loading... - - ) : lmStudioError ? ( - - Error loading - - ) : !hasLMStudioModels ? ( - - None available - - ) : ( - - {lmStudioModels.length} models - - )} -
-
- - LM Studio Models - - - {lmStudioLoading && lmStudioModels.length === 0 ? ( // Show loading only if no models are loaded yet -
- Loading models... -
- ) : lmStudioError ? ( -
-
- Error loading models - - {lmStudioError.message} {/* Display specific error */} - -
-
- ) : !hasLMStudioModels ? ( -
-
- No loaded models found - - Ensure LM Studio is running and models are loaded. - -
-
- ) : ( - lmStudioModels.map((model: LocalModel) => ( - { - onModelSelect({ - name: model.modelName, - provider: "lmstudio", - }); - setOpen(false); - }} - > -
- {/* Display the user-friendly name */} - {model.displayName} - {/* Show the path as secondary info */} - - {model.modelName} - -
-
- )) - )} -
-
- );