diff --git a/src/common/components/forms/useLLMSelect.tsx b/src/common/components/forms/useLLMSelect.tsx index e7bc92966..e1ae5d8f9 100644 --- a/src/common/components/forms/useLLMSelect.tsx +++ b/src/common/components/forms/useLLMSelect.tsx @@ -8,7 +8,7 @@ import type { IModelVendor } from '~/modules/llms/vendors/IModelVendor'; import { findModelVendor } from '~/modules/llms/vendors/vendors.registry'; import type { DModelDomainId } from '~/common/stores/llms/model.domains.types'; -import { DLLM, DLLMId, LLM_IF_OAI_Reasoning, LLM_IF_Outputs_Image, LLM_IF_Tools_WebSearch } from '~/common/stores/llms/llms.types'; +import { DLLM, DLLMId, LLM_IF_OAI_Reasoning, LLM_IF_Outputs_Audio, LLM_IF_Outputs_Image, LLM_IF_Tools_WebSearch } from '~/common/stores/llms/llms.types'; import { TooltipOutlined } from '~/common/components/TooltipOutlined'; import { getChatLLMId, llmsStoreActions } from '~/common/stores/llms/store-llms'; import { optimaOpenModels } from '~/common/layout/optima/useOptima'; @@ -161,6 +161,8 @@ export function useLLMSelect( features += '🧠 '; // can reason if (llm.interfaces.includes(LLM_IF_Tools_WebSearch)) features += '🌐 '; // can web search + if (llm.interfaces.includes(LLM_IF_Outputs_Audio)) + features += '🔊 '; // can output audio if (llm.interfaces.includes(LLM_IF_Outputs_Image)) features += '🖼️ '; // can draw images } diff --git a/src/modules/llms/models-modal/ModelsList.tsx b/src/modules/llms/models-modal/ModelsList.tsx index 35e5c8c3e..9372f4f02 100644 --- a/src/modules/llms/models-modal/ModelsList.tsx +++ b/src/modules/llms/models-modal/ModelsList.tsx @@ -9,7 +9,7 @@ import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined import VisibilityOutlinedIcon from '@mui/icons-material/VisibilityOutlined'; import type { DModelsServiceId } from '~/common/stores/llms/llms.service.types'; -import { DLLM, DLLMId, LLM_IF_ANT_PromptCaching, LLM_IF_GEM_CodeExecution, LLM_IF_OAI_Chat, LLM_IF_OAI_Complete, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_PromptCaching, LLM_IF_OAI_Realtime, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Vision, LLM_IF_Outputs_Image, LLM_IF_Tools_WebSearch } from '~/common/stores/llms/llms.types'; +import { DLLM, DLLMId, LLM_IF_ANT_PromptCaching, LLM_IF_GEM_CodeExecution, LLM_IF_OAI_Chat, LLM_IF_OAI_Complete, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_PromptCaching, LLM_IF_OAI_Realtime, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Vision, LLM_IF_Outputs_Audio, LLM_IF_Outputs_Image, LLM_IF_Tools_WebSearch } from '~/common/stores/llms/llms.types'; import { GoodTooltip } from '~/common/components/GoodTooltip'; import { PhGearSixIcon } from '~/common/components/icons/phosphor/PhGearSixIcon'; import { findModelsServiceOrNull, llmsStoreActions } from '~/common/stores/llms/store-llms'; @@ -192,6 +192,7 @@ function ModelItem(props: { {/* Features Chips - sync with `useLLMSelect.tsx` */} {llm.interfaces.includes(LLM_IF_OAI_Reasoning) && isNotSymlink && 🧠} {llm.interfaces.includes(LLM_IF_Tools_WebSearch) && isNotSymlink && 🌐} + {llm.interfaces.includes(LLM_IF_Outputs_Audio) && isNotSymlink && 🔊️} {llm.interfaces.includes(LLM_IF_Outputs_Image) && isNotSymlink && 🖼️} {seemsFree && isNotSymlink && free}