File size: 2,385 Bytes
b05542b
670e9a7
b05542b
8d525d1
 
b05542b
f234692
c3a0314
3ab287a
b05542b
 
3ab287a
 
 
 
 
 
 
 
 
 
 
01601b9
 
 
 
 
 
 
b05542b
 
670e9a7
b05542b
7825141
b05542b
7825141
b05542b
 
 
 
7825141
b05542b
 
 
7825141
 
 
 
b05542b
 
9c8200e
f234692
9c8200e
b05542b
3ab287a
 
 
 
 
 
 
 
8d525d1
b05542b
8d525d1
b05542b
 
 
 
 
f234692
b05542b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
---
title: Patient Virtuel · Français en médecine dentaire
emoji: 🦷
colorFrom: yellow
colorTo: gray
sdk: gradio
sdk_version: 6.16.0
python_version: "3.12"
app_file: src/server_app.py
pinned: false
license: apache-2.0
tags:
  - hackathon
  - build-small-hackathon
  - backyard-ai
  - voice-ai
  - french-learning
  - dental
  - gradio
  - modal
  - llama-cpp
  - gemma
  - track:backyard
  - sponsor:modal
  - achievement:offgrid
  - achievement:offbrand
  - achievement:llama
  - achievement:sharing
  - achievement:fieldnotes
---

# Patient Virtuel · Français en médecine dentaire

A voice-based French practice tool for dental hygienists. Roleplay a 60-minute hygiene session with a virtual patient, then receive structured grammar and vocabulary feedback.

**Backyard AI** — built for a real learner training to improve professional French.

## How it works

1. Press the mic button and speak in French to the patient
2. The patient responds naturally, using French regionalisms
3. When you say "Fin de la séance", the app switches to tutor mode
4. Receive a structured recap with corrections and explanations

## Custom UI

This app uses `gradio.Server` with a fully custom HTML/CSS/JS frontend instead of the default Gradio component UI. The backend provides Gradio API endpoints while the frontend is a standalone vanilla HTML page using the `@gradio/client` JavaScript library.

## Model credits

- **LLM**: [Gemma 4 26B-A4B](https://huggingface.co/google/gemma-4-26B-A4B) via Modal (L4 GPU) — Apache 2.0
- **TTS**: [piper-tts](https://github.com/OHF-Voice/piper1-gpl) (local, `fr_FR-siwis-medium` voice)
- **STT**: [faster-whisper-large-v3-turbo](https://github.com/SYSTRAN/faster-whisper) via Modal (T4 GPU) — MIT

## Modal

Both GPU workloads (LLM + STT) run on Modal serverless containers. See `modal_app.py` for the full deployment config.

## Social

[Demo video](https://youtu.be/oP3KrlZFUPk) · [LinkedIn post](https://www.linkedin.com/posts/carlosduplar_my-wife-is-a-dentist-re-entering-the-workforce-activity-7471897489332289536-p5Ne)

## License

All components are Apache 2.0 or MIT licensed.

## Environment variables

| Variable | Purpose |
|---|---|
| `MODAL_ENDPOINT_LLM` | Modal endpoint for Gemma 4 LLM |
| `MODAL_ENDPOINT_WHISPER` | Modal endpoint for Whisper STT |
| `MODAL_AUTH_TOKEN` | Shared auth token (matching Modal's EXPECTED_TOKEN) |