Local AI voice tutor for mixed Polish-English speaking practice.
Local AI voice tutor for Polish speakers learning English. The learner can speak English and insert Polish words when vocabulary is missing. The system reconstructs the full English sentence, explains corrections and continues the conversation.
KotlinJetpack ComposeFastAPIPostgreSQLfaster-whisperOllamaQwenAndroid TTSLocal AI
SYSTEM IDENTITY
STATUSR&D
VERSION0.1
TYPEWorking proof of concept
DEVELOPMENTPaused after validation
01 / PROBLEM
The problem
When learning to speak English, stopping the conversation every time a single word is missing breaks fluency and confidence.
The idea behind KulAI Language Tutor was to allow the learner to keep speaking English and temporarily insert Polish words without interrupting the conversation.
02 / PROTOTYPE
Prototype
Voice input goes through three Whisper recognition passes for mixed Polish / English speech. Deterministic processing selects a canonical transcription, and the verbatim recognised learner message is kept in the conversation history, separate from the corrected English sentence.
Local voice tutor pipeline
Voice input
Three Whisper passes (PL/EN)
Canonical transcription selection
Teacher LLM
Better version + Polish Why
Conversation LLM
Persisted conversation
Language-aware Android TTS
The Teacher LLM reconstructs the full English sentence as a Better version and explains the corrections in Polish in a separate Why section. The Conversation LLM has a different responsibility: continuing the dialogue using the conversation history.
The conversation is persisted in PostgreSQL. Replies are split into Polish and English segments for language-aware Android TextToSpeech. The learner can replay both the tutor reply and the Better version.
03 / LESSONS
What I learned
One LLM call doing transcription selection, correction, explanation and conversation was too unstable.
Splitting responsibilities into deterministic processing, Teacher LLM and Conversation LLM significantly improved reliability.
Structured output validity does not equal language quality. A model can return perfectly valid JSON while giving a poor or incorrect grammatical explanation.
Smaller local models were fast enough, but teaching quality was insufficient.
The larger local model produced much better results, but inference latency on the available hardware was too high for a truly natural real-time voice conversation.
04 / CONCLUSION
R&D conclusion
The prototype successfully validated the complete local voice tutor pipeline.
The larger model delivered substantially better teaching quality, but its latency on the current hardware made natural real-time conversation impractical.
Further UI and prompt improvements were possible, but they would not solve the main performance bottleneck.
Development was therefore intentionally paused at v0.1. The project remains a working R&D proof of concept and a technical experiment rather than a production product.
For day-to-day English speaking practice I returned to ChatGPT, while keeping the project as a foundation for future experiments with faster local models and stronger hardware.
05 / VIDEO DEMO
Video demo
Working v0.1 prototype on a physical Android device.