Chainlit support via callbacks. Two ways to use these:
* if interacting directly with a `ChatAgent`, use `ChainlitAgentCallbacks(agent)` to inject callbacks into the Agent.
* if using a `Task`, use `ChainlitTaskCallbaks(task)` to recursievely inject callbacks into the task's Agent and those of any sub-tasks.
Callbacks here: https://github.com/langroid/langroid/blob/main/langroid/agent/callbacks/chainlit.py
See extensive examples here: https://github.com/langroid/langroid/tree/main/examples/chainlit