File size: 2,956 Bytes
db9b27f 71e0415 db9b27f b31737a db9b27f b31737a db9b27f b31737a db9b27f b31737a a2648f3 db9b27f a2648f3 db9b27f 03bbb65 db9b27f b31737a db9b27f b31737a db9b27f 03bbb65 db9b27f 03bbb65 db9b27f 03bbb65 db9b27f b31737a a2648f3 db9b27f 03bbb65 db9b27f a2648f3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
// index.js
import { pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/transformers';
// Front-end copy of the Python AVAILABLE_MODELS list for dropdown population:
const AVAILABLE_MODELS = [
{ name: "Moonshot Kimi-K2", id: "moonshotai/Kimi-K2-Instruct" },
{ name: "DeepSeek V3", id: "deepseek-ai/DeepSeek-V3-0324" },
{ name: "DeepSeek R1", id: "deepseek-ai/DeepSeek-R1-0528" },
{ name: "ERNIE-4.5-VL", id: "baidu/ERNIE-4.5-VL-424B-A47B-Base-PT" },
{ name: "MiniMax M1", id: "MiniMaxAI/MiniMax-M1-80k" },
{ name: "Qwen3-235B-A22B", id: "Qwen/Qwen3-235B-A22B" },
{ name: "Qwen3-32B", id: "Qwen/Qwen3-32B" }, // newly added
{ name: "SmolLM3-3B", id: "HuggingFaceTB/SmolLM3-3B" },
{ name: "GLM-4.1V-9B-Thinking", id: "THUDM/GLM-4.1V-9B-Thinking" },
{ name: "LLaMA-2-70B-Chat", id: "meta-llama/Llama-2-70b-chat" }, // powerful addition
{ name: "Mistral-7B-Instruct", id: "mistralai/Mistral-7B-Instruct" }, // powerful addition
{ name: "Qwen3-235B-A22B-Instruct-2507", id: "Qwen/Qwen3-235B-A22B-Instruct-2507" },
{ name: "Qwen3-Coder-480B-A35B", id: "Qwen/Qwen3-Coder-480B-A35B-Instruct" }
];
const modelSelect = document.getElementById('modelSelect');
const analyzeForm = document.getElementById('analyze-form');
const inputText = document.getElementById('inputText');
const analyzeButton = document.getElementById('analyzeButton');
const resultSection = document.getElementById('result');
let sentimentPipeline = null;
// Populate the model dropdown
AVAILABLE_MODELS.forEach(model => {
const option = document.createElement('option');
option.value = model.id;
option.textContent = model.name;
modelSelect.appendChild(option);
});
// Initialize pipeline for the selected model
async function initPipeline(modelId) {
analyzeButton.disabled = true;
analyzeButton.textContent = 'Loading model…';
sentimentPipeline = await pipeline('sentiment-analysis', modelId);
analyzeButton.textContent = 'Analyze Sentiment';
analyzeButton.disabled = false;
}
// On page load: initialize with the first model
initPipeline(modelSelect.value);
// When user changes model: reinitialize pipeline
modelSelect.addEventListener('change', () => {
resultSection.textContent = '';
initPipeline(modelSelect.value);
});
// Handle form submission
analyzeForm.addEventListener('submit', async (event) => {
event.preventDefault();
const text = inputText.value.trim();
if (!text) return;
analyzeButton.disabled = true;
analyzeButton.textContent = 'Analyzing…';
resultSection.textContent = '';
try {
const [output] = await sentimentPipeline(text);
const { label, score } = output;
resultSection.textContent = `Sentiment: ${label} (Confidence: ${(score * 100).toFixed(2)}%)`;
} catch (err) {
console.error(err);
resultSection.textContent = 'Error analyzing sentiment.';
}
analyzeButton.textContent = 'Analyze Sentiment';
analyzeButton.disabled = false;
});
|