axonhub / frontend /src /components /ai-elements /model-selector.tsx
llzai's picture
Upload 1793 files
9853396 verified
import type { ComponentProps } from 'react';
import { cn } from '@/lib/utils';
import {
Command,
CommandDialog,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
CommandSeparator,
CommandShortcut,
} from '@/components/ui/command';
import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog';
export type ModelSelectorProps = ComponentProps<typeof Dialog>;
export const ModelSelector = (props: ModelSelectorProps) => <Dialog {...props} />;
export type ModelSelectorTriggerProps = ComponentProps<typeof DialogTrigger>;
export const ModelSelectorTrigger = (props: ModelSelectorTriggerProps) => <DialogTrigger {...props} />;
export type ModelSelectorContentProps = ComponentProps<typeof DialogContent>;
export const ModelSelectorContent = ({ className, children, ...props }: ModelSelectorContentProps) => (
<DialogContent className={cn('p-0', className)} {...props}>
<Command className='**:data-[slot=command-input-wrapper]:h-auto'>{children}</Command>
</DialogContent>
);
export type ModelSelectorDialogProps = ComponentProps<typeof CommandDialog>;
export const ModelSelectorDialog = (props: ModelSelectorDialogProps) => <CommandDialog {...props} />;
export type ModelSelectorInputProps = ComponentProps<typeof CommandInput>;
export const ModelSelectorInput = ({ className, ...props }: ModelSelectorInputProps) => (
<CommandInput className={cn('h-auto py-3.5', className)} {...props} />
);
export type ModelSelectorListProps = ComponentProps<typeof CommandList>;
export const ModelSelectorList = (props: ModelSelectorListProps) => <CommandList {...props} />;
export type ModelSelectorEmptyProps = ComponentProps<typeof CommandEmpty>;
export const ModelSelectorEmpty = (props: ModelSelectorEmptyProps) => <CommandEmpty {...props} />;
export type ModelSelectorGroupProps = ComponentProps<typeof CommandGroup>;
export const ModelSelectorGroup = (props: ModelSelectorGroupProps) => <CommandGroup {...props} />;
export type ModelSelectorItemProps = ComponentProps<typeof CommandItem>;
export const ModelSelectorItem = (props: ModelSelectorItemProps) => <CommandItem {...props} />;
export type ModelSelectorShortcutProps = ComponentProps<typeof CommandShortcut>;
export const ModelSelectorShortcut = (props: ModelSelectorShortcutProps) => <CommandShortcut {...props} />;
export type ModelSelectorSeparatorProps = ComponentProps<typeof CommandSeparator>;
export const ModelSelectorSeparator = (props: ModelSelectorSeparatorProps) => <CommandSeparator {...props} />;
export type ModelSelectorLogoProps = Omit<ComponentProps<'img'>, 'src' | 'alt'> & {
provider:
| 'moonshotai-cn'
| 'lucidquery'
| 'moonshotai'
| 'zai-coding-plan'
| 'alibaba'
| 'xai'
| 'vultr'
| 'nvidia'
| 'upstage'
| 'groq'
| 'github-copilot'
| 'mistral'
| 'vercel'
| 'nebius'
| 'deepseek'
| 'alibaba-cn'
| 'google-vertex-anthropic'
| 'venice'
| 'chutes'
| 'cortecs'
| 'github-models'
| 'togetherai'
| 'azure'
| 'baseten'
| 'huggingface'
| 'opencode'
| 'fastrouter'
| 'google'
| 'google-vertex'
| 'cloudflare-workers-ai'
| 'inception'
| 'wandb'
| 'openai'
| 'zhipuai-coding-plan'
| 'perplexity'
| 'openrouter'
| 'zenmux'
| 'v0'
| 'iflowcn'
| 'synthetic'
| 'deepinfra'
| 'zhipuai'
| 'submodel'
| 'zai'
| 'inference'
| 'requesty'
| 'morph'
| 'lmstudio'
| 'anthropic'
| 'aihubmix'
| 'fireworks-ai'
| 'modelscope'
| 'llama'
| 'scaleway'
| 'amazon-bedrock'
| 'cerebras'
| (string & {});
};
export const ModelSelectorLogo = ({ provider, className, ...props }: ModelSelectorLogoProps) => (
<img
{...props}
alt={`${provider} logo`}
className={cn('size-3', className)}
height={12}
src={`https://models.dev/logos/${provider}.svg`}
width={12}
/>
);
export type ModelSelectorLogoGroupProps = ComponentProps<'div'>;
export const ModelSelectorLogoGroup = ({ className, ...props }: ModelSelectorLogoGroupProps) => (
<div
className={cn(
'[&>img]:bg-background [&>img]:ring-border flex shrink-0 items-center -space-x-1 [&>img]:rounded-full [&>img]:p-px [&>img]:ring-1',
className
)}
{...props}
/>
);
export type ModelSelectorNameProps = ComponentProps<'span'>;
export const ModelSelectorName = ({ className, ...props }: ModelSelectorNameProps) => (
<span className={cn('flex-1 truncate text-left', className)} {...props} />
);