update flow

main
reng 3 months ago
parent 07febf5a8f
commit 68f785455e
  1. BIN
      vite/public/assets/ai/sfx-06-ai-04-record-03-ai-05-sfx-07.mp3
  2. 71
      vite/src/pages/flow_free.jsx
  3. 11
      vite/src/util/useUser.jsx

@ -14,6 +14,7 @@ import VoiceAnalysis from "../comps/voiceanalysis";
import { sendOsc, OSC_ADDRESS, updatePrompt, onOscMessageReceived, sendOscStatus } from "../util/osc"; import { sendOsc, OSC_ADDRESS, updatePrompt, onOscMessageReceived, sendOscStatus } from "../util/osc";
import { DebugControl, TEST_PROMPT } from "../comps/debug"; import { DebugControl, TEST_PROMPT } from "../comps/debug";
import { useUser } from "../util/useUser"; import { useUser } from "../util/useUser";
import { set } from 'zod/v4';
const CUELIST_FILE = 'cuelist_demo3.json'; const CUELIST_FILE = 'cuelist_demo3.json';
@ -56,6 +57,9 @@ export function FreeFlow(){
const [audioInput, setAudioInput] = useState(true); const [audioInput, setAudioInput] = useState(true);
const [autoSend, setAutoSend] = useState(true); const [autoSend, setAutoSend] = useState(true);
const [chatStatus, setChatStatus] = useState(ChatStatus.System); // System, User, Processing const [chatStatus, setChatStatus] = useState(ChatStatus.System); // System, User, Processing
const [padInput, setPadInput] = useState(null);
const { userId, setUserId, getFileId, setPassword, reset:resetUser, uploadHistory, setSummary, summary,setChoice,choice, getUploadFolder,getDataId } = useUser(); const { userId, setUserId, getFileId, setPassword, reset:resetUser, uploadHistory, setSummary, summary,setChoice,choice, getUploadFolder,getDataId } = useUser();
const refTimer=useRef(); const refTimer=useRef();
@ -258,6 +262,7 @@ export function FreeFlow(){
// clear unity hint // clear unity hint
sendOsc(OSC_ADDRESS.HINT, ''); // Clear hint message sendOsc(OSC_ADDRESS.HINT, ''); // Clear hint message
sendOsc(OSC_ADDRESS.INPUT, ''); // Clear input message sendOsc(OSC_ADDRESS.INPUT, ''); // Clear input message
sendOsc(OSC_ADDRESS.SPEECH, 'stop');
switch(cue.type){ switch(cue.type){
case 'chat': case 'chat':
@ -284,17 +289,28 @@ export function FreeFlow(){
setChatStatus(ChatStatus.Clear); // Set chat status to Processing setChatStatus(ChatStatus.Clear); // Set chat status to Processing
let message=refInput.current?.value?.trim() || history.map(el=>`${el.role}:${el.content}`).join('\n'); let message=refInput.current?.value?.trim() || history.map(el=>`${el.role}:${el.content}`).join('\n');
getSummary(message, data).then(summary_ => { console.log('Summary input message:', message);
if(!message || message.length==0) {
console.log('Summary:', summary_); setSummary();
console.log('no message input, clear summary');
onCueEnd(); // End the current cue after getting summary onCueEnd(); // End the current cue after getting summary
setSummary(()=>summary_?.result); }else{
refContainer.current.scrollTop = refContainer.current.scrollHeight; // Scroll to bottom
getSummary(message, data).then(summary_ => {
console.log('Summary:', summary_);
onCueEnd(); // End the current cue after getting summary
}).catch(error => { setSummary(()=>summary_?.result);
console.error('Error getting summary:', error); refContainer.current.scrollTop = refContainer.current.scrollHeight; // Scroll to bottom
});
}).catch(error => {
console.error('Error getting summary:', error);
});
}
break; break;
@ -367,7 +383,7 @@ export function FreeFlow(){
}else{ }else{
sendOsc(OSC_ADDRESS.HINT, ''); // Clear hint message sendOsc(OSC_ADDRESS.HINT, ''); // Clear hint message
} }
sendOsc(OSC_ADDRESS.SPEECH, 'stop');
refAudio.current?.pause(); // Pause any playing audio refAudio.current?.pause(); // Pause any playing audio
console.log('onCueEnd:', cue.id); console.log('onCueEnd:', cue.id);
@ -399,23 +415,34 @@ export function FreeFlow(){
function onNumpad(mess){ function onNumpad(mess){
console.log('Numpad input:', mess); setPadInput(mess);
}
useEffect(()=>{
if(padInput==null) return;
console.log('Numpad input:', padInput);
if(refCurrentCue.current?.callback!='numpad') return; if(refCurrentCue.current?.callback!='numpad') return;
let cue=refCurrentCue.current; let cue=refCurrentCue.current;
let next=cue.nextcue; let next=cue.nextcue;
switch(cue.numpad_type){ switch(cue.numpad_type){
case NUMPAD_TYPE.USERID: case NUMPAD_TYPE.USERID:
setUserId(()=>mess); setUserId(()=>padInput);
break; break;
case NUMPAD_TYPE.CHOICE: case NUMPAD_TYPE.CHOICE:
next=cue.branch[mess.toString()].nextcue; next=cue.branch[padInput.toString()].nextcue;
setChoice(cue.branch[mess.toString()].description); // Set choice for user input setChoice(()=>cue.branch[padInput.toString()].description); // Set choice for user input
break; break;
case NUMPAD_TYPE.PASSWORD: case NUMPAD_TYPE.PASSWORD:
setPassword(()=>mess); setPassword(()=>padInput);
// sendOsc(OSC_ADDRESS.PASSWORD, mess); // Send OSC password message // sendOsc(OSC_ADDRESS.PASSWORD, mess); // Send OSC password message
sendOsc(OSC_ADDRESS.EXPORT, `${getUploadFolder()}#${getDataId()}#${summary}#${getFileId(mess)}`); const user_input = history.find(msg => msg.role === 'user');
const default_image=!(user_input && user_input.content.trim() !== '');
sendOsc(OSC_ADDRESS.EXPORT, `${getUploadFolder()}#${getDataId()}#${summary||''}#${getFileId(padInput)}#${choice||''}#${default_image?'default':'generated'}`); // Send OSC export message
sendOsc(OSC_ADDRESS.CHOICE, choice); // Send OSC save choice message sendOsc(OSC_ADDRESS.CHOICE, choice); // Send OSC save choice message
break; break;
} }
@ -425,10 +452,9 @@ export function FreeFlow(){
console.log('Finish enter number, next cue:', next); console.log('Finish enter number, next cue:', next);
playCue(cuelist.find(c => c.id === next)); playCue(cuelist.find(c => c.id === next));
} }
}
function saveImage(){
sendOsc('/export', 'output/test.png'); // Send OSC message to save image },[padInput]);
}
useEffect(()=>{ useEffect(()=>{
@ -562,10 +588,13 @@ export function FreeFlow(){
refSpeechPaused.current=false; refSpeechPaused.current=false;
} }
sendOsc(OSC_ADDRESS.SPEECH, 'start');
sendOscStatus(OSC_ADDRESS.CLIENT_INPUT, `${data.id}#${transcript}`); sendOscStatus(OSC_ADDRESS.CLIENT_INPUT, `${data.id}#${transcript}`);
// Send current input via OSC // Send current input via OSC
} }
sendOsc(OSC_ADDRESS.SPEECH, 'start');
},[transcript]); },[transcript]);
@ -703,9 +732,7 @@ export function FreeFlow(){
<span></span> <span></span>
<span>UserId</span><span>{userId}</span> <span>UserId</span><span>{userId}</span>
<span>FileId</span><span>{getFileId()}</span> <span>FileId</span><span>{getFileId()}</span>
<button className="!bg-yellow-300 col-span-2" onClick={()=>{ <span>Choice</span><span>{choice || ''}</span>
saveHistory(history);
}}>Save Log</button>
</div> </div>

@ -1,4 +1,4 @@
import { createContext, useState, useEffect, useContext, use } from "react"; import { createContext, useState, useEffect, useContext, use, useRef } from "react";
import moment from "moment"; import moment from "moment";
import { updateUser } from "./backend"; import { updateUser } from "./backend";
import { useData } from "./useData"; import { useData } from "./useData";
@ -23,6 +23,8 @@ export function UserProvider({children}) {
const [choice, setChoice] = useState(null); const [choice, setChoice] = useState(null);
const [summary, setSummary] = useState(null); const [summary, setSummary] = useState(null);
const refChoice=useRef();
const {data}=useData(); const {data}=useData();
@ -114,11 +116,16 @@ export function UserProvider({children}) {
console.log("Session ID changed:", sessionId); console.log("Session ID changed:", sessionId);
}, [sessionId]); }, [sessionId]);
// useEffect(()=>{
// refChoice.current=choice;
// console.log("Choice changed:", choice);
// }, [choice]);
return ( return (
<userContext.Provider value={{ <userContext.Provider value={{
userId, setUserId, getFileId, getUploadFolder, userId, setUserId, getFileId, getUploadFolder,
reset, uploadHistory: saveHistory, setChoice, choice, reset, uploadHistory: saveHistory, setChoice,
choice,
setSummary, summary, getDataId, setSummary, summary, getDataId,
setPassword}}> setPassword}}>
{children} {children}

Loading…
Cancel
Save