Hugging Face ha anunciado AnySpeechRecognizer y AnyDecisionModel, dos paquetes Swift abiertos que facilitan la integración de modelos de inteligencia artificial en aplicaciones. Ambos permiten acceder a modelos abiertos del Hugging Face Hub y ejecutarlos directamente en el dispositivo, ampliando la línea de herramientas que incluye AnyLanguageModel y swift-huggingface 1.x.
Los paquetes abordan dos necesidades diferentes. AnySpeechRecognizer permite convertir audio en texto, utilizar distintos motores de reconocimiento y distinguir hablantes. AnyDecisionModel se centra en responder preguntas cerradas, seleccionar opciones y asignar puntuaciones mediante probabilidades calculadas por modelos de IA.
El anuncio se publicó el 29 de octubre de 2026 en el blog oficial de Hugging Face.
AnySpeechRecognizer: una interfaz para varios motores de transcripción
AnySpeechRecognizer implementa la API SpeechAnalyzer introducida por Apple en macOS 26 e iOS 26. Esta interfaz reúne componentes como SpeechTranscriber, DictationTranscriber, SpeechDetector y AssetInventory.
La diferencia principal es que permite seleccionar el modelo de reconocimiento de voz sin abandonar la API compartida.
El motor predeterminado sigue siendo el de Apple, pero también es posible utilizar modelos ejecutados localmente mediante Core ML:
- NVIDIA Parakeet v3.
- Parakeet Ultra de Moondream.
- Parakeet Unified, especializado en inglés.
- Alibaba Qwen3-ASR.
Para aplicaciones que ya utilizan la API compartida, el cambio puede limitarse a sustituir la importación de Speech por AnySpeechRecognizer.
La selección de Parakeet se realiza al crear el transcriptor. Por ejemplo:
SpeechTranscriber(model: ParakeetSpeechModel(variant: .v3))
Parakeet y Qwen3-ASR: capacidades y diferencias
Parakeet v3 reconoce 25 idiomas europeos e identifica automáticamente el idioma utilizado.
Qwen3-ASR, desarrollado por Alibaba, está disponible en variantes de 0.6B y 1.7B. Admite 30 idiomas y 22 dialectos chinos, con cobertura que incluye mandarín, cantonés, japonés y coreano.
Qwen3-ASR procesa segmentos de hasta 40 segundos y produce un resultado definitivo para cada uno. Su funcionamiento prescinde de resultados intermedios cambiantes, tiempos por palabra y valores de confianza.
Este modelo utiliza la GPU y presenta una velocidad de procesamiento menor, por lo que se adapta mejor a la transcripción de archivos que al reconocimiento en directo.
| Característica | Parakeet v3 | Qwen3-ASR |
|---|---|---|
| Cobertura lingüística | 25 idiomas europeos | 30 idiomas y 22 dialectos chinos |
| Identificación automática del idioma | Sí | Sí, o se puede fijar un idioma |
| Variantes indicadas | v3 | 0.6B y 1.7B |
| Procesamiento por segmento | — | Hasta 40 segundos |
| Uso destacado | Archivos y procesamiento en vivo | Transcripción de archivos |
Identificación de hablantes con SpeakerDiarizer
AnySpeechRecognizer también incorpora diarización de hablantes, una capacidad que permite determinar quién interviene en una conversación.
El componente SpeakerDiarizer utiliza NVIDIA Streaming Sortformer, ejecutado mediante Core ML, para identificar hasta cuatro hablantes, incluso cuando varias personas hablan simultáneamente.
A su vez, SpeakerTimeline asigna cada palabra con información temporal al hablante correspondiente.
Esta funcionalidad amplía las posibilidades de SpeechAnalyzer, ya que el framework de Apple no incorpora diarización de hablantes.
Tamaños y licencias de los modelos
Los modelos convertidos a Core ML están publicados en Hugging Face Hub con sus respectivas licencias. Sus descargas se realizan cuando una aplicación solicita utilizarlos.
| Modelo o componente | Tamaño aproximado de descarga | Licencia |
|---|---|---|
| Parakeet v3 | 600 MB | CC BY 4.0 |
| Parakeet Ultra | 600 MB | CC BY 4.0 |
| Codificador para procesamiento en vivo de Parakeet | 590 MB adicionales | — |
| Parakeet Unified | 600 MB | NVIDIA Open Model License |
| Qwen3-ASR | 0,9-2,4 GB | Apache 2.0 |
| Sortformer | 250 MB | CC BY 4.0 / NVIDIA Open Model License |
Los runtimes de Parakeet y Sortformer requieren Apple silicon.
Rendimiento de transcripción: Parakeet frente al motor de Apple
Hugging Face presenta mediciones obtenidas con hear, una herramienta de línea de comandos que permite transcribir archivos locales, identificar hablantes y evaluar resultados.
Las mediciones se realizaron en un Mac Studio con chip M4 Max y macOS 27.0.1, utilizando grabaciones de LibriSpeech de entre tres y ocho minutos.
La métrica utilizada es la tasa de error de palabra, o WER, que expresa el porcentaje de errores durante la transcripción.
Comparación de tasas de error
| Motor | Archivo test-clean | Archivo test-other | En vivo test-clean | En vivo test-other |
|---|---|---|---|---|
| Parakeet v3 | 1,55% | 2,78% | 4,73% | 4,29% |
| Parakeet Ultra | 1,66% | 2,55% | 2,65% | 3,28% |
| Parakeet Unified | 1,43% | 2,19% | 1,45% | 2,42% |
| Transcriptor de Apple | 2,12% | 3,97% | — | — |
En el procesamiento de archivos, Parakeet Unified registra la menor tasa de error de los modelos comparados, con un 1,43% en test-clean y un 2,19% en test-other.
También obtiene los valores más bajos en las mediciones en vivo de Parakeet, con un 1,45% y un 2,42%, respectivamente.
Velocidad, memoria y conversaciones con solapamientos
Parakeet puede procesar una hora de audio en aproximadamente 20 a 40 segundos cuando trabaja con archivos.
En la modalidad de procesamiento en vivo, el tiempo indicado para una hora de audio es de entre 1,5 y 2,5 minutos.
| Modalidad | Tiempo para procesar una hora de audio |
|---|---|
| Parakeet desde archivo | 20-40 segundos |
| Parakeet en vivo | 1,5-2,5 minutos |
Una vez compilado el modelo en Core ML, el consumo de memoria comunicado es de aproximadamente 100 MB.
El comportamiento cambia en conversaciones con intervenciones simultáneas. En grabaciones del conjunto AMI que contienen solapamientos entre hablantes, todos los motores analizados registraron tasas de error superiores al 23%.
La herramienta hear
El paquete incluye hear, una utilidad de línea de comandos destinada a la transcripción de archivos, el etiquetado de hablantes y la evaluación de resultados.
Cada comando requiere seleccionar explícitamente un backend mediante una de estas opciones:
- --backend apple
- --backend parakeet
- --backend qwen
Antes de realizar el análisis se utiliza hear prepare con las mismas opciones de backend.
AnyDecisionModel: respuestas estructuradas a partir de probabilidades
El segundo paquete anunciado por Hugging Face es AnyDecisionModel, una biblioteca Swift que permite utilizar modelos de inteligencia artificial para responder preguntas con un conjunto definido de posibles respuestas.
En lugar de solicitar al modelo que redacte una respuesta en lenguaje natural, la biblioteca calcula probabilidades y devuelve resultados tipados.
Admite tres clases de decisiones:
- Preguntas de sí o no: evalúan la probabilidad de una respuesta afirmativa.
- Selección de opciones: permiten escoger entre alternativas definidas.
- Escalas de valoración: asignan una respuesta entre distintos niveles.
La biblioteca puede trabajar con modelos ejecutados en el dispositivo mediante MLX, Core AI o llama.cpp, y también con motores de decisión de Jev u Ollama.
Un ejemplo de clasificación de tickets
Uno de los ejemplos presentados utiliza un ticket de soporte con el siguiente contenido:
"I was charged twice for my order, and now the app logs me out when I try to ask for a refund."
El ejemplo define Department como una enumeración conforme a Choosable, con tres alternativas: billing, technical y sales.
Una DecisionSession recibe el texto del ticket y permite formular distintas preguntas sobre ese mismo contenido.
Para evaluar si el mensaje expresa urgencia:
probability(of: "Does this convey urgency?")
Para seleccionar el equipo responsable:
choice("Which team?", from: Department.self)
Para evaluar el nivel de frustración:
score("How frustrated?", levels: ["Calm", "Frustrated", "Very angry"])
La sesión conserva un único estado, representado como texto o JSON, y cada pregunta se procesa de manera independiente.
Cómo calcula las respuestas
En los backends basados en predicción del siguiente token, AnyDecisionModel construye un prompt que asigna una etiqueta de un solo token a cada respuesta permitida.
El modelo realiza una pasada de inferencia y la biblioteca obtiene la probabilidad asociada a cada etiqueta.
Este mecanismo permite convertir las probabilidades del modelo en resultados estructurados.
Las selecciones admiten hasta 26 alternativas, mientras que las escalas de puntuación pueden contener un máximo de 10 niveles.
Emoji Magnet: un ejemplo con 343 decisiones
Hugging Face también presenta Emoji Magnet, una aplicación para macOS que utiliza AnyDecisionModel para relacionar texto con emojis.
La aplicación trabaja con 343 emojis sin recurrir a reglas basadas en palabras clave.
Con el backend Jev alojado, las 343 preguntas se envían en una única solicitud. Los emojis se posicionan en aproximadamente medio segundo por frase.
Cuando no está definida la clave TYPESAFE_AI_API_KEY, la aplicación utiliza Qwen3 4B ejecutado localmente con MLX.
En esta modalidad, procesa 16 preguntas por pasada. En un M4 Max, cada grupo requiere aproximadamente 0,45 segundos y el procesamiento completo tarda alrededor de 10 segundos.
| Característica | Jev alojado | Qwen3 4B local con MLX |
|---|---|---|
| Número de preguntas | 343 | 343 |
| Preguntas por solicitud o pasada | 343 | 16 |
| Tiempo comunicado | Aproximadamente 0,5 segundos por frase | Aproximadamente 0,45 segundos por grupo de 16 |
| Tiempo del procesamiento completo | — | Aproximadamente 10 segundos |
| Ejecución | Backend alojado | Local con MLX |
Modelos especializados: Clef y MLXHeadDecisionModel
AnyDecisionModel también admite modelos que incorporan una cabeza de decisión entrenada específicamente para producir resultados de este tipo.
Entre ellos se encuentra Clef de Cloudflare, incluida su variante Clef-Flash 9B.
La biblioteca proporciona MLXHeadDecisionModel, que permite utilizar el modelo mlx-community/clef-flash-4bit.
La descarga ocupa 6,2 GB y la tarjeta del modelo recomienda un Mac con al menos 16 GB de memoria.
Aunque Clef puede procesar imágenes y video, la integración mediante MLXHeadDecisionModel acepta estados de texto y JSON.
Calibración de probabilidades y medición de confianza
AnyDecisionModel incorpora mecanismos para ajustar e interpretar las probabilidades devueltas por los modelos.
Los backends locales admiten Calibration, que permite aplicar ajustes de temperatura y sesgo en preguntas de sí o no.
También incluyen rotationDebiasing, un mecanismo que repite una pregunta con distintas rotaciones del orden de sus opciones y calcula el promedio de las probabilidades obtenidas.
Este procedimiento requiere una evaluación por cada rotación.
Por otra parte, la confianza se calcula mediante entropía. Esta medida expresa qué tan concentradas están las probabilidades entre las respuestas disponibles, y no determina por sí misma si una respuesta es correcta.
Seis backends para integrar modelos de decisión
AnyDecisionModel ofrece seis alternativas para ejecutar las consultas, tanto con modelos locales como con servicios externos.
| Backend | Características y requisitos |
|---|---|
| MLX | Ejecución local mediante MLX |
| MLX decision heads | Compatibilidad con modelos que incorporan cabezas de decisión |
| Core AI | Disponible en macOS 27 e iOS 27 |
| llama.cpp | Ejecución de modelos GGUF locales |
| Jev | API System One de TypeSafe o servidor compatible, como Kev |
| Ollama | Requiere Ollama 0.35.0 o posterior; para modelos en la nube, 0.40.5 o posterior |
Sin activar traits, AnyDecisionModel proporciona los tipos centrales y los backends Jev y Ollama, sin incorporar dependencias de terceros. Esta configuración también compila en Linux.
Los backends locales se habilitan mediante los traits MLX, CoreAI o Llama.
Requisitos y dependencias de los paquetes
Ambos proyectos requieren Swift 6.2 o posterior y macOS 26 o iOS 26 o versiones posteriores.
Los runtimes Parakeet y Sortformer, así como el backend MLX, necesitan dispositivos con Apple silicon.
Referencias de instalación en Package.swift
Las dependencias indicadas para los paquetes son:
AnySpeechRecognizer:
.package(url: "https://github.com/mattt/AnySpeechRecognizer", from: "0.1.0")
AnyDecisionModel con el trait MLX:
.package(url: "https://github.com/mattt/AnyDecisionModel", from: "0.6.0", traits: ["MLX"])
Compatibilidad entre Core AI y AnySpeechRecognizer
Existe una incompatibilidad actual al combinar el trait CoreAI de AnyDecisionModel con AnySpeechRecognizer.
La causa está en las versiones requeridas de swift-huggingface: coreai-kit 0.7.3 necesita una versión anterior a 1.0, mientras que AnySpeechRecognizer depende de la línea 1.x.
Esta diferencia impide utilizar ambas configuraciones conjuntamente.
Hugging Face en contexto
AnySpeechRecognizer y AnyDecisionModel forman parte de la línea de herramientas Swift abiertas de Hugging Face, junto con AnyLanguageModel y swift-huggingface 1.x. Los proyectos amplían esa familia con capacidades de reconocimiento de voz, diarización y decisiones basadas en probabilidades.




