mirror of
https://github.com/R0m1k3/EveFlow.git
synced 2026-10-11 17:29:03 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf52a610d4 | ||
|
|
3a52cf3ae0 | ||
|
|
5c6c3a9e30 | ||
|
|
6955721bdb |
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
# 🚀 EveFlow — Compagnon de Bureau Rétro-Futuriste 3D
|
# 🚀 EveFlow — Compagnon de Bureau Rétro-Futuriste 3D
|
||||||
|
|
||||||
[](https://github.com/R0m1k3/EveFlow)
|
[](https://github.com/R0m1k3/EveFlow)
|
||||||
[](https://github.com/R0m1k3/EveFlow/releases/tag/v1.0.4)
|
[](https://github.com/R0m1k3/EveFlow/releases/tag/v1.0.6)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
|
||||||
**EveFlow** est un compagnon de bureau Windows immersif haut de gamme, combinant une esthétique cyberpunk rétro-futuriste soignée et des technologies d'intelligence artificielle avancées. Il intègre un assistant virtuel en 3D nommé **Eve**, animé en temps réel avec des expressions émotionnelles dynamiques et synchronisé avec des services de synthèse vocale (TTS/STT) locaux et des architectures multi-agents.
|
**EveFlow** est un compagnon de bureau Windows immersif haut de gamme, combinant une esthétique cyberpunk rétro-futuriste soignée et des technologies d'intelligence artificielle avancées. Il intègre un assistant virtuel en 3D nommé **Eve**, animé en temps réel avec des expressions émotionnelles dynamiques et synchronisé avec des services de synthèse vocale (TTS/STT) locaux et des architectures multi-agents.
|
||||||
@@ -74,7 +74,7 @@ Pour générer l'exécutable d'installation Windows (`.exe`) autonome :
|
|||||||
```bash
|
```bash
|
||||||
npm run dist
|
npm run dist
|
||||||
```
|
```
|
||||||
*L'exécutable d'installation NSIS (`EveFlow Setup 1.0.4.exe`) et la build décompressée seront générés dans le dossier `./out/`.*
|
*L'exécutable d'installation NSIS (`EveFlow Setup 1.0.6.exe`) et la build décompressée seront générés dans le dossier `./out/`.*
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,14 @@ app.whenReady().then(() => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Autoriser l'accès aux périphériques de capture (microphone) sous Electron
|
||||||
|
session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => {
|
||||||
|
if (permission === 'media') {
|
||||||
|
return callback(true);
|
||||||
|
}
|
||||||
|
callback(false);
|
||||||
|
});
|
||||||
|
|
||||||
startWebhookServer();
|
startWebhookServer();
|
||||||
createWindow();
|
createWindow();
|
||||||
|
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "eveflow",
|
"name": "eveflow",
|
||||||
"version": "1.0.4",
|
"version": "1.0.6",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "eveflow",
|
"name": "eveflow",
|
||||||
"version": "1.0.4",
|
"version": "1.0.6",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-three/drei": "^9.105.0",
|
"@react-three/drei": "^9.105.0",
|
||||||
"@react-three/fiber": "^8.16.0",
|
"@react-three/fiber": "^8.16.0",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "eveflow",
|
"name": "eveflow",
|
||||||
"version": "1.0.4",
|
"version": "1.0.6",
|
||||||
"description": "Retro-futuristic Windows companion with 3D Eve bot, local TTS/STT, and multi-agent connectivity",
|
"description": "Retro-futuristic Windows companion with 3D Eve bot, local TTS/STT, and multi-agent connectivity",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
+18
-3
@@ -898,7 +898,7 @@ export const App: React.FC = () => {
|
|||||||
const [sttProvider, setSttProvider] = useState<'browser' | 'qwen3-asr'>('browser');
|
const [sttProvider, setSttProvider] = useState<'browser' | 'qwen3-asr'>('browser');
|
||||||
const [sttApiUrl, setSttApiUrl] = useState<string>('http://127.0.0.1:8000/v1');
|
const [sttApiUrl, setSttApiUrl] = useState<string>('http://127.0.0.1:8000/v1');
|
||||||
const [sttApiKey, setSttApiKey] = useState<string>('');
|
const [sttApiKey, setSttApiKey] = useState<string>('');
|
||||||
const [sttModel, setSttModel] = useState<string>('qwen3-asr');
|
const [sttModel, setSttModel] = useState<string>('Qwen/Qwen3-ASR-0.6B');
|
||||||
|
|
||||||
const [ttsApiUrl, setTtsApiUrl] = useState<string>('http://127.0.0.1:8000/v1');
|
const [ttsApiUrl, setTtsApiUrl] = useState<string>('http://127.0.0.1:8000/v1');
|
||||||
const [ttsApiKey, setTtsApiKey] = useState<string>('');
|
const [ttsApiKey, setTtsApiKey] = useState<string>('');
|
||||||
@@ -1187,7 +1187,14 @@ export const App: React.FC = () => {
|
|||||||
if (val) setSttApiKey(val);
|
if (val) setSttApiKey(val);
|
||||||
});
|
});
|
||||||
persistRead('eveflow_stt_model').then(val => {
|
persistRead('eveflow_stt_model').then(val => {
|
||||||
if (val) setSttModel(val);
|
if (val) {
|
||||||
|
if (val === 'qwen3-asr') {
|
||||||
|
setSttModel('Qwen/Qwen3-ASR-0.6B');
|
||||||
|
persistWrite('eveflow_stt_model', 'Qwen/Qwen3-ASR-0.6B');
|
||||||
|
} else {
|
||||||
|
setSttModel(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
persistRead('eveflow_tts_api_url').then(val => {
|
persistRead('eveflow_tts_api_url').then(val => {
|
||||||
if (val) setTtsApiUrl(val);
|
if (val) setTtsApiUrl(val);
|
||||||
@@ -1606,12 +1613,18 @@ export const App: React.FC = () => {
|
|||||||
const handleStartVocalRecord = () => {
|
const handleStartVocalRecord = () => {
|
||||||
if (!audioServiceRef.current) return;
|
if (!audioServiceRef.current) return;
|
||||||
|
|
||||||
|
setErrorMessage(null);
|
||||||
audioServiceRef.current.stopSpeaking();
|
audioServiceRef.current.stopSpeaking();
|
||||||
setIsSpeaking(false);
|
setIsSpeaking(false);
|
||||||
|
|
||||||
audioServiceRef.current.startListening(
|
audioServiceRef.current.startListening(
|
||||||
(text) => {
|
(text) => {
|
||||||
handleSendMessage(text);
|
if (text.trim()) {
|
||||||
|
handleSendMessage(text);
|
||||||
|
} else {
|
||||||
|
setErrorMessage("Aucune parole n'a été détectée. Veuillez parler distinctement près du micro.");
|
||||||
|
setCurrentEmotion('sad');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
setIsListening(true);
|
setIsListening(true);
|
||||||
@@ -1622,6 +1635,8 @@ export const App: React.FC = () => {
|
|||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
setIsListening(false);
|
setIsListening(false);
|
||||||
|
setErrorMessage(`Erreur de reconnaissance vocale : ${err}`);
|
||||||
|
setCurrentEmotion('sad');
|
||||||
console.error(err);
|
console.error(err);
|
||||||
},
|
},
|
||||||
sttLang
|
sttLang
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export class AudioService {
|
|||||||
private sttProvider: 'browser' | 'qwen3-asr' = 'browser';
|
private sttProvider: 'browser' | 'qwen3-asr' = 'browser';
|
||||||
private sttApiUrl = 'http://127.0.0.1:8000/v1';
|
private sttApiUrl = 'http://127.0.0.1:8000/v1';
|
||||||
private sttApiKey = '';
|
private sttApiKey = '';
|
||||||
private sttModel = 'qwen3-asr';
|
private sttModel = 'Qwen/Qwen3-ASR-0.6B';
|
||||||
private mediaRecorder: MediaRecorder | null = null;
|
private mediaRecorder: MediaRecorder | null = null;
|
||||||
private audioChunks: Blob[] = [];
|
private audioChunks: Blob[] = [];
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user