File size: 2,475 Bytes
4ff45b3
670e9a7
4ff45b3
fd9552e
 
4ff45b3
fd9552e
3ab287a
4ff45b3
 
c7ed502
 
 
3ab287a
c7ed502
 
 
 
 
 
 
01601b9
 
 
 
 
 
 
4ff45b3
c4e364e
670e9a7
c4e364e
4ff45b3
c4e364e
7825141
 
 
c4e364e
670e9a7
 
f234692
6f92dc6
4ff45b3
7825141
8620950
c7ed502
8620950
3ab287a
 
7825141
 
 
3ab287a
 
 
 
 
 
 
 
 
 
 
 
 
7825141
 
 
 
 
 
0834a09
7825141
 
 
 
0834a09
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
75
76
77
78
---
title: Patient Virtuel · Français en médecine dentaire
emoji: 🦷
colorFrom: red
colorTo: gray
sdk: gradio
sdk_version: 6.16.0
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

Hackathon submission for [build-small-hackathon](https://huggingface.co/build-small-hackathon).

**Track**: Backyard AI — a real tool for a real learner: a dental hygienist training professional French.

Uses `gradio.Server` with a custom HTML/CSS/JS frontend (Off-Brand Award entry).

**Llama Champion badge**: Model runs through the llama.cpp runtime via `llama-cpp-python` with flash attention and L4 GPU optimizations.

**Off the Grid badge**: Zero cloud APIs. STT → faster-whisper (local), LLM → Gemma 4 (local), TTS → piper-tts (local neural, `fr_FR-siwis-medium` voice).

See [`space_README.md`](space_README.md) for the full description.

📖 [Field Notes](FIELD_NOTES.md) — architecture decisions, lessons learned, and the story behind the app.
📡 [Agent Trace](https://huggingface.co/datasets/build-small-hackathon/patient-virtuel-trace) — curated build log on HF Hub (Sharing is Caring badge).

[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)

## Architecture

```
src/
  server_app.py       → gr.Server backend (API endpoints)
  core.py             → Shared session logic
  llm_engine.py       → Gemma 4 26B-A4B via Modal (llama.cpp runtime)
  stt_engine.py       → faster-whisper via Modal
  tts_engine.py       → piper-tts (local neural, fr_FR-siwis-medium)
  prompts.py          → System prompts
  parse_feedback.py   → Feedback parsing
frontend/
  custom_index.html   → Custom vanilla HTML/CSS/JS frontend
  style.css           → Styles
modal/
  modal_app.py        → Modal deployments (llama.cpp + CUDA)
```

## Running locally

```bash
pip install -r requirements.txt
python src/server_app.py
```

## Deploying to HF Spaces

The Space uses `space_README.md` as its README and `src/server_app.py` as the entry point.