¿Qué es la API Prompt?

La API Prompt es una propuesta experimental de plataforma web del W3C Web Machine Learning Community Group que expone un modelo de lenguaje grande proporcionado por el navegador a JavaScript a través de una interfaz window.LanguageModel. Las páginas crean una sesión con LanguageModel.create(), opcionalmente la configuran con un prompt del sistema, y luego llaman a prompt() o promptStreaming() para obtener una respuesta.

A diferencia de llamar a una API LLM alojada, el modelo se ejecuta en el dispositivo del usuario. Esto significa que las entradas nunca abandonan la máquina, la página funciona sin conexión una vez que el modelo está en caché, y no hay costos por solicitud. En Chrome, el modelo subyacente es Gemini Nano, pero la API es intencionalmente agnóstica respecto al modelo, por lo que otros navegadores pueden integrar diferentes implementaciones.

Una sesión es con estado: realiza un seguimiento del historial de conversación dentro de una ventana de contexto medida en tokens. Cuando la ventana se llena, los mensajes no del sistema más antiguos se eliminan automáticamente (se dispara un evento contextoverflow), y puedes inspeccionar session.contextUsage y session.contextWindow en cualquier momento para ver cuánto espacio queda.

Descripción de la herramienta

Este área de pruebas es una superficie de chat interactiva conectada a window.LanguageModel. Te permite establecer un prompt del sistema, enviar mensajes y ver cómo el modelo transmite tokens en tiempo real. Una barra de progreso muestra la disponibilidad del modelo y el progreso de descarga, y una barra de uso de tokens informa cuánta parte de la ventana de contexto de la sesión se está consumiendo.

La sesión se crea de forma diferida en el primer envío y se reutiliza en todos los mensajes hasta que cambies el prompt del sistema, momento en el cual se destruye y se crea una nueva con las nuevas instrucciones.

Características

  • Respuestas en streaming — utiliza promptStreaming() para que los tokens aparezcan en el chat a medida que se producen.
  • Editor de prompt del sistema — define un rol o comportamiento persistente que condiciona cada respuesta.
  • Botón Detener — cancela un prompt en vuelo con un AbortController sin desmontar la sesión.
  • Uso de contexto en vivo — visualiza contextUsage contra contextWindow para que puedas ver cuándo la conversación está a punto de desbordarse.
  • Disponibilidad y progreso de descarga — muestra el estado availability() y los eventos downloadprogress mientras se descarga el modelo.

Casos de uso

  • Probar prompts localmente — itera sobre prompts del sistema y patrones de pocos ejemplos sin pagar por una API en la nube.
  • Probar la viabilidad de IA en el dispositivo — verifica que la API Prompt esté disponible, ve cuál es el tamaño de la ventana de contexto y compara la velocidad de respuesta en tu hardware.
  • Redacción sensible a la privacidad — lluvia de ideas o reformula texto que no debe enviarse a un servidor de terceros.

Requisitos

  • Un navegador que implemente la API Prompt. Chrome 138+ la expone experimentalmente; en versiones anteriores es posible que debas habilitarla a través de chrome://flags/#prompt-api-for-gemini-nano y tener descargado el modelo en el dispositivo.
  • Un contexto seguro (HTTPS o localhost).
  • Un dispositivo que cumpla con los requisitos de hardware del modelo (espacio en disco suficiente, RAM y una GPU/CPU compatible). En dispositivos no compatibles, availability() devuelve unavailable.
  • Ancho de banda inicial para descargar el modelo. Las sesiones posteriores reutilizan el modelo en caché.

Cómo funciona

  1. Al montarse, la herramienta verifica typeof window.LanguageModel. Si está ausente, una advertencia reemplaza la entrada de chat.
  2. LanguageModel.availability() informa uno de available, downloadable, downloading o unavailable. El resultado se muestra en la barra de progreso.
  3. La primera vez que presionas Enviar, la herramienta llama a LanguageModel.create() con un monitor que transmite eventos downloadprogress a la interfaz de usuario. Si se establece un prompt del sistema, se pasa a través de initialPrompts: [{ role: "system", content: ... }].
  4. El mensaje del usuario se envía a través de session.promptStreaming(text, { signal }). El ReadableStream<string> devuelto se consume fragmento por fragmento y se añade al mensaje del asistente.
  5. Después de cada respuesta, se leen session.contextUsage y session.contextWindow y se reflejan en la barra de uso de tokens.
  6. Presionar Detener llama a controller.abort(), que rechaza el stream en vuelo con un AbortError mientras mantiene la sesión activa para el siguiente prompt.
  7. Editar el prompt del sistema invalida la sesión en caché: la existente se destroy()-e y el siguiente envío crea una nueva sesión con las instrucciones actualizadas.

Opciones explicadas

  • Prompt del sistema — una instrucción de forma libre pasada como el primer mensaje con rol system. Condiciona todos los turnos posteriores. Dejarlo en blanco crea una sesión sin un mensaje del sistema.
  • Enviar / DetenerEnviar envía la entrada como un mensaje user. Detener cancela la respuesta en streaming sin eliminar mensajes anteriores.
  • Uso de tokens — tokens used / total para la sesión actual. Cuando used se aproxima a total, los pares usuario/asistente más antiguos se eliminarán en el siguiente prompt.
  • Estado del modelo — lectura combinada de availability() y downloadprogress. Mientras se descarga el modelo, la barra se anima y muestra un porcentaje.

Limitaciones

  • La API Prompt es experimental. Los nombres de métodos, opciones (por ejemplo, inputUsage vs contextUsage) y semántica de eventos pueden cambiar entre versiones de Chrome.
  • La calidad de salida, la precisión y el seguimiento de instrucciones dependen completamente del modelo proporcionado por el navegador y no están garantizados.
  • La ventana de contexto es pequeña en comparación con los LLM alojados. Las conversaciones largas se desbordarán y eliminarán silenciosamente los turnos más antiguos.
  • La API no se expone a web workers y puede requerir delegación de Permissions Policy (language-model) en iframes de origen cruzado.
  • Esta herramienta intencionalmente no expone temperature, topK, uso de herramientas, entradas multimodales, salida estructurada (responseConstraint) o clonación de sesiones. Son parte de la especificación pero se mantienen fuera del área de pruebas para mantenerse enfocado en el chat simple.

Preguntas frecuentes

¿Por qué dice que la API no es compatible? window.LanguageModel no está definido en tu navegador. Intenta con el último Chrome en escritorio y, si es necesario, habilita la bandera de la API Prompt y espera a que se descargue el modelo en el dispositivo a través de chrome://components.

¿Por qué la primera respuesta es lenta? La primera llamada puede desencadenar una descarga de modelo (observa la barra de progreso) y un paso de creación de sesión. Los prompts posteriores reutilizan la misma sesión y comienzan a transmitir casi inmediatamente.

¿Mi prompt abandona el dispositivo? No. El modelo se ejecuta localmente. Tu texto no es enviado a ningún servidor por esta herramienta.

¿Qué sucede cuando el contexto se llena? La sesión dispara un evento contextoverflow y elimina los turnos no del sistema más antiguos para hacer espacio. El prompt del sistema se conserva.

¿Por qué cambiar el prompt del sistema limpió el estilo de respuesta a mitad de la conversación? Editar el prompt del sistema destruye la sesión actual y crea una nueva en el siguiente envío. La nueva sesión no tiene memoria de los turnos anteriores.