Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
dc86b32
add(event): events to serialize and deserialize
Popochounet Jan 5, 2026
44680ff
evol(module): now use ModuleEvent
Popochounet Jan 5, 2026
4859fd0
evol(modules): use of ModuleEvent
Popochounet Jan 5, 2026
4b90c4a
wip(command): add CommandEvent (is not received yet)
Popochounet Jan 14, 2026
8438ee9
evol(control_channel): dealer register with auth(wip) then start
Popochounet Jan 15, 2026
29079c1
evol(agent): thread is now inside zmq classes
Popochounet Jan 15, 2026
31c8fb1
fix(core): agent and huri now exit cleanly
Popochounet Jan 15, 2026
3ad3368
evol(events): update events naming
Popochounet Jan 15, 2026
97f949d
wip(control_channel): huri can handle control
Popochounet Jan 22, 2026
9c2e564
remove(archi): old deprecated archi files
Popochounet Mar 16, 2026
2ac1433
refacto(module): is now a basic processor with one input and output type
Popochounet Mar 16, 2026
d6eae24
feat(session+EventGraph): has an EventGraph that connects modules and…
Popochounet Mar 16, 2026
efe6cf8
refacto(huri): huri is now a fastapi ray server, launching ray deploy…
Popochounet Mar 16, 2026
90b6d01
evol(launch_huri): launch deployement and bind them to main ray serve…
Popochounet Mar 16, 2026
3d6936c
wip(client): connect to huri via websocket, stream audio and receive …
Popochounet Mar 16, 2026
047a655
evol(MIC+STT): changes for new archi
Popochounet Mar 16, 2026
78513e9
add(Sender): module that sends huri output to client
Popochounet Mar 16, 2026
48e750b
remove(logger): deprecated logger
Popochounet Mar 16, 2026
4bc4b6b
feat(linter): added linter config file + Makefile (make lint)
Popochounet Mar 16, 2026
d5071e1
fix(linter): make lint
Popochounet Mar 16, 2026
06334b7
remove(config): deprecated config files + quick_launch.sh
Popochounet Mar 16, 2026
861d43e
Merge pull request #10 from Sentience-Robotics/aau/#9/refacto_ray
Popochounet May 2, 2026
aef8d0a
feat(config): module config and client config
Popochounet Mar 23, 2026
9ff235d
evol(module): type ModuleWithHandle
Popochounet Mar 23, 2026
e4fa54f
feat(factory): factory to build modules
Popochounet Mar 23, 2026
727b975
evol(launch_huri): can now be launch via ray serve config file
Popochounet Mar 23, 2026
5415fdd
evol(huri): can now build client config modules and run them
Popochounet Mar 23, 2026
1000fb8
feat(client): can now send config to huri
Popochounet Mar 23, 2026
5c641df
evol(stt): add STTHandle to STT
Popochounet Mar 23, 2026
1c748f5
evol(Makefile): mypy check untyped defs
Popochounet Mar 23, 2026
3ac16f8
remove(huri): useless module EMB
Popochounet May 3, 2026
d943276
evol(requirement): clean requirement
Popochounet May 3, 2026
8e0077f
feat(README): Getting Started, Usage + config template
Popochounet May 3, 2026
5e6be25
Merge pull request #11 from Sentience-Robotics/aau/#10/ray_config_files
Popochounet May 4, 2026
aab9b7c
wip(Embedding): pseudo module
Popochounet Mar 23, 2026
f397775
evol(events): error handling
Popochounet May 3, 2026
d57580f
evol(MIC): WebRTC vad to detect if speech, no longer a threshold
Popochounet May 3, 2026
9a8f8e2
evol(STT): use of faster whisper can transcript in real time + slidin…
Popochounet May 3, 2026
e102b0e
evol(client config): sample rate, frame duration + mic,stt modules args
Popochounet May 3, 2026
8d55348
evol(sender): now can send json serializable object only
Popochounet May 3, 2026
11f7f7f
fix(client config): wrong arg name
Popochounet May 3, 2026
2026836
feat(TAG): aggregate all transcription into one question
Popochounet May 3, 2026
3c2af5c
fix(linter): make lint
Popochounet May 3, 2026
0cb10ce
fix(TAG): some match would destroy sentence
Popochounet May 3, 2026
71ba721
evol(requirement): new modules
Popochounet May 3, 2026
60f9470
evol(config): useless config + handle
Popochounet May 3, 2026
747d1a1
evol(README): launch_huri without config file
Popochounet May 3, 2026
9ee07ba
Merge pull request #12 from Sentience-Robotics/aau/#11/speech_to_ques…
Popochounet May 4, 2026
661b1a1
Mvr/#44/connection handle (#13)
MatthiasvonRakowski May 6, 2026
592034c
Mvr/#14/ids managment (#19)
MatthiasvonRakowski May 18, 2026
9e089b8
feat(event): event data are now typed to be validated and serialisable
Popochounet May 18, 2026
26dd177
feat(client): client can now send multiple data, must be event data
Popochounet May 18, 2026
c3fac88
evol(config): update client config
Popochounet May 18, 2026
fffc646
fix(linting): make lint
Popochounet May 18, 2026
5e74669
Mvr/#17/launch docker (#21)
MatthiasvonRakowski May 22, 2026
cbf18e2
Merge remote-tracking branch 'origin/dev' into aau/#22/client_without…
Popochounet May 24, 2026
e6cd134
evol(client): moved save/load user id in new client class
Popochounet May 24, 2026
734ec67
fix(events): fix class comparision
Popochounet May 24, 2026
54b1fcd
evol(client): cleaner exit
Popochounet May 24, 2026
2576631
evol(huri): explicit client runtime error
Popochounet May 24, 2026
0a0bcf6
evol(rag): implemented event for rag
Popochounet May 24, 2026
230f9ea
feat(doxygen): added doxygen documentation
Popochounet May 25, 2026
dbc7f1a
Merge pull request #23 from Sentience-Robotics/aau/#22/client_without…
Popochounet May 25, 2026
d29711b
evol(huri): documentation
Popochounet May 25, 2026
06bf2ea
evol(EventGraph): documentation
Popochounet May 25, 2026
0a42748
evol(module): documentation
Popochounet May 25, 2026
d076dc3
evol(session): documentation
Popochounet May 25, 2026
5c3664b
evol(readme): presentation + folder/module structure + dev documenta…
Popochounet May 25, 2026
c97d63b
Merge pull request #26 from Sentience-Robotics/aau/#20/documentation
Popochounet May 26, 2026
8952bce
fix(readme): wrong documentation link
Popochounet May 26, 2026
5768b11
fix(readme): typo
Popochounet May 26, 2026
4e0904b
Merge pull request #27 from Sentience-Robotics/aau/#20/fix-doc-link
Popochounet May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,7 @@ cython_debug/

# PyPI configuration file
.pypirc

# Others
.trash
docs
2,934 changes: 2,934 additions & 0 deletions Doxyfile

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
lint:
black .
isort .
flake8 .
mypy . --check-untyped-defs

test:
pytest

check: lint test
89 changes: 87 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,88 @@
# speech-to-speech
# HuRI

1. python3.12
## Presentation

HuRI is an open-source research project focused on conversational AI for humanoid robots and virtual avatars.
HuRI provides a modular architecture that allows developers to design, implement, and run AI modules within customizable conversational pipelines defined by the user.
HuRI is launched as a multi-client server, to handle multiple client (robots) conversational requests.
The framework supports the implementation and integration of multiple AI modules, including:
Speech-to-Text (STT) and Text-to-Speech (TTS), Retrieval-Augmented Generation (RAG), Emotional analysis (EMO), Motion and gesture generation (MOV)

## Getting Started

### Prerequisites

- python 3.11.14
```sh
sudo apt install python3.11
```
- pip
```sh
sudo apt install python3-pip
```

### Installation

1. Clone the repo
```sh
git clone https://github.com/Sentience-Robotics/HuRI.git
```
2. Install pip packages
```sh
pip install -r requirements.txt
```

## Usage

#### Launch HuRI server:

```sh
serve run [config_file_path]
```

We use ray serve config file, doc [here](https://docs.ray.io/en/latest/serve/configure-serve-deployment.html).

You can also launch HuRI without config file:

```sh
python -m src.launch_huri
```

#### Launch Client:

```sh
python -m src.client --config [client_config_file_path]
```

We have custom yaml file to define modules to use and how they are initialized, template [here](config/client_template.yaml).

### Folder/Module structure

- #### root

Entrypoints:

HuRI: app.py & launch_huri.py \
Client: client.py

- #### Core

HuRI's Core classes:

client & client_senders \
events \
huri \
module \
session

- #### Modules

Modules implementation:

rag: rag's implementation \
speech_to_text: speech to text implementation, including MIC (vad), STT (speech to text) and TAG (text aggregator) \
utils: utility modules, like Sender (send event to Clients)

## Developper Documentation

HuRI's complete documentation is available [here](https://docs.sentience-robotics.fr/share/p1x9ikjkhf/p/hu-ri-documentation-f4amcndYQg).
34 changes: 0 additions & 34 deletions config/agent_input.yaml

This file was deleted.

36 changes: 0 additions & 36 deletions config/agent_io.yaml

This file was deleted.

28 changes: 28 additions & 0 deletions config/client_aux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
huri_url: ws://localhost:8000/session

topic_list: [question]

senders:
audio:
name: audio
args:
sample_rate: 16000
frame_duration: 0.030

modules:
mic:
name: mic
args:
vad_agressiveness: 3
silence_duration: 1.5
block_duration: ${inputs.audio.args.frame_duration}
logging: INFO
stt:
name: stt
args:
language: "en"
block_duration: ${inputs.audio.args.frame_duration}
logging: INFO
tag:
name: tag
logging: INFO
32 changes: 32 additions & 0 deletions config/client_aux2.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
huri_url: ws://localhost:8000/session

topic_list: [transcript, question, rag_response]

senders:
audio:
name: audio
args:
sample_rate: 16000
frame_duration: 0.030

modules:
mic:
name: mic
args:
vad_agressiveness: 3
silence_duration: 1.5
block_duration: ${senders.audio.args.frame_duration}
stt:
name: stt
args:
language: en
block_duration: ${senders.audio.args.frame_duration}
logging: INFO
tag:
name: tag
logging: INFO
rag:
name: rag
args:
language: en
tone: formal
25 changes: 25 additions & 0 deletions config/client_auxio.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
huri_url: ws://localhost:8000/session

topic_list: [question]

senders:
text:
name: text

modules:
mic:
name: mic
args:
vad_agressiveness: 3
silence_duration: 1.5
block_duration: ${senders.audio.args.frame_duration}
logging: INFO
stt:
name: stt
args:
language: en
block_duration: ${senders.audio.args.frame_duration}
logging: INFO
tag:
name: tag
logging: INFO
25 changes: 25 additions & 0 deletions config/client_template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# HuRI websocket server url
huri_url: ws://localhost:8000/session

# List of event topic the client will receive
topic_list: [topic1, topic2]

# Define senders to be used and their custom args
senders:
# sender tag can be anything
example:
# sender name must be in the list of available ClientSender in Client instance (src.client_sender:get_senders)
name: my_sender
# if my_sender init with "model", "sample_rate" and "refresh_rate" params, they can be customized here
args:
refresh_rate: infinite

# Define module to be used and their custom args
modules:
# module tag can be anything
example:
# module name must be in the list of available module in HuRI's instance (src.modules.modules:get_modules)
name: my_module
# if my_module init with "model", "sample_rate" and "hello" params, they can be customized here
args:
hello: world
15 changes: 15 additions & 0 deletions config/client_text.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
huri_url: ws://localhost:8000/session

topic_list: [question, rag_response]

senders:
text:
name: text

modules:
rag:
name: rag
args:
language: en
tone: formal
logging: INFO
40 changes: 32 additions & 8 deletions config/huri.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,35 @@
hostname: localhost
proxy_location: EveryNode

router:
port: 3000
http_options:
host: 0.0.0.0
port: 8000

event-proxy:
xsub: 5555
xpub: 5556
logging_config:
encoding: TEXT
log_level: INFO
logs_dir: null
enable_access_log: true
additional_log_standard_attrs: []

log-puller:
port: 8008
services:
qdrant:
port: 6333
image: "qdrant/qdrant:latest"
storage_volume: "qdrant_data"
ollama:
model: "mistral:7b"
image: "ollama/ollama:rocm"
gpu_devices: true
num_replicas: 1

applications:
- name: huri-app
route_prefix: /
import_path: src.app:app
runtime_env: { RAY_COLOR_PREFIX=1 }
deployments:
- name: HuRI
- name: RAGHandle
num_replicas: 2
- name: OllamaService
- name: QdrantService
31 changes: 31 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
[tool.black]
line-length = 88
target-version = ["py310"]

[tool.isort]
profile = "black"
line_length = 88
multi_line_output = 3
include_trailing_comma = true
skip_gitignore = true

[tool.flake8]
max-line-length = 88
extend-ignore = ["E203"]
exclude = """
__pycache__
venv
.venv
"""

[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
strict_optional = true
warn_unused_ignores = true
warn_return_any = true
warn_unused_configs = true

[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
Loading