Practice for Moot Court, built using Typescript + React.
Developed by the Emerging Media Lab at UBC (eml.ubc.ca) alongside Jon Festinger, Q.C., Nikos Harris, Q.C., and Barbara Wang BA, JD from UBC's Peter A Allard School of Law (allard.ubc.ca).
Now part of the Learning Technology Innovation Centre's LT Incubator (https://ltic.ubc.ca/learning-technology-incubator/)
- DeepMotion Animation/Rigging
- Judge Model
- [Rokoko AI Motion Capture]
- Refer to this documentation on how to release projects on github.
- Moot court releases: https://github.com/ubcemergingmedialab/MootCourt/releases
- Courtroom UI, hold/release controls, queued audio pause/resume, assessment calculations/data shape, and existing browser storage are retained. The migration does not fix or redesign the existing assessment metrics.
- A completed recording is converted in the browser to mono 24 kHz PCM, then sent over the local WebSocket. The Node service uses OpenAI Realtime for transcription and a spoken reply, and wraps returned PCM in WAV chunks for the existing style of queued playback. No audio files or new transcript database are written by the local service.
- The Canadian Socratic judge prompt from the supplied configuration is retained. The model is now a Realtime model, so wording and voice quality can differ from the old chat/TTS service. Defaults are
gpt-realtime-2.1,gpt-4o-mini-transcribe, andalloy; override the three corresponding values in.env.server.localif needed for your API project. - Each practice session has its own OpenAI conversation. If the connection drops, return to the menu and start a new practice session. Earlier conversation context is not restored. A recording may be up to 10 minutes; OpenAI currently limits an individual Realtime connection to 60 minutes.
Jon Festinger, Q.C. Nikos Harris, Q.C. Barbara Wang BA, JD
eml.ubc.ca
Maziyar Dowlatabadibazaz Rich Tape
- Development Documentation
- Project Wiki
- Revised App Structure: Needs to be updated with current code (March 2023)