'use client' import { MenubarCheckboxItem, MenubarSub, MenubarSubContent, MenubarSubTrigger, } from '@/components/ui/menubar' import { TagColor } from '@/components/tags/types' import { Tag } from '@/components/tags/Tag' import { ComputeProvider } from '@aitube/clapper-services' import { availableModelsForVoiceGeneration } from '@/components/settings/constants' import { useSettings } from '@/services/settings' import { ComputeProviderName } from '@/components/core/providers/ComputeProviderName' import { ComputeProviderLogo } from '@/components/core/providers/ComputeProviderLogo' import { cn } from '@/lib/utils' import { hasNoPublicAPI } from './hasNoPublicAPI' import { formatProvider } from './formatProvider' export function VoiceGenerationModelList() { const provider = useSettings((s) => s.voiceProvider) const setProvider = useSettings((s) => s.setVoiceProvider) const model = useSettings((s) => s.voiceGenerationModel) const setModel = useSettings((s) => s.setVoiceGenerationModel) const availableProviders = Object.keys( availableModelsForVoiceGeneration ) as ComputeProvider[] if (!availableProviders) { return null } return ( generate voice
{model || 'None'}
{availableProviders.map((p) => ( {p} {(availableModelsForVoiceGeneration[p] || []).map((m) => ( { if (hasNoPublicAPI(m)) { e.stopPropagation() e.preventDefault() return false } setProvider(p) setModel(m) e.stopPropagation() e.preventDefault() return false }} > {m} ))} ))}
) }