Ir al contenido principal

Implementar LiteRT-LM

LiteRT-LM

1      Algoritmo de LiteRT-LM

En un SCRIPT de tipo Módulo, extraeremos el objeto Engine de la librería LiteRT-LM:

JavaScript de tipo Módulo, luego de creado el BODY

import { Engine } from "https://cdn.jsdelivr.net/npm/@litert-lm/core/+esm"; // Objeto

window.MecanismoLiteRT = Engine ; // Objeto

 

Ahora vamos a crear el mecanismo de chat (chat engine) pero antes tenemos que descargar el cerebro computado (modelo de IA).

JavaScript, continuación de lo anterior u otro SCRIPT con top-await

const _URL_CEREBRO = "https://huggingface.co/litert-community/gemma-4-E2B-it-litert-lm/resolve/main/gemma-4-E2B-it-web.litertlm"; // Frase/String

 

// Tarda lo que tenga que tardar descargando 1915 MB de información

let _cerebroDescargado = await fnDescargarCerebro( _URL_CEREBRO ) ; // Objeto URL

// Listo, ahora compilará el Cerebro; en PCs con 4 GB de RAM esto bloquea todo

let _mecanismoChat = await MecanismoLiteRT.create(

  { model: _cerebroDescargado }

); // Objeto

// Cuando termine esto se desbloqueará todo

let _conversacion = _mecanismoChat.createConversation() ; // Objeto

 

// Hacer que reaccione el botón de chatear

idBotonEnviar.onclick = function() {

  fnProcesarTexto( idInputUsuario.value.trim() ) ;

  idInputUsuario.select() ;

  idInputUsuario.focus() ;

  return ;

} // Función

// Hacer que el INPUT reaccione a un Enter, UX

idInputUsuario.onkeyup = function( {key} ) {

  if( key == "Enter" ) idBotonEnviar.click() ;

  return ;

} // Función

 

JavaScript, función para descargar de la URL dada el modelo de LiteRT-LM

async function fnDescargarCerebro( _dadaURL ) {

  let _solicitud = await fetch( _dadaURL ) ; // Objeto

  let _totalBytes = + _solicitud.headers.get( "content-length" ) ; // Número entero

  let _lectorBytes = _solicitud.body.getReader() ; // Objeto

 

  let _listaBytes = [] ; // Array

  let _cantBytesRecibidos = 0 ; // Número entero

 

  while( true ) {

    let _lectura = await _lectorBytes.read() ; // Objeto

    if( _lectura.done ) break ;

    _listaBytes.push( _lectura.value ) ;

    _cantBytesRecibidos += _lectura.value.length ; // Número entero

    if( _totalBytes ) {

      let _porcentaje = _cantBytesRecibidos*100 / _totalBytes ; // Número con decim.

      // Hacer algo para mostrar el porcentaje

    }

  }

  let _archivoVirtual = new Blob( _listaBytes ) ; // Objeto Blob

  return URL.createObjectURL( _archivoVirtual ) ; // Objeto URL

}

 

Ahora generamos la función para que LiteRT-LM analice el texto del usuario y vaya generando mediante Streaming (a medida que va llegando) la oración.

JavaScript, función para procesar texto por la IA de LiteRT-LM

async function fnProcesarTexto( _dadoTexto ) {

  console.log( "Procesando: [%s]", _dadoTexto ) ;

  fnMostrarMensajeDelUsuario( _dadoTexto ) ;

  let _divIA = fnGenerarDivAsistente() ;

  for await ( let _cadaPalabra of _conversacion.sendMessageStreaming( _dadoTexto ) ){

    if( _cadaPalabra && _cadaPalabra.content && _cadaPalabra.content[0] )

      _divIA.innerHTML += _cadaPalabra.content[0].text

    ;

  }

  return ;

}

 

Quedará en ustedes crear:

a)     La función para mostrar el mensaje del usuario

b)    La función para generar el DIV que tendrá la respuesta progresiva del asistente.

 


Comentarios

Entradas populares de este blog

Arduino - MEF - Sistema detector Rayos UV

  Propuesta de mejora de código sin MEF proyecto Sensor UV Código para el Arduino La siguiente tabla es el código de Arduino que propongo, sin Máquina de Estados Finitos, explicado paso a paso. En principio podrían copiar cada parte en orden y probarlo en el Arduino. Primero propongo unos truquitos del lenguaje C++ // Trucos de C++ #define ENTER "\n"   template<class CualquierTipo> inline Print &operator << (Print &izq, CualquierTipo der ) {   izq.print( der ) ;   return izq ; }   A continuación, incluir las librerías necesarias. Hasta el momento, incluyeron ustedes el de DHT (Detector de Humedad y Temperatura Relativa DHT22) y la pantallita LCD 16x2 mediante Protocolo I2C. Para “conversar” en dicho protocolo se necesita la librería Wire.h nativa de Arduino C++.   // Incluir librerías   #include <DHT.h> ...

Probando ChatGPT - Mapa conceptual con Mermaid

 Había conversado con ChatGPT acerca de cuidado de las plantas e hidroponía. Luego de unos días me di cuenta que quizás también podría saber acerca de crear Mapas conceptuales. Salió lo siguiente; le falta un concepto para crear correctamente mapas conceptuales (la relación entre los conceptos), pero podría ser algo para ayudarnos a corregir mejor. El texto original era el que cito a continuación, pero le agregué explícitamente que me armara un "mapa conceptual" utilizando el lenguaje Mermaid, un lenguaje descriptivo que permite construir gráficos diversos, entre ellos Mapas conceptuales, generando un archivo SVG. ``` Hacé un mapa conceptual en lenguaje Mermaid con el siguiente texto, redactado anteriormente: "La hidroponía es un método de cultivo que se utiliza para cultivar plantas sin suelo utilizando una solución nutriente y agua. Algunas plantas pueden cultivarse con éxito mediante hidroponía, mientras que otras necesitan el suelo para crecer y prosperar. De las pl...