# 🇸🇳 Wolof Everyday Chatbot — SunuTech
**Team SunuTech — Applied Generative and Agentic AI, AIMS Senegal**
A conversational chatbot in Wolof covering everyday topics (culture, education, agriculture, health, transport) and Wolof orthography correction, fine-tuned from Qwen/Qwen3-0.6B with LoRA.
---
## 📁 Project Structure
```
sunutech-wolof-chatbot/
├── src/
│ └── context_state_machine.py # IDF-weighted retrieval + safety filter
├── hf_space/
│ ├── app.py # Gradio Space (gr.Blocks)
│ ├── context_state_machine.py # Copy for the Space
│ ├── requirements.txt
│ └── data/splits/ # Train + validation only (no eval leakage)
├── data/
│ ├── README.md # Data sources documentation
│ ├── chat_synth.json # ⚠️ large file — see note below
│ ├── wolof_synth.jsonl # ⚠️ large file — see note below
│ └── splits/ # Train / validation / eval splits
├── configs/
│ └── wolof_training_config.yml # LoRA training configuration
├── evaluation_by_category.py # Per-category evaluation script
├── test_assistant_only_masking.py # Label masking verification
├── test_space_context_integration.py # Space integration test (no GPU needed)
├── DATA_SOURCING_GUIDE.md # How to fetch aya & soynade on Kaggle
├── MODEL_CARD_DRAFT.md # Draft model card
├── TEAM_GUIDE.md # Team coordination guide
├── INDIVIDUAL_NOTES.md # Per-member notes
└── STATUS.md # What is done / what remains
```
---
## ⚠️ Large Data Files
The large data files (`chat_synth.json`, `wolof_synth.jsonl`, `data/splits/chat_synth_train.json`, etc.) are excluded from this repository via `.gitignore`.
**To get the data:**
- `synth` data was generated as course material — contact the team.
- `aya` and `soynade` sources must be downloaded from Kaggle — see `DATA_SOURCING_GUIDE.md`.
---
## 🚀 Quick Start …