<!-- Welcome! Thank you for contributing. These HTML comments will not render in the issue, but you can delete them once you've read them if you prefer! --> <!-- Thanks for thinking of a way to improve JupyterLab. If this solves a problem for you, then it probably solves that problem for lots of people! So the whole community will benefit from this request. Before creating a new feature request please search the issues for relevant feature requests. --> ### Problem As @dlqqq noted in #100, in the results of `%ai list`, it may be possible to use libraries like [py-markdown-table](https://github.com/hvalev/py-markdown-table) to generate markdown tables declaratively, based on a data structure, instead of imperatively, as we currently do. Some of our logic is declared twice, once for text and once for markdown format. ### Proposed Solution Use py-markdown-table, or a similar library, to generate markdown for the model list. Use markdown-style tables for text output. Remove remaining helper functions that use different logic for text and markdown parts.