Hello! I am not an expert, but would like to help.
I had a somewhat related project before: Fine-tuning an SLM for a low-resource language. It didn’t really succeed, but I learned a few things that might be useful here.
- LLM: I think the model you use matters a lot. If you mainly need simple responses and basic tasks, very small models such as Qwen3.5-0.8B can actually be useful, although they can struggle with grammar and more complex Persian. You could also try larger multilingual models in the 2–4B range and compare them on your actual tasks rather than judging only by parameter count.
- TTS: I found some small Persian TTS models that may be worth testing. Piper Persian voices are quite lightweight and decent, while Ava-82M is another option. In my experience, I also tried OmniVoice (quantized version) myself and got good results, although it is considerably heavier and needs more compute / memory.
One other approach you could consider is making the language part hybrid. use a very small model such as Qwen3.5-0.8B for easy requests and route more complicated requests to a larger local or cloud model. That could reduce resource usage while keeping better quality when it matters.
I also wanted to point out that if the ASR (as an example) produces an incorrect or low-quality output for the next phase, it could lead to unexpected behavior downstream. Because of this, I recommend checking the inputs and outputs of every phase individually. This would make it easier to identify where problems originate and understand which parts of the architecture are actually weak.
Although, looking at the replies, John and negdev have already covered a lot of this much better than I have, so consider my message more as additional help rather than a primary reference.