Talk-Llama
(github.com/ggerganov)- Talk-Llama es un ejemplo de
whisper.cppdonde, al hablar por micrófono en la terminal, Whisper convierte la voz en texto y LLaMA responde - Para capturar audio del micrófono se necesita SDL2, y al compilar hay que activar la opción de CMake
WHISPER_SDL2=ON - Al ejecutarlo, se especifica el modelo Whisper con
-mw; para conversaciones en tiempo real se recomiendan los modelosbaseosmall - En
-mlse especifica un modelo LLaMA compatible con ggml, y para preparar el modelo se deben seguir las instrucciones dellama.cpp - Usar
--session FILEpermite guardar y cargar el estado del modelo, lo que hace posible mantener el contexto en conversaciones largas o entre varias ejecuciones
Ejemplo de conversación por voz en la terminal
whisper.cpp/examples/talk-llamaes un ejemplo para conversar por voz con una IA LLaMA desde la terminal- La demo de rendimiento al 2 de noviembre de 2023 se indica como ejecutada en una M2 Ultra con la combinación Whisper Medium + LLaMA v2 13B Q8_0
- Una demo anterior se ofrece en un video separado como caso de ejecución en CPU
Flujo de compilación y ejecución
whisper-talk-llamadepende de la biblioteca SDL2 para capturar audio del micrófono- Ejemplos de instalación de SDL2 por sistema operativo:
- Linux basado en Debian:
sudo apt-get install libsdl2-dev - Fedora Linux:
sudo dnf install SDL2 SDL2-devel - Mac OS:
brew install sdl2
- Linux basado en Debian:
- En la compilación con CMake se activa la opción
WHISPER_SDL2=ONcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- Un ejemplo de ejecución especifica en conjunto el modelo Whisper, el modelo LLaMA, el prompt y la cantidad de hilos
./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Opciones para especificar modelos
- El argumento
-mwespecifica el modelo Whisper que se usará- Para una experiencia en tiempo real se recomiendan los modelos
baseosmall
- Para una experiencia en tiempo real se recomiendan los modelos
- El argumento
-mlespecifica el modelo LLaMA que se usará- Para obtener un modelo LLaMA compatible con
ggml, se indica consultar las instrucciones de llama.cpp
- Para obtener un modelo LLaMA compatible con
Continuar el contexto con un archivo de sesión
whisper-talk-llamaadmite gestión de sesiones para conversaciones más coherentes y continuas- Puede mantener el contexto de interacciones anteriores para entender y responder de forma más natural a las solicitudes del usuario
- El soporte de sesiones se activa al ejecutar con la opción de línea de comandos
--session FILE- Después de cada interacción, el estado del modelo de
whisper-talk-llamase guarda en el archivo especificado - Si el archivo no existe, se crea uno nuevo
- Si el archivo existe, se carga el estado del modelo desde ese archivo y se reanuda la sesión anterior
- Después de cada interacción, el estado del modelo de
- Es útil al interactuar con el AI assistant durante conversaciones largas o a lo largo de varias sesiones, ya que recuerda interacciones previas y ofrece respuestas contextuales más relevantes
- Ejemplo de ejecución:
./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Salida de voz y feedback
- Para escuchar en voz las respuestas de texto generadas, se necesita una herramienta TTS
- Se puede usar el motor TTS que se prefiera y modificar el script speak según las necesidades
- La configuración predeterminada usa
sayde MacOS o SpeechSynthesizer de Windows - Se indica que el feedback puede darse en GitHub Discussion #672
1 comentarios
Opiniones de Hacker News
Qué divertido verlo aquí :)
El rendimiento de Apple Silicon probablemente haya mejorado mucho desde lo que se ve en el video. whisper.cpp ahora corre completamente en la GPU, y en los últimos meses la velocidad de generación de llama.cpp también mejoró bastante.
De hecho, el rendimiento también es impresionante.
Está genial. En un proyecto reciente conecté Llama con un modelo de síntesis de voz open source, y había muchos elementos de ingeniería interesantes.
Personalmente, las herramientas de asistencia de código que me resultan más útiles son las que reducen la carga de trabajo manual, como generar argumentos y tipos a partir de docstrings, o al revés, más que intentar reemplazar el pensamiento difícil o la resolución de problemas. Para tareas más complejas, hay que darle a la herramienta de asistencia un punto de partida bastante bueno.
Suelo hablar solo mientras programo, y si una herramienta así pudiera embeber lo que digo como vectores de contexto para usarlo como entrada adicional y darle al modelo un mejor punto de partida, sería realmente futurista y útil. Adopté Copilot tarde y no lo uso siempre, pero si alguien conoce algo parecido, me interesa.
Si la propuesta de pesos abiertos se vuelve realidad en 270 días, en unos meses podría quedar prácticamente prohibida.
Hasta donde encontré, no hay nada sobre prohibir modelos de pesos abiertos. Tampoco parece haber muchas razones para que las recomendaciones finales incluyan “prohíbanlos”.
Por ejemplo, puedo imaginar recomendaciones favorables a los actores establecidos, como hacer que la carga de adoptar modelos de pesos abiertos por parte del gobierno sea tan alta que comprar OpenAI parezca mucho más atractivo. Pero eso es distinto a lo que se dijo originalmente.
La orden ejecutiva parece bastante fácil de leer; ¿hay algo en el texto que se me haya pasado?
https://www.whitehouse.gov/briefing-room/presidential-action...
Coincido en que la forma en que el alcance queda abierto es preocupante, pero ¿dónde está la prohibición real?
Al ejecutar
./talk-llamaen Arch y Debian aparece una floating point exception. Ya revisésdl2libyffmpeg, y también vi el issue relacionado (https://github.com/ggerganov/whisper.cpp/issues/1325), pero no se soluciona. ¿A alguien más le pasa?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
No tengo claro qué fue lo que cambió, pero básicamente eliminé
ffmpegylibsdl2-devy ejecutémakedesde la raíz del repositorio. Después instalélibsdl2yffmpeg, e hicemake talk-llama.En un i7-8550U de 4 núcleos y 16 GB de RAM es bastante lento.
Desde la raíz del repositorio hice más o menos esto:
$ sudo apt purge ffmpeg$ make clean$ git pull$ make$ sudo apt install libsdl2-dev$ make talk-llama$ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\n¿No hay alguna solución de conversión de texto a voz que reciba el stream de texto y lo diga de inmediato, sin esperar a que Llama termine de generar?
Supongo que solo sería posible si el modelo llena el búfer lo suficientemente rápido como para que el motor de síntesis de voz no se detenga.
En vez de esperar a que termine toda la respuesta del LLM, ¿se podría reducir la latencia transmitiendo a la síntesis de voz, a medida que se genera, en bloques de unos 6 tokens?
Actualmente solo usa un umbral adaptativo básico para la detección de fin de enunciado, pero eso se puede mejorar; también se podría hacer que un LLM pequeño genere respuestas rápidas generales mientras el LLM grande calcula. La síntesis de voz también se puede transmitir por chunks o por oraciones
Creo que una de las mejores versiones open source de este tipo de chatbot es https://github.com/yacineMTB/talk. Es muy probable que ahora haya más proyectos similares
¿Cuál es la mejor interfaz de chat para Llama? Tengo una 3090 y quiero probar correr un modelo para tareas rápidas de programación desde la terminal
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
Parece estar hecho para usar ElevenLabs y la API de OpenAI, pero quizá sea fácil configurarlo para Whisper.cpp y Llama locales
Están contratando y no tienen una estrategia de monetización pública, así que supongo que pronto habrá cambios, como cobrar por algunas funciones que hoy son gratis o limitarlas a propósito. Aun así, para las LLM gratuitas, a las apps ligeras que dependen totalmente de llama.cpp les cuesta generar dependencia del proveedor. Si priorizas que sea open source por encima de las funciones, yo también recomendaría ollama
Para preguntas técnicas, creo que ahora Wizard es lo que está de moda
ollama me tiene muy satisfecho para ejecutar LLM locales open source, pero ¿cuál sería el equivalente para Whisper o para modelos open source modernos de síntesis de voz? No conozco bien proyectos que hagan que configurar Whisper localmente sea así de simple
También WhisperScript se veía bastante bien: https://github.com/openai/whisper/discussions/1028
Dicho eso, configurar WhisperX no es tan difícil. Este es un registro paso a paso que armé hace unos meses: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
Para síntesis de voz, coqui tiene la mejor experiencia de usuario y modelos en varios idiomas, pero la calidad no está al nivel de los proveedores comerciales de síntesis de voz
¿Alguien puede explicar de forma simple qué puede hacer esto? ¿Puede ir creando algo como una memoria a largo plazo, aprendiendo y manteniendo el contexto del chat?
El límite de contexto del LLM depende del modelo y la configuración que elija el usuario. Por ejemplo, depende de si usas Llama 2, Wizard Vicuna u otro modelo, y de cómo hayas configurado la ventana de contexto. Puede resultar confuso porque el LLM no tanto “responde” al usuario, sino que predice la continuación más probable dentro de un historial de conversación entre el usuario y un assistant útil; como resultado logra fingir ser un assistant útil y termina siendo, de hecho, un assistant útil
Si se cambia el pipeline, creo que ese comportamiento sería posible. La estructura pasaría a ser
reconocimiento de voz → Wrapper[Llama] → síntesis de voz, y se vuelve interesante si el Wrapper puede aplicar procesamiento adicional al texto de entrada mientras deja que Llama haga lo suyoEl Wrapper podría analizar la conversación y extraer elementos clave como “esta persona se llama Bob, es hombre, tiene 35 años, le gustan los perros y prefiere las cosas ordenadas; quiere un recordatorio para llamar a su hija a las 5 p. m.; es un agente encubierto de la mafia antártica; y prefiere que le hablen con un fuerte acento polaco”, y actuar en consecuencia
Por ejemplo, podría crear un recordatorio para las 5 p. m. mediante HomeAssistant, configurar el motor de síntesis de voz con acento polaco y modificar el historial de conversación inicial de ejecuciones posteriores. Sería algo como poner el nombre de la persona dentro de la conversación interna del chat y, en la presentación previa de la siguiente conversación, ofrecer una versión comprimida de sus intereses y personalidad
Así se obtiene interactividad mediante acciones realizadas por otras herramientas, y también continuidad modificando el historial de la siguiente conversación
Esto realmente tiene una vibra muy fuerte a ELIZA