# Wolof Audio Assistant
A small browser demo for a Wolof-first assistant for Senegalese users who may prefer Wolof over French. Jiema is being built toward a local, low-memory voice stack.
```text
Wolof voice or transcript -> Wolof ASR -> small local LLM -> simple Wolof answer -> optional Wolof TTS
```
The app does not require a domain selector. It accepts Wolof, French, and mixed Wolof-French input, then asks the model to infer whether the request is about agriculture, transport, health, administration, education, finance, or general daily help.
See PROPOSAL.md for the product/demo proposal.
## Run
```bash
npm install
OPENAI_API_KEY=your_key npm run dev
```
Then open:
```text
localhost
```
Without `OPENAI_API_KEY`, the original Whisper path is disabled. Text answers can still run through the local backend paths described below.
## Local Pipeline
The current local pipeline server is experimental and runs on your machine:
```bash
python3 server/jiema_pipeline_server.py
```
Default local models:
```text
ASR: sokho2/mms-300m-wolof
LLM: google/gemma-4-E2B-it-qat-mobile-transformers
TTS: facebook/mms-tts-wlx
```
Then point the Node app at it:
```bash
JIEMA_PIPELINE_URL=
127.0.0.1 npm run dev
```
Useful local endpoints:
```text
GET /api/health
POST /api/warmup/all
POST /api/answer
POST /api/transcribe
POST /api/synthesize
```
Mac prototype note: `google/gemma-4-E2B-it-qat-mobile-transformers` loads through Transformers/MPS on the tested Mac, but text generation currently returns ` `. The model remains the mobile/QAT target, while the Mac path is mainly useful for memory and integration experiments until the runtime issue is fixed.
## Legacy Local Chat Endpoint
Jiema also supports an Ollama-style local chat endpoint for earlier Sunflower/Gemma experiments.
The backend calls an Ollama-style `/api/chat` endpoint:
```bash
LOCAL_CHAT_MODEL=Sunflower-Gemma4-E2B \
LOCAL_CHAT_URL=
localhost \
OPENAI_API_KEY=your …