L'API Web de LiteRT-LM pour JavaScript et TypeScript dans le navigateur. Il s'agit d'une version preview qui prend en charge le texte entrant / sortant s'exécutant dans WebGPU.
Introduction
Voici un exemple d'application de chat REPL conçue avec l'API JavaScript :
<div id="out" style="white-space: pre-wrap; font-family: monospace;"></div>
<input id="in" onkeydown="if(event.key === 'Enter') repl(this)">
<script type="module">
import { Engine } from 'https://cdn.jsdelivr.net/npm/@litert-lm/core/+esm';
const engine = await Engine.create({ model: '/path/to/model.litertlm' });
const chat = await engine.createConversation();
window.repl = async (el) => {
const text = el.value;
el.value = ''; // Clear immediately
out.append(`\n>>> ${text}\nAI: `);
for await (const chunk of chat.sendMessageStreaming(text)) {
out.append(chunk.content[0].text);
}
};
</script>
Premiers pas
LiteRT-LM est disponible en tant que package npm. Vous pouvez installer la dernière version à partir de npm ou l'importer directement à partir d'un CDN :
# From npm
npm i --save @litert-lm/core
# From a CDN (in your JavaScript file)
import * as litertlm from 'https://cdn.jsdelivr.net/npm/@litert-lm/core/+esm';
Initialiser le moteur
Engine est le point d'entrée de l'API. Il gère le chargement du modèle, la création de session et la gestion des ressources. N'oubliez pas de delete le moteur pour libérer les ressources lorsque le modèle n'est plus nécessaire.
Remarque : L'initialisation du moteur peut prendre plusieurs secondes pour charger le modèle.
import {Engine, EngineSettings} from '@litert-lm/core';
const engineSettings = {
model: 'url/path/to/model.litertlm', // or a ReadableStream, or a Blob
} satisfies EngineSettings;
const engine = await Engine.create(engineSettings);
// ... Use the engine to create a conversation ...
// Delete the engine when done.
await engine.delete();
Créer une conversation
Une fois le moteur initialisé, créez une instance Conversation. Vous pouvez fournir un ConversationConfig pour personnaliser son comportement.
const conversation = await engine.createConversation({
preface: {
messages: [
{role: 'system', content: 'You are a helpful assistant'}
]
}
});
conversation.sendMessage({
role: 'user',
content: 'Write a poem',
});
Envoyer des messages
Vous pouvez envoyer des messages avec ou sans streaming.
Exemple sans streaming
// Simple string input
let response = await conversation.sendMessage("What is the capital of France?");
console.log(response.content[0].text);
// Or with full message structure
response = await conversation.sendMessage({role: 'user', content: '...'});
Exemple avec streaming
// sendMessageStreaming returns a ReadableStream of response chunks
const stream = conversation.sendMessageStreaming('Tell me a long story.');
for await (const chunk of stream) {
// Chunks are Records containing pieces of the response
for (const item of chunk.content) {
if (item.type === 'text') {
console.log(item.text);
}
}
}
Annuler la génération
Vous pouvez annuler explicitement une génération en cours en appelant cancel() sur l'instance Conversation :
// Cancel any ongoing generation
conversation.cancel();
Si vous diffusez la réponse en streaming, la sortie anticipée de la boucle for await...of (par exemple, avec break) annule également automatiquement la génération en cours :
for await (const chunk of stream) {
if (shouldStop()) {
break; // Cancels the stream and underlying generation
}
}