| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Shopping Assistant Demo</title> |
| <style> |
| body { |
| font-family: Arial, sans-serif; |
| max-width: 800px; |
| margin: 0 auto; |
| padding: 20px; |
| line-height: 1.6; |
| } |
| h1 { |
| color: #2c3e50; |
| text-align: center; |
| } |
| .container { |
| border: 1px solid #ddd; |
| border-radius: 5px; |
| padding: 20px; |
| margin-top: 20px; |
| } |
| .form-group { |
| margin-bottom: 15px; |
| } |
| label { |
| display: block; |
| margin-bottom: 5px; |
| font-weight: bold; |
| } |
| input[type="text"] { |
| width: 100%; |
| padding: 8px; |
| border: 1px solid #ddd; |
| border-radius: 4px; |
| box-sizing: border-box; |
| } |
| button { |
| background-color: #3498db; |
| color: white; |
| border: none; |
| padding: 10px 15px; |
| border-radius: 4px; |
| cursor: pointer; |
| } |
| button:hover { |
| background-color: #2980b9; |
| } |
| #result { |
| margin-top: 20px; |
| padding: 15px; |
| border: 1px solid #ddd; |
| border-radius: 4px; |
| background-color: #f9f9f9; |
| white-space: pre-wrap; |
| display: none; |
| } |
| .loading { |
| text-align: center; |
| margin-top: 20px; |
| display: none; |
| } |
| .category { |
| display: inline-block; |
| margin: 5px; |
| padding: 5px 10px; |
| border-radius: 15px; |
| color: white; |
| font-size: 14px; |
| } |
| .electronics { background-color: #3498db; } |
| .clothing { background-color: #9b59b6; } |
| .home { background-color: #2ecc71; } |
| .kitchen { background-color: #e74c3c; } |
| .toys { background-color: #f39c12; } |
| .other { background-color: #95a5a6; } |
| </style> |
| </head> |
| <body> |
| <h1>Shopping Assistant Demo</h1> |
| |
| <div class="container"> |
| <p> |
| This demo shows how to use the Shopping Assistant model to classify shopping queries into categories. |
| Enter a shopping query below to see which categories it belongs to. |
| </p> |
| |
| <div class="form-group"> |
| <label for="query">Shopping Query:</label> |
| <input type="text" id="query" placeholder="e.g., I'm looking for headphones" value="I'm looking for headphones"> |
| </div> |
| |
| <button id="submit">Classify Query</button> |
| |
| <div class="loading" id="loading"> |
| <p>Classifying your query...</p> |
| </div> |
| |
| <div id="result"></div> |
| </div> |
| |
| <script> |
| document.getElementById('submit').addEventListener('click', async () => { |
| const query = document.getElementById('query').value.trim(); |
| if (!query) { |
| alert('Please enter a shopping query'); |
| return; |
| } |
| |
| const loading = document.getElementById('loading'); |
| const result = document.getElementById('result'); |
| |
| loading.style.display = 'block'; |
| result.style.display = 'none'; |
| |
| try { |
| |
| const modelId = 'selvaonline/shopping-assistant'; |
| const response = await fetch( |
| `https://api-inference.huggingface.co/models/${modelId}`, |
| { |
| method: 'POST', |
| headers: { |
| 'Content-Type': 'application/json', |
| |
| |
| }, |
| body: JSON.stringify({ |
| inputs: query, |
| options: { |
| wait_for_model: true |
| } |
| }) |
| } |
| ); |
| |
| if (!response.ok) { |
| throw new Error(`HTTP error! status: ${response.status}`); |
| } |
| |
| const data = await response.json(); |
| |
| |
| const categories = ["electronics", "clothing", "home", "kitchen", "toys", "other"]; |
| const probabilities = data[0].map(logit => 1 / (1 + Math.exp(-logit))); |
| |
| |
| const topCategories = []; |
| for (let i = 0; i < probabilities.length; i++) { |
| if (probabilities[i] > 0.5) { |
| topCategories.push({ |
| category: categories[i], |
| score: probabilities[i] |
| }); |
| } |
| } |
| |
| |
| topCategories.sort((a, b) => b.score - a.score); |
| |
| |
| let resultHtml = `<h3>Results for: "${query}"</h3>`; |
| |
| if (topCategories.length > 0) { |
| resultHtml += '<p>Top categories:</p>'; |
| resultHtml += '<div>'; |
| for (const item of topCategories) { |
| resultHtml += `<span class="category ${item.category}">${item.category}: ${item.score.toFixed(4)}</span>`; |
| } |
| resultHtml += '</div>'; |
| |
| resultHtml += `<p>Based on your query, I would recommend looking for deals in the <strong>${topCategories[0].category}</strong> category.</p>`; |
| } else { |
| resultHtml += '<p>No categories found for your query. Please try a different query.</p>'; |
| } |
| |
| result.innerHTML = resultHtml; |
| result.style.display = 'block'; |
| } catch (error) { |
| console.error('Error:', error); |
| result.innerHTML = `<p>Error: ${error.message}</p><p>Make sure the model is available and you have the correct permissions.</p>`; |
| result.style.display = 'block'; |
| } finally { |
| loading.style.display = 'none'; |
| } |
| }); |
| </script> |
| </body> |
| </html> |
|
|