Fix model picker UX (#145)
This commit is contained in:
@@ -22,6 +22,7 @@ import { useLocalLMSModels } from "@/hooks/useLMStudioModels";
|
|||||||
import { useLanguageModelsByProviders } from "@/hooks/useLanguageModelsByProviders";
|
import { useLanguageModelsByProviders } from "@/hooks/useLanguageModelsByProviders";
|
||||||
import { ChevronDown } from "lucide-react";
|
import { ChevronDown } from "lucide-react";
|
||||||
import { LocalModel } from "@/ipc/ipc_types";
|
import { LocalModel } from "@/ipc/ipc_types";
|
||||||
|
import { useLanguageModelProviders } from "@/hooks/useLanguageModelProviders";
|
||||||
interface ModelPickerProps {
|
interface ModelPickerProps {
|
||||||
selectedModel: LargeLanguageModel;
|
selectedModel: LargeLanguageModel;
|
||||||
onModelSelect: (model: LargeLanguageModel) => void;
|
onModelSelect: (model: LargeLanguageModel) => void;
|
||||||
@@ -34,9 +35,13 @@ export function ModelPicker({
|
|||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
|
|
||||||
// Cloud models from providers
|
// Cloud models from providers
|
||||||
const { data: modelsByProviders, isLoading: providersLoading } =
|
const { data: modelsByProviders, isLoading: modelsByProvidersLoading } =
|
||||||
useLanguageModelsByProviders();
|
useLanguageModelsByProviders();
|
||||||
|
|
||||||
|
const { data: providers, isLoading: providersLoading } =
|
||||||
|
useLanguageModelProviders();
|
||||||
|
|
||||||
|
const loading = modelsByProvidersLoading || providersLoading;
|
||||||
// Ollama Models Hook
|
// Ollama Models Hook
|
||||||
const {
|
const {
|
||||||
models: ollamaModels,
|
models: ollamaModels,
|
||||||
@@ -96,7 +101,7 @@ export function ModelPicker({
|
|||||||
|
|
||||||
// Get auto provider models (if any)
|
// Get auto provider models (if any)
|
||||||
const autoModels =
|
const autoModels =
|
||||||
!providersLoading && modelsByProviders && modelsByProviders["auto"]
|
!loading && modelsByProviders && modelsByProviders["auto"]
|
||||||
? modelsByProviders["auto"]
|
? modelsByProviders["auto"]
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
@@ -126,7 +131,7 @@ export function ModelPicker({
|
|||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
|
|
||||||
{/* Cloud models - loading state */}
|
{/* Cloud models - loading state */}
|
||||||
{providersLoading ? (
|
{loading ? (
|
||||||
<div className="text-xs text-center py-2 text-muted-foreground">
|
<div className="text-xs text-center py-2 text-muted-foreground">
|
||||||
Loading models...
|
Loading models...
|
||||||
</div>
|
</div>
|
||||||
@@ -190,18 +195,23 @@ export function ModelPicker({
|
|||||||
// Skip auto provider as it's already handled
|
// Skip auto provider as it's already handled
|
||||||
if (providerId === "auto") return null;
|
if (providerId === "auto") return null;
|
||||||
|
|
||||||
|
const provider = providers?.find((p) => p.id === providerId);
|
||||||
|
if (models.length === 0) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DropdownMenuSub key={providerId}>
|
<DropdownMenuSub key={providerId}>
|
||||||
<DropdownMenuSubTrigger className="w-full font-normal">
|
<DropdownMenuSubTrigger className="w-full font-normal">
|
||||||
<div className="flex flex-col items-start">
|
<div className="flex flex-col items-start">
|
||||||
<span>{providerId}</span>
|
<span>{provider?.name}</span>
|
||||||
<span className="text-xs text-muted-foreground">
|
<span className="text-xs text-muted-foreground">
|
||||||
{models.length} models
|
{models.length} models
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</DropdownMenuSubTrigger>
|
</DropdownMenuSubTrigger>
|
||||||
<DropdownMenuSubContent className="w-56">
|
<DropdownMenuSubContent className="w-56">
|
||||||
<DropdownMenuLabel>{providerId} Models</DropdownMenuLabel>
|
<DropdownMenuLabel>
|
||||||
|
{provider?.name} Models
|
||||||
|
</DropdownMenuLabel>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
{models.map((model) => (
|
{models.map((model) => (
|
||||||
<Tooltip key={`${providerId}-${model.apiName}`}>
|
<Tooltip key={`${providerId}-${model.apiName}`}>
|
||||||
|
|||||||
Reference in New Issue
Block a user