55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
// import { CreateMLCEngine } from "@mlc-ai/web-llm";
|
|
|
|
import { CreateMLCEngine } from "./node_modules/@mlc-ai/web-llm/lib/index.js";
|
|
|
|
|
|
// Callback function to update model loading progress
|
|
const initProgressCallback = (initProgress) => {
|
|
console.log(initProgress);
|
|
};
|
|
const selectedModel = "Llama-3.1-8B-Instruct-q4f32_1-MLC";
|
|
|
|
const engine = await CreateMLCEngine(
|
|
selectedModel,
|
|
{ initProgressCallback: initProgressCallback }, // engineConfig
|
|
);
|
|
|
|
// chat
|
|
|
|
const messages = [
|
|
{ role: "system", content: "You are a helpful AI assistant." },
|
|
{ role: "user", content: "Hello!" },
|
|
];
|
|
|
|
// 1. Définir la persona (comme votre instruction SYSTEM dans Ollama)
|
|
//const systemPrompt = "Tu es un assistant culinaire expert, spécialisé dans la cuisine française. Tu réponds toujours avec enthousiasme et proposes des alternatives aux ingrédients difficiles à trouver. Tu ne parles jamais de sujets hors de la cuisine.";
|
|
|
|
//const messages = [
|
|
// // 2. Le message système définit le comportement pour toute la conversation
|
|
// { role: "system", content: systemPrompt },
|
|
// { role: "user", content: "Comment faire une bonne quiche lorraine ?" }
|
|
//];
|
|
|
|
//import { loadPersona } from './personaLoader.js';
|
|
|
|
// ---
|
|
|
|
// Chunks is an AsyncGenerator object
|
|
const chunks = await engine.chat.completions.create({
|
|
messages,
|
|
temperature: 0
|
|
// stream: true, // <-- Enable streaming
|
|
// stream_options: { include_usage: true },
|
|
});
|
|
|
|
let reply = "";
|
|
for await (const chunk of chunks) {
|
|
reply += chunk.choices[0]?.delta.content || "";
|
|
console.log(reply);
|
|
if (chunk.usage) {
|
|
console.log(chunk.usage); // only last chunk has usage
|
|
}
|
|
}
|
|
|
|
const fullReply = await engine.getMessage();
|
|
console.log(fullReply);
|