How jacob-sauve/wallflower works
WallFlower is a Streamlit voice-based study tutor: learners upload notes, speak about the material, and receive Socratic prompts. The UI parses uploads and starts a threaded ElevenLabs conversation; recognized speech is sent to the Gemini-backed tutor, whose response is injected into the live conversation. The README describes course-material-aware feedback, but the sampled runtime drops the uploaded context when starting the conversation, so that connection is not shown as working. The implementation details of audio transport are largely delegated to the ElevenLabs SDK.
Main entry points: jamesBond_threaded.py Conversation client · streamlit_app.py Streamlit UI · interaction.py Socratic response generator
Components 10
Learner interface
- Streamlit UI
streamlit_app.py - Notes parser
interaction.py
Voice conversation
- Session runner
jamesBond_threaded.py - Conversation client
jamesBond_threaded.py - Audio interface
jamesBond_threaded.py
Socratic tutoring
- Transcript handler
jamesBond_threaded.py - Socratic response generator
interaction.py
Other components
- Learner
- ElevenLabs service
- OpenRouter / Gemini
Connections 11
- Learner → Streamlit UI: uploads notes / starts session
- Streamlit UI → Notes parser: parses upload
- Streamlit UI → Session runner: starts thread
- Session runner → Conversation client: creates and starts
- Conversation client → Audio interface: uses audio
- Conversation client → ElevenLabs service: starts session
- ElevenLabs service → Transcript handler: delivers transcript
- Transcript handler → Socratic response generator: requests prompt
- Socratic response generator → OpenRouter / Gemini: requests completion
- Transcript handler → Conversation client: sends response
- ElevenLabs service → Learner: plays spoken response