diff --git a/vite/src/App.jsx b/vite/src/App.jsx index 7df1f47..44da444 100644 --- a/vite/src/App.jsx +++ b/vite/src/App.jsx @@ -8,7 +8,7 @@ function App() { return (
- Conversation + {/* Conversation */} {/* Flow */} Free Flow Settings diff --git a/vite/src/main.jsx b/vite/src/main.jsx index ce0d88c..9d070ab 100644 --- a/vite/src/main.jsx +++ b/vite/src/main.jsx @@ -20,7 +20,7 @@ createRoot(document.getElementById('root')).render( - } /> + } /> } /> } /> } /> diff --git a/vite/src/pages/flow_free.jsx b/vite/src/pages/flow_free.jsx index b1a1ac8..b4b2c11 100644 --- a/vite/src/pages/flow_free.jsx +++ b/vite/src/pages/flow_free.jsx @@ -10,7 +10,7 @@ import NumPad, { NUMPAD_TYPE } from "../comps/numpad"; import { Light } from "../comps/light"; import { useData } from "../util/useData"; import VoiceAnalysis from "../comps/voiceanalysis"; -import { sendOsc, OSC_ADDRESS, updatePrompt, onOscMessageReceived } from "../util/osc"; +import { sendOsc, OSC_ADDRESS, updatePrompt, onOscMessageReceived, sendOscStatus } from "../util/osc"; import { DebugControl, TEST_PROMPT } from "../comps/debug"; import { useUser } from "../util/useUser"; @@ -239,6 +239,7 @@ export function FreeFlow(){ // setChatWelcome(false); // setChatStatus(ChatStatus.Clear); // break; + case 'summary': console.log('Getting summary...'); @@ -298,6 +299,7 @@ export function FreeFlow(){ sendOsc(OSC_ADDRESS.COUNTDOWN, '0'); // Reset countdown for non-chat cues } + sendOscStatus(`${data.id}#playcue#${cue.id}`); console.log('~~~~ clear pause timer'); if(refPauseTimer.current) clearTimeout(refPauseTimer.current); @@ -354,6 +356,7 @@ export function FreeFlow(){ resetTranscript(); // Reset transcript after cue ends + sendOscStatus(`${data.id}#endcue#${cue.id}`); if(cue.auto) { playCue(cuelist.find(c => c.id === cue.nextcue)); diff --git a/vite/src/util/chat.js b/vite/src/util/chat.js index 1499b0b..1951f5f 100644 --- a/vite/src/util/chat.js +++ b/vite/src/util/chat.js @@ -1,8 +1,8 @@ import { fetch } from '@tauri-apps/plugin-http'; -import { params } from './system_prompt'; +import { DefaultParams } from './system_prompt'; import { sendOsc, OSC_ADDRESS, updatePrompt } from './osc'; import { invoke } from '@tauri-apps/api/core'; -import { useData } from './useData'; + const DELAY_SEND_PROMPT = 1000; // Delay in milliseconds before sending the prompt @@ -27,7 +27,7 @@ export async function sendChatMessage(messages, data, isLastMessage = false) { ]) : ([ { role: "system", - content: params.last_prompt + content: DefaultParams.last_prompt } ]); diff --git a/vite/src/util/osc.js b/vite/src/util/osc.js index 7d6c06d..a1d6097 100644 --- a/vite/src/util/osc.js +++ b/vite/src/util/osc.js @@ -17,6 +17,9 @@ export const OSC_ADDRESS={ DISCARD: 'discard', PASSWORD: '/password', HINT:'/hint', + + CLIENT_STATUS:'/client', + CLIENT_INPUT:'/client_input', } @@ -71,4 +74,27 @@ export function onOscMessageReceived(callback) { }catch(error){ console.error('Error setting up OSC message listener:', error); } +} + +export async function sendOscStatus(message) { + + if(message === undefined || message === null) { + console.warn('sendOscStatus: message is empty, skipping'); + return; + } + // if(key!=OSC_ADDRESS.HINT && message === '') { + // return; + // } + + try{ + console.log(`Sending OSC Status:${message}`); + await invoke('send_osc_message', { + key: OSC_ADDRESS.CLIENT_STATUS, + message: message.toString(), + host:`0.0.0.0:0`, + target: '192.168.234.255:7000', + }); + }catch (error){ + console.error('Error sending OSC message:', error); + } } \ No newline at end of file diff --git a/vite/src/util/system_prompt.js b/vite/src/util/system_prompt.js index 044db06..cc107c9 100644 --- a/vite/src/util/system_prompt.js +++ b/vite/src/util/system_prompt.js @@ -1,4 +1,5 @@ -export const params={ +export const DefaultParams={ + id:0, system_prompt:`你是一位具有同理心的 AI 助理,透過溫柔的中文對話,引導使用者回想並表達一段內心的遺憾或未竟之事。 你的任務是協助使用者逐步揭開這段記憶的情緒層次,並在每一階段輸出一句 英文圖像生成 Prompt,讓這段過往漸漸具象為一幅畫面。 以溫柔、自然、短句式中文引導,每次只問使用者一個問題。 @@ -13,7 +14,7 @@ export const params={ summary_prompt:`幫我把以下一段話整理成一段文字,以第一人稱視角作為當事人的文字紀念,文字內容 50 字以內:`, } -export const ParamKeys=Object.keys(params); +export const ParamKeys=Object.keys(DefaultParams); // export const welcome_prompt="請開始引導使用者回想一段內心的遺憾或未竟之事。"; diff --git a/vite/src/util/useData.jsx b/vite/src/util/useData.jsx index b853dd1..ded9531 100644 --- a/vite/src/util/useData.jsx +++ b/vite/src/util/useData.jsx @@ -1,6 +1,6 @@ import { createContext, useContext, useEffect, useState } from "react"; import { BaseDirectory, readTextFile, exists, writeTextFile, mkdir } from "@tauri-apps/plugin-fs"; -import { ParamKeys } from "./system_prompt"; +import { ParamKeys, DefaultParams } from "./system_prompt"; import { path } from '@tauri-apps/api'; import { openPath } from '@tauri-apps/plugin-opener'; @@ -34,7 +34,7 @@ export function DataProvider({children}) { console.warn("Missing keys in output:", missingKeys); // Fill missing keys with default values missingKeys.forEach(key => { - output[key] = params[key] || ""; // Use params[key] as default value + output[key] = DefaultParams[key] || ""; // Use params[key] as default value }); }