Spaces:
Running
Running
Fix: auto-detect VAISTUDIO token + improved AI consultant with natural Vietnamese personality
Browse files- index.html +55 -28
index.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
<html lang="vi">
|
| 3 |
-
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
<title>MALLOCA | Smart Kitchen - Smart Life</title>
|
|
@@ -1271,6 +1271,7 @@ let input=document.getElementById('chatInput');
|
|
| 1271 |
let msg=input.value.trim();
|
| 1272 |
if(!msg)return;
|
| 1273 |
input.value='';
|
|
|
|
| 1274 |
document.getElementById('chatSuggestions').style.display='none';
|
| 1275 |
|
| 1276 |
// Show user message
|
|
@@ -1278,32 +1279,53 @@ appendMsg('user',msg.replace(/</g,'<').replace(/>/g,'>').replace(/\n/g,'<b
|
|
| 1278 |
|
| 1279 |
// Search related products
|
| 1280 |
let matchedProducts=searchProducts(msg);
|
| 1281 |
-
let productContext=matchedProducts.length
|
| 1282 |
-
|
| 1283 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1284 |
chatHistory.push({role:'user',content:msg});
|
| 1285 |
-
let systemPrompt=`Bạn là trợ lý tư vấn thiết bị nhà bếp chuyên nghiệp cho Malloca, Eurogold & Grob Việt Nam.
|
| 1286 |
|
| 1287 |
-
|
| 1288 |
-
|
| 1289 |
-
|
| 1290 |
-
-
|
| 1291 |
-
-
|
| 1292 |
-
-
|
| 1293 |
-
-
|
|
|
|
|
|
|
|
|
|
| 1294 |
|
| 1295 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1296 |
${productContext}
|
| 1297 |
|
| 1298 |
-
THÔNG TIN
|
| 1299 |
-
-
|
| 1300 |
-
-
|
| 1301 |
-
-
|
| 1302 |
-
-
|
| 1303 |
|
| 1304 |
let messages=[{role:'system',content:systemPrompt}];
|
| 1305 |
-
// Keep last
|
| 1306 |
-
let recent=chatHistory.slice(-
|
| 1307 |
messages.push(...recent);
|
| 1308 |
|
| 1309 |
chatBusy=true;
|
|
@@ -1311,7 +1333,12 @@ document.getElementById('chatSend').disabled=true;
|
|
| 1311 |
showTyping();
|
| 1312 |
|
| 1313 |
try{
|
| 1314 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1315 |
if(!token){
|
| 1316 |
hideTyping();
|
| 1317 |
// Smart local response without AI
|
|
@@ -1333,8 +1360,9 @@ headers:{'Authorization':'Bearer '+token,'Content-Type':'application/json'},
|
|
| 1333 |
body:JSON.stringify({
|
| 1334 |
model:'Qwen/Qwen2.5-72B-Instruct',
|
| 1335 |
messages:messages,
|
| 1336 |
-
max_tokens:
|
| 1337 |
-
temperature:0.7
|
|
|
|
| 1338 |
})
|
| 1339 |
});
|
| 1340 |
|
|
@@ -1342,9 +1370,8 @@ hideTyping();
|
|
| 1342 |
|
| 1343 |
if(!resp.ok){
|
| 1344 |
let err=await resp.text();
|
| 1345 |
-
console.error('Chat API error:',err);
|
| 1346 |
-
|
| 1347 |
-
appendMsg('bot',formatBotResponse('Xin lỗi, tôi đang gặp sự cố kết nối. Nhưng tôi đã tìm thấy các sản phẩm liên quan cho bạn:',matchedProducts));
|
| 1348 |
chatBusy=false;document.getElementById('chatSend').disabled=false;
|
| 1349 |
return;
|
| 1350 |
}
|
|
@@ -1357,7 +1384,7 @@ appendMsg('bot',formatBotResponse(reply,matchedProducts));
|
|
| 1357 |
}catch(e){
|
| 1358 |
hideTyping();
|
| 1359 |
console.error('Chat error:',e);
|
| 1360 |
-
appendMsg('bot',formatBotResponse('Xin lỗi, đã có lỗi xảy ra. Đây là sản phẩm tôi tìm được cho
|
| 1361 |
}
|
| 1362 |
|
| 1363 |
chatBusy=false;
|
|
@@ -1396,7 +1423,7 @@ updateCartBadge();
|
|
| 1396 |
<button class="chat-close" onclick="closeChat()"><i class="fas fa-times"></i></button>
|
| 1397 |
</div>
|
| 1398 |
<div class="chat-body" id="chatBody">
|
| 1399 |
-
<div class="chat-msg bot">Xin chào! 👋
|
| 1400 |
</div>
|
| 1401 |
<div class="chat-suggestions" id="chatSuggestions">
|
| 1402 |
<div class="chat-sug" onclick="sendSuggestion(this)">Tư vấn bếp từ cho gia đình 4 người</div>
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
<html lang="vi">
|
| 3 |
+
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width,initial-scale=1">
|
| 6 |
<title>MALLOCA | Smart Kitchen - Smart Life</title>
|
|
|
|
| 1271 |
let msg=input.value.trim();
|
| 1272 |
if(!msg)return;
|
| 1273 |
input.value='';
|
| 1274 |
+
input.style.height='auto';
|
| 1275 |
document.getElementById('chatSuggestions').style.display='none';
|
| 1276 |
|
| 1277 |
// Show user message
|
|
|
|
| 1279 |
|
| 1280 |
// Search related products
|
| 1281 |
let matchedProducts=searchProducts(msg);
|
| 1282 |
+
let productContext=matchedProducts.length
|
| 1283 |
+
? matchedProducts.map((p,i)=>{
|
| 1284 |
+
let specs='';
|
| 1285 |
+
if(p.specs&&Object.keys(p.specs).length){
|
| 1286 |
+
specs=Object.entries(p.specs).slice(0,6).map(([k,v])=>k+': '+v).join('; ');
|
| 1287 |
+
}
|
| 1288 |
+
return `${i+1}. **${p.name}**
|
| 1289 |
+
- Giá: ${p.price||'Liên hệ'}
|
| 1290 |
+
- Danh mục: ${p.cat} | Thương hiệu: ${p.brand}
|
| 1291 |
+
- Link: /san-pham/${p.slug}/index.html
|
| 1292 |
+
${specs?'- Thông số: '+specs:''}
|
| 1293 |
+
${p.summary?'- Mô tả: '+p.summary.substring(0,150):''}`;
|
| 1294 |
+
}).join('\n')
|
| 1295 |
+
: 'Không tìm thấy sản phẩm trực tiếp phù hợp trong kho dữ liệu. Hãy tư vấn chung dựa trên kiến thức chuyên môn về thiết bị nhà bếp và giới thiệu khách gọi hotline 1800 1212 để được hỗ trợ cụ thể hơn.';
|
| 1296 |
+
|
| 1297 |
+
// Prepare messages for AI
|
| 1298 |
chatHistory.push({role:'user',content:msg});
|
|
|
|
| 1299 |
|
| 1300 |
+
let systemPrompt=`Bạn là chuyên gia tư vấn thiết bị nhà bếp tại Malloca Việt Nam — thân thiện, nhiệt tình và am hiểu sâu về sản phẩm. Tên bạn là Malloca AI.
|
| 1301 |
+
|
| 1302 |
+
PHONG CÁCH TRẢ LỜI:
|
| 1303 |
+
- Trả lời như một nhân viên tư vấn thật sự: thân thiện, gọi khách là "anh/chị"
|
| 1304 |
+
- Phân tích nhu cầu khách hàng trước khi đề xuất sản phẩm
|
| 1305 |
+
- Giải thích TẠI SAO sản phẩm đó phù hợp (không chỉ liệt kê)
|
| 1306 |
+
- Dùng emoji tự nhiên (🔥 ✅ 👉 ⭐ 💡) nhưng không lạm dụng
|
| 1307 |
+
- Nếu khách hỏi mơ hồ, hỏi lại để hiểu rõ nhu cầu
|
| 1308 |
+
- Luôn kết thúc bằng câu hỏi mở hoặc gợi ý tiếp theo
|
| 1309 |
+
- Trả lời tối đa 3-4 đoạn, dùng **in đậm** cho tên sản phẩm và thông tin quan trọng
|
| 1310 |
|
| 1311 |
+
KHI ĐỀ XUẤT SẢN PHẨM:
|
| 1312 |
+
- Kèm link sản phẩm dạng: [Tên SP](/san-pham/{slug}/index.html)
|
| 1313 |
+
- Nêu 2-3 ưu điểm nổi bật của sản phẩm
|
| 1314 |
+
- So sánh nếu có nhiều lựa chọn phù hợp
|
| 1315 |
+
- Đề cập giá để khách tham khảo
|
| 1316 |
+
|
| 1317 |
+
SẢN PHẨM TÌM THẤY LIÊN QUAN ĐẾN CÂU HỎI CỦA KHÁCH:
|
| 1318 |
${productContext}
|
| 1319 |
|
| 1320 |
+
THÔNG TIN CỬA HÀNG:
|
| 1321 |
+
- 1979 sản phẩm từ 3 thương hiệu: Malloca (363 SP), Eurogold (1090 SP), Grob (526 SP)
|
| 1322 |
+
- 17 danh mục: bếp điện từ/gas, máy hút mùi, lò nướng, lò vi sóng, chậu rửa, vòi rửa, tủ lạnh/tủ rượu, máy rửa chén, thiết bị gia dụng nhỏ, phụ kiện tủ bếp/tủ áo...
|
| 1323 |
+
- Hotline: 1800 1212 (miễn phí)
|
| 1324 |
+
- Bảo hành chính hãng, miễn phí vận chuyển & lắp đặt`;
|
| 1325 |
|
| 1326 |
let messages=[{role:'system',content:systemPrompt}];
|
| 1327 |
+
// Keep last 8 messages for context
|
| 1328 |
+
let recent=chatHistory.slice(-8);
|
| 1329 |
messages.push(...recent);
|
| 1330 |
|
| 1331 |
chatBusy=true;
|
|
|
|
| 1333 |
showTyping();
|
| 1334 |
|
| 1335 |
try{
|
| 1336 |
+
// Auto-detect token from any variable name
|
| 1337 |
+
let vars=window.huggingface?.variables||{};
|
| 1338 |
+
let token=vars.HF_TOKEN||vars.VAISTUDIO||vars.AI_TOKEN||vars.TOKEN||'';
|
| 1339 |
+
// Filter out non-token values
|
| 1340 |
+
if(token&&!token.startsWith('hf_'))token='';
|
| 1341 |
+
|
| 1342 |
if(!token){
|
| 1343 |
hideTyping();
|
| 1344 |
// Smart local response without AI
|
|
|
|
| 1360 |
body:JSON.stringify({
|
| 1361 |
model:'Qwen/Qwen2.5-72B-Instruct',
|
| 1362 |
messages:messages,
|
| 1363 |
+
max_tokens:700,
|
| 1364 |
+
temperature:0.7,
|
| 1365 |
+
top_p:0.9
|
| 1366 |
})
|
| 1367 |
});
|
| 1368 |
|
|
|
|
| 1370 |
|
| 1371 |
if(!resp.ok){
|
| 1372 |
let err=await resp.text();
|
| 1373 |
+
console.error('Chat API error:',resp.status,err);
|
| 1374 |
+
appendMsg('bot',formatBotResponse('Xin lỗi, hệ thống AI đang bận. Đây là sản phẩm tôi tìm được cho anh/chị:',matchedProducts));
|
|
|
|
| 1375 |
chatBusy=false;document.getElementById('chatSend').disabled=false;
|
| 1376 |
return;
|
| 1377 |
}
|
|
|
|
| 1384 |
}catch(e){
|
| 1385 |
hideTyping();
|
| 1386 |
console.error('Chat error:',e);
|
| 1387 |
+
appendMsg('bot',formatBotResponse('Xin lỗi, đã có lỗi xảy ra. Đây là sản phẩm tôi tìm được cho anh/chị:',matchedProducts));
|
| 1388 |
}
|
| 1389 |
|
| 1390 |
chatBusy=false;
|
|
|
|
| 1423 |
<button class="chat-close" onclick="closeChat()"><i class="fas fa-times"></i></button>
|
| 1424 |
</div>
|
| 1425 |
<div class="chat-body" id="chatBody">
|
| 1426 |
+
<div class="chat-msg bot">Xin chào anh/chị! 👋 Em là <strong>Malloca AI</strong> — trợ lý tư vấn thiết bị nhà bếp.<br><br>Em có thể giúp anh/chị:<br>🔍 Tìm & so sánh sản phẩm phù hợp<br>💡 Tư vấn theo nhu cầu & ngân sách<br>📋 Giải đáp thông số kỹ thuật<br><br>Anh/chị cần tư vấn gì ạ?</div>
|
| 1427 |
</div>
|
| 1428 |
<div class="chat-suggestions" id="chatSuggestions">
|
| 1429 |
<div class="chat-sug" onclick="sendSuggestion(this)">Tư vấn bếp từ cho gia đình 4 người</div>
|