main
reng 3 months ago
parent 9493f5c842
commit df0cef64f3
  1. 2
      vite/src/App.jsx
  2. 2
      vite/src/main.jsx
  3. 5
      vite/src/pages/flow_free.jsx
  4. 6
      vite/src/util/chat.js
  5. 26
      vite/src/util/osc.js
  6. 5
      vite/src/util/system_prompt.js
  7. 4
      vite/src/util/useData.jsx

@ -8,7 +8,7 @@ function App() {
return ( return (
<div className='w-full flex flex-row gap-2 justify-center py-2 px-8 *:bg-pink-200 *:px-2'> <div className='w-full flex flex-row gap-2 justify-center py-2 px-8 *:bg-pink-200 *:px-2'>
<a href="/">Conversation</a> {/* <a href="/">Conversation</a> */}
{/* <a href="/flow">Flow</a> */} {/* <a href="/flow">Flow</a> */}
<a href="/free-flow">Free Flow</a> <a href="/free-flow">Free Flow</a>
<a href="/settings">Settings</a> <a href="/settings">Settings</a>

@ -20,7 +20,7 @@ createRoot(document.getElementById('root')).render(
<BrowserRouter> <BrowserRouter>
<App /> <App />
<Routes> <Routes>
<Route path="/" element={<Conversation />} /> <Route path="/" element={<FreeFlow />} />
<Route path="/flow" element={<Flow />} /> <Route path="/flow" element={<Flow />} />
<Route path="/free-flow" element={<FreeFlow />} /> <Route path="/free-flow" element={<FreeFlow />} />
<Route path="/settings" element={<Settings />} /> <Route path="/settings" element={<Settings />} />

@ -10,7 +10,7 @@ import NumPad, { NUMPAD_TYPE } from "../comps/numpad";
import { Light } from "../comps/light"; import { Light } from "../comps/light";
import { useData } from "../util/useData"; import { useData } from "../util/useData";
import VoiceAnalysis from "../comps/voiceanalysis"; 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 { DebugControl, TEST_PROMPT } from "../comps/debug";
import { useUser } from "../util/useUser"; import { useUser } from "../util/useUser";
@ -239,6 +239,7 @@ export function FreeFlow(){
// setChatWelcome(false); // setChatWelcome(false);
// setChatStatus(ChatStatus.Clear); // setChatStatus(ChatStatus.Clear);
// break; // break;
case 'summary': case 'summary':
console.log('Getting summary...'); console.log('Getting summary...');
@ -298,6 +299,7 @@ export function FreeFlow(){
sendOsc(OSC_ADDRESS.COUNTDOWN, '0'); // Reset countdown for non-chat cues sendOsc(OSC_ADDRESS.COUNTDOWN, '0'); // Reset countdown for non-chat cues
} }
sendOscStatus(`${data.id}#playcue#${cue.id}`);
console.log('~~~~ clear pause timer'); console.log('~~~~ clear pause timer');
if(refPauseTimer.current) clearTimeout(refPauseTimer.current); if(refPauseTimer.current) clearTimeout(refPauseTimer.current);
@ -354,6 +356,7 @@ export function FreeFlow(){
resetTranscript(); // Reset transcript after cue ends resetTranscript(); // Reset transcript after cue ends
sendOscStatus(`${data.id}#endcue#${cue.id}`);
if(cue.auto) { if(cue.auto) {
playCue(cuelist.find(c => c.id === cue.nextcue)); playCue(cuelist.find(c => c.id === cue.nextcue));

@ -1,8 +1,8 @@
import { fetch } from '@tauri-apps/plugin-http'; 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 { sendOsc, OSC_ADDRESS, updatePrompt } from './osc';
import { invoke } from '@tauri-apps/api/core'; import { invoke } from '@tauri-apps/api/core';
import { useData } from './useData';
const DELAY_SEND_PROMPT = 1000; // Delay in milliseconds before sending the prompt 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", role: "system",
content: params.last_prompt content: DefaultParams.last_prompt
} }
]); ]);

@ -17,6 +17,9 @@ export const OSC_ADDRESS={
DISCARD: 'discard', DISCARD: 'discard',
PASSWORD: '/password', PASSWORD: '/password',
HINT:'/hint', HINT:'/hint',
CLIENT_STATUS:'/client',
CLIENT_INPUT:'/client_input',
} }
@ -72,3 +75,26 @@ export function onOscMessageReceived(callback) {
console.error('Error setting up OSC message listener:', 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);
}
}

@ -1,4 +1,5 @@
export const params={ export const DefaultParams={
id:0,
system_prompt:`你是一位具有同理心的 AI 助理,透過溫柔的中文對話,引導使用者回想並表達一段內心的遺憾或未竟之事。 system_prompt:`你是一位具有同理心的 AI 助理,透過溫柔的中文對話,引導使用者回想並表達一段內心的遺憾或未竟之事。
你的任務是協助使用者逐步揭開這段記憶的情緒層次並在每一階段輸出一句 英文圖像生成 Prompt讓這段過往漸漸具象為一幅畫面 你的任務是協助使用者逐步揭開這段記憶的情緒層次並在每一階段輸出一句 英文圖像生成 Prompt讓這段過往漸漸具象為一幅畫面
以溫柔自然短句式中文引導每次只問使用者一個問題 以溫柔自然短句式中文引導每次只問使用者一個問題
@ -13,7 +14,7 @@ export const params={
summary_prompt:`幫我把以下一段話整理成一段文字,以第一人稱視角作為當事人的文字紀念,文字內容 50 字以內:`, summary_prompt:`幫我把以下一段話整理成一段文字,以第一人稱視角作為當事人的文字紀念,文字內容 50 字以內:`,
} }
export const ParamKeys=Object.keys(params); export const ParamKeys=Object.keys(DefaultParams);
// export const welcome_prompt="請開始引導使用者回想一段內心的遺憾或未竟之事。"; // export const welcome_prompt="請開始引導使用者回想一段內心的遺憾或未竟之事。";

@ -1,6 +1,6 @@
import { createContext, useContext, useEffect, useState } from "react"; import { createContext, useContext, useEffect, useState } from "react";
import { BaseDirectory, readTextFile, exists, writeTextFile, mkdir } from "@tauri-apps/plugin-fs"; 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 { path } from '@tauri-apps/api';
import { openPath } from '@tauri-apps/plugin-opener'; import { openPath } from '@tauri-apps/plugin-opener';
@ -34,7 +34,7 @@ export function DataProvider({children}) {
console.warn("Missing keys in output:", missingKeys); console.warn("Missing keys in output:", missingKeys);
// Fill missing keys with default values // Fill missing keys with default values
missingKeys.forEach(key => { missingKeys.forEach(key => {
output[key] = params[key] || ""; // Use params[key] as default value output[key] = DefaultParams[key] || ""; // Use params[key] as default value
}); });
} }

Loading…
Cancel
Save