Copilotten.FurhatConnection
A FastAPI-based WebSocket bridge between a Furhat robot and the OpenAI Realtime API.
Furhat microphone (PCM16 audio @ 24 kHz)
│
▼
FastAPI /ws ──────► OpenAI Realtime API (gpt-4o-realtime-preview)
│ │ response.audio.delta → PCM16 audio
│◄─────────────────────┘
│ request_speak_audio_start/data/end
▼
Furhat robot (furhat-realtime-api)
Browser (monitor UI) ◄──── transcripts & status ──── FastAPI /ws
Installation
pip install furhat-bridge
Quick start
# Start the bridge server (binds to 0.0.0.0:8000 by default)
furhat-bridge
# Custom host/port
furhat-bridge --host 127.0.0.1 --port 9000
# Development mode with auto-reload
furhat-bridge --reload
# Or with uvicorn directly
uvicorn furhat_bridge.server:app --reload
Then open http://localhost:8000 in your browser, enter the Furhat IP address and your OpenAI API key, and click Connect.
Development (from source)
# Clone and install in editable mode
git clone https://github.com/Nedomkull-Mathematical-Modeling/Copilotten.FurhatConnection
cd Copilotten.FurhatConnection
pip install -e .
# Or install only the dependencies without packaging
pip install -r requirements.txt
uvicorn main:app --reload
Publishing to PyPI
pip install build twine
python -m build
twine upload dist/*
How it works
- The browser opens a WebSocket to
/wsand sends aconfigmessage with the Furhat IP and OpenAI API key. - The server connects to the Furhat robot using
furhat-realtime-api(AsyncFurhatClient) and to the OpenAI Realtime API via WebSocket. - On
session.created, the server configures the OpenAI session (audio in/out, server-side VAD, Whisper transcription) and triggers an initial greeting from Copilotten. - When OpenAI is generating a response, the Furhat microphone is paused. OpenAI's audio deltas are streamed directly to the Furhat robot for real-time lipsync playback.
- When Furhat finishes speaking (
response.speak.end), the microphone resumes and the user can speak. The Furhat microphone audio (PCM16, 24 kHz, mono) is forwarded to OpenAI usinginput_audio_buffer.append. - OpenAI's server-side VAD detects speech boundaries automatically.
- Transcripts (both user speech via Whisper and assistant replies) are displayed in the browser in real time.
Requirements
- Python 3.10+
- A Furhat robot accessible on the local network
- An OpenAI API key with access to the Realtime API
Metadata
Release files for furhat-bridge 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| furhat_bridge-0.1.0.tar.gz | 14.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| furhat_bridge-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.3 kB
Release files / furhat_bridge-0.1.0.tar.gz
| Download URL | furhat_bridge-0.1.0.tar.gz |
|---|---|
| Size | 14.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
351cf765e9c12bc472d45551913fa0a82c17e7f5ac0ac491a9062ccd26730174
|
|
BLAKE2b-256 checksum How to use checksums |
21d37fb7cd43f2fc79f00e66b132126e46810d149cfb86c75d696aee80321a6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.
Transparency logRelease files / furhat_bridge-0.1.0-py3-none-any.whl
| Download URL | furhat_bridge-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
400785b5cb128f797f8a29e13ac95a6ffce9c888b5dce8e43ade784505fb349d
|
|
BLAKE2b-256 checksum How to use checksums |
d2137d07dd9aefd3b6568dd154c1aa92e91b040b36d4a681fdb74e34e4fd5bbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 13, 2026.
Transparency log