Spaces:
Running
Running
feat: Greeting Trợ lý V giới thiệu V.AI STUDIO + tăng timeout 30s
Browse files- src/app.js +3 -3
src/app.js
CHANGED
|
@@ -28,7 +28,7 @@ const DEFAULT_INSTRUCTIONS = [
|
|
| 28 |
"NEVER guess facts. Use search_web/wikipedia. Get datetime first. Never mention tools.",
|
| 29 |
].join(" ");
|
| 30 |
|
| 31 |
-
const GREETING_INSTRUCTIONS = "You are
|
| 32 |
|
| 33 |
const STORAGE_KEYS = { voice:"avatar.voice", avatar:"avatar.model", instructions:"avatar.instructions", directUrl:"avatar.directUrl", subtitles:"avatar.subtitles" };
|
| 34 |
|
|
@@ -243,7 +243,7 @@ function _a(c){
|
|
| 243 |
c.addEventListener("status",e=>onStatus(e.detail.status));
|
| 244 |
c.addEventListener("queue",e=>{const{position}=e.detail;if(isGreetingSession)return;setCaption(position>0?`#${position} IN LINE…`:"ALMOST THERE…","live")});
|
| 245 |
c.addEventListener("transcript",e=>{const{role,text}=e.detail;if(role==="assistant"&&text){const n=smartNormalize(text);showSubtitles(n);addChatMessage("assistant",n)}});
|
| 246 |
-
c.addEventListener("response-finished",()=>{autoGreetingSent=true;fadeSubtitles();if(isGreetingSession)setTimeout(()=>void endSession(true),
|
| 247 |
c.addEventListener("toolcall",e=>{const{name,arguments:a,callId}=e.detail;runTool(name,a,callId)});
|
| 248 |
c.addEventListener("server-error",e=>console.warn("err:",e.detail.error));
|
| 249 |
c.addEventListener("error",()=>void endSession());
|
|
@@ -290,7 +290,7 @@ async function boot(){
|
|
| 290 |
makeDraggable();makeResizable();
|
| 291 |
setCaption("KHỞI ĐỘNG…");setMainButton("busy","Loading…");
|
| 292 |
const newsPromise=(settings.avatar==="vuong.glb"||!settings.avatar)?getHotNewsGreeting().catch(()=>null):Promise.resolve(null);
|
| 293 |
-
try{await Promise.race([stage.init({avatarUrl:settings.avatar?`/avatars/${settings.avatar}`:void 0,onprogress:e=>{if(e.lengthComputable)loading.textContent=`Loading avatar ${Math.min(100,Math.round(e.loaded/e.total*100))}%`}}),new Promise((_,rej)=>setTimeout(()=>rej(new Error("avatar timeout")),30000))])}catch(e){console.error(
|
| 294 |
preFetchedGreeting=await newsPromise;
|
| 295 |
loading.classList.add("done");
|
| 296 |
|
|
|
|
| 28 |
"NEVER guess facts. Use search_web/wikipedia. Get datetime first. Never mention tools.",
|
| 29 |
].join(" ");
|
| 30 |
|
| 31 |
+
const GREETING_INSTRUCTIONS = "You are V, a friendly helpful voice assistant avatar from V.AI STUDIO. Say exactly: 'Chào anh chị! Em là Trợ lý V, trợ lý AI trực quan của V.AI STUDIO. Em có thể giúp anh chị: một là nhấn nút Start để trò chuyện thoại — Anh chị nói tự nhiên, Em sẽ nghe và trả lời ngay; hai là nhấn nút Chat để nhắn tin; ba là nhấn nút V.AI STUDIO để xem 8.000 sản phẩm gia dụng: bếp, hút mùi, bồn cầu, bình nóng lạnh, khóa vân tay. Em sẽ trả lời ngắn gọn, dùng tiếng Việt, số đọc成 lời, tiền đồng. Rất vui được phục vụ anh chị!' Then end. No tools. No questions back.";
|
| 32 |
|
| 33 |
const STORAGE_KEYS = { voice:"avatar.voice", avatar:"avatar.model", instructions:"avatar.instructions", directUrl:"avatar.directUrl", subtitles:"avatar.subtitles" };
|
| 34 |
|
|
|
|
| 243 |
c.addEventListener("status",e=>onStatus(e.detail.status));
|
| 244 |
c.addEventListener("queue",e=>{const{position}=e.detail;if(isGreetingSession)return;setCaption(position>0?`#${position} IN LINE…`:"ALMOST THERE…","live")});
|
| 245 |
c.addEventListener("transcript",e=>{const{role,text}=e.detail;if(role==="assistant"&&text){const n=smartNormalize(text);showSubtitles(n);addChatMessage("assistant",n)}});
|
| 246 |
+
c.addEventListener("response-finished",()=>{autoGreetingSent=true;fadeSubtitles();if(isGreetingSession){setTimeout(()=>void endSession(true),3000)}});
|
| 247 |
c.addEventListener("toolcall",e=>{const{name,arguments:a,callId}=e.detail;runTool(name,a,callId)});
|
| 248 |
c.addEventListener("server-error",e=>console.warn("err:",e.detail.error));
|
| 249 |
c.addEventListener("error",()=>void endSession());
|
|
|
|
| 290 |
makeDraggable();makeResizable();
|
| 291 |
setCaption("KHỞI ĐỘNG…");setMainButton("busy","Loading…");
|
| 292 |
const newsPromise=(settings.avatar==="vuong.glb"||!settings.avatar)?getHotNewsGreeting().catch(()=>null):Promise.resolve(null);
|
| 293 |
+
try{await Promise.race([stage.init({avatarUrl:settings.avatar?`/avatars/${settings.avatar}`:void 0,onprogress:e=>{if(e.lengthComputable)loading.textContent=`Loading avatar ${Math.min(100,Math.round(e.loaded/e.total*100))}%`}}),new Promise((_,rej)=>setTimeout(()=>rej(new Error("avatar timeout")),30000))])}catch(e){console.error(e);loading.textContent="Avatar failed.";setCaption("AVATAR FAILED","error");return welcome}
|
| 294 |
preFetchedGreeting=await newsPromise;
|
| 295 |
loading.classList.add("done");
|
| 296 |
|