| title | Council of Chuckles | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| emoji | 🎭 | ||||||||||||||
| license | mit | ||||||||||||||
| colorFrom | purple | ||||||||||||||
| colorTo | yellow | ||||||||||||||
| sdk | gradio | ||||||||||||||
| python_version | 3.10.13 | ||||||||||||||
| app_file | app.py | ||||||||||||||
| short_description | Tiny AI advisors with jokes. | ||||||||||||||
| fullWidth | true | ||||||||||||||
| pinned | false | ||||||||||||||
| models |
|
||||||||||||||
| tags |
|
Council of Chuckles is a whimsical Gradio app built for the Hugging Face × Gradio Build Small Hackathon. It lets users summon a custom council from 100 historical and literary-inspired advisors, ask a question about a tricky or annoying situation by typing in their own language or speaking it aloud, and receive a staged response as advisor cards or a short Campfire Council dialogue.
The twist: these great thinkers are not here to give solemn advice. They bring their logic, worldview, and signature wisdom — but must deliver it playfully, like tiny-model philosophers who wandered into a comedy tent.
This submission targets the Thousand Token Wood track: playful, AI-native, and powered by small local/open-weight models. Users can type across Tiny Aya’s broad multilingual range via CohereLabs/tiny-aya-water, or speak a question through feather-light openai/whisper-small, making the council multilingual in both text and voice input. Because sometimes our messy moments feel lighter when we can ask — and be answered — in the language closest to us: English, German, Spanish, French, Hindi, Arabic, Tamil, Chinese, Japanese, Swahili, and more.
- Live Space: https://huggingface.co/spaces/build-small-hackathon/council-of-chuckles
- GitHub repo: https://github.com/jd-coderepos/council-of-chuckles
- Demo video: (intro to the APP and text-only mode demo; ~8 minutes) https://youtu.be/zQs34caEcas?si=REPj1d2SnUV4LLnC; (voice-only mode demo; ~4 minutes) https://youtu.be/-2Uzs6aKAwc?si=7uTxiidnOaDb0z1g
- Social post: Linkedin post
- Field notes: Blogpost on Making Great Thinkers Funny with Tiny Models
- Agent traces: https://huggingface.co/datasets/jdsouza/council-of-chuckles-codex-traces
A concise demo flow:
- Open the Council of Chuckles Space.
- Panel 1: Ask a question by typing it, or record a short voice input and transcribe it into the question box.
- Panel 2: Select council members manually, or use the surprise-pick option. You can pick as many advisors as you like.
- Panel 3: Choose Campfire Council Mode.
- Panel 3: Keep speaker selection on Best match to the question so the app can choose the most relevant voices from the selected council.
- Panel 3: Use 3–4 active speakers for the best council rhythm; the app can dynamically choose these from the larger council you selected — too many cooks spoil the philosophical soup. 😉
- Panel 3: Generate the council response.
- Panel 4: Review the Council Engine stage, active speakers, Campfire dialogue, and final verdict.
- Export the session as Markdown.
Check out some example runs in demo-example-sessions/. The folder contains exported Markdown sessions from multilingual text-mode demos in 🇬🇧 English, 🇨🇳 Mandarin Chinese, 🇫🇷 French, 🇩🇪 German, and 🌍 Arabic. The scenarios include 🎭 procrastination theater, ✅ a to-do list monster, 🕵️ awkward-message detective drama, 📬 inbox opera, and 🔑 a tiny lost-keys apocalypse — each with a different three-advisor council and generated response.
- Custom illustrated Gradio interface
- 100 advisor profiles in
data/advisors.json - Searchable advisor selection with category filtering
- Four response modes: Mastermind, Comic Relief, Council, and Campfire Council
- Lightweight analysis of topic, emotion, user need, and advisor archetype
- Advisor matching by best fit, balanced council composition, or random surprise
- Safety routing for crisis language, harmful humor, and high-stakes advice topics
- Lazy model loading and fallback generation for deployment reliability
- Markdown session export
Council of Chuckles is not just a prompt wrapper around a small language model. Before generation, the app runs a lightweight programmed Council Engine that routes the user’s input through several steps:
User input
→ safety router
→ topic / emotion / need analysis
→ advisor matching
→ archetype balancing
→ active speaker selection
→ dialogue planning
→ prompt building
→ small-model generation or fallback generation
→ final verdict
The interface exposes this engine panel so users can see the detected themes, needs, selected voices, and speaker strategy before reading the council response.
🛠️ The design explores a simple idea: small models do not always need fine-tuning to produce distinctive behavior. With custom role design, dynamic prompting, message routing, and iterative refinement, a small open-weight model can support a playful multi-perspective interaction while keeping the user experience transparent.
| Component | Model | Parameters | Used for |
|---|---|---|---|
| Multilingual text generation | CohereLabs/tiny-aya-water |
3.35B | Advisor responses and council dialogue |
| Voice input / ASR | openai/whisper-small |
244M | Optional speech-to-text transcription |
| Template fallback | none | 0B | Keeps the app usable when model loading or ZeroGPU quota fails |
Text interaction uses Tiny Aya Water, a 3.35B multilingual small model trained across 70+ languages, with especially strong coverage for European and Asia-Pacific languages. In the app, this lets users type questions and receive council responses in languages such as English, German, French, Spanish, Italian, Portuguese, Polish, Greek, Hindi, Tamil, Vietnamese, Mandarin Chinese, Japanese, Korean, Swahili, Arabic, and more.
Voice input uses Whisper small with a curated spoken-language selector in the app: English, German, Hindi, French, Spanish, Italian, Portuguese, Dutch, Polish, Greek, Arabic, Vietnamese, Mandarin Chinese, Japanese, and Korean.
Voice input is optional. The written question remains editable before generation, and the app continues to work in text mode if ASR is unavailable.
Candidate council member advisor profiles are stored in data/advisors.json. This file is the app’s character layer: it does not simply list 100 names, but defines how each advisor should reason, speak, and safely participate in the council.
Each advisor entry includes:
id,name,category, anderato identify and organize the advisorroleandcore_wisdomto define the advisor’s intellectual background and central perspectivesignature_style,mastermind_voice, andjokester_voiceto guide tone across serious and playful response modescatchphraseto add memorable personality to the generated responsesbest_forto support advisor matching based on the user’s questionavoidto provide safety and style boundaries for each persona
Together, these fields power advisor search, category filtering, speaker matching, response modes, and the app’s playful-but-grounded council behavior.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python app.pyThe app can be run locally after the model weights are downloaded. No external inference API is required for normal generation.
The app is designed as a Gradio Space and uses lazy model loading so the UI can render before the text model or ASR pipeline is loaded.
Recommended Space settings:
SDK: Gradio
Python: 3.10.13
App file: app.py
Hardware: ZeroGPU
Useful environment variables:
TEXT_MODEL_ID=CohereLabs/tiny-aya-water
ASR_MODEL_ID=openai/whisper-small
ENABLE_VOICE_INPUT=true
ENABLE_ENGLISH_FALLBACK_MODEL=false
If model access fails on the Space, add an HF_TOKEN secret with read access and make sure the Space owner has accepted any required model access terms.
Council of Chuckles is designed for light reflection and playful perspective-shifting, not professional decision-making. Its routing and prompt design add caution around medical, legal, financial, immigration, tax, investment, and other high-stakes topics, keeping responses general and reminding users to seek qualified professional advice when needed.
The humor prompts are also bounded: the app is designed to avoid cruel, hateful, discriminatory, demeaning, or identity-based jokes, as well as terms that mock protected traits, personal hardship, trauma, self-harm, disability, religion, ethnicity, gender, sexuality, or nationality. When sensitive or crisis-like language appears, the prompt strategy prioritizes supportive, non-comedic wording over persona performance.
This project was built using OpenAI Codex as a coding agent. Vibe coding with Codex supported the implementation of the Gradio app structure, council orchestration logic, UI refinements, fallback behavior, and submission-readiness checks.
A big thank you to the Gradio team, especially Yuvi, and to all the Build Small Hackathon partners for creating such a generous playground for small-model experimentation. The hackathon resources — from Hugging Face Spaces and ZeroGPU to Codex credits and the field-guide tooling — made it possible to build, test, polish, and ship a playful local/open-weight AI app in the spirit of the jam. 🎭🚀✨