Note: I'm using Google Gemini free API tier. I sacrificed some quality by limiting LLM input output to not exceed free tier. If "error" shows up, it means free tier exceeded.