[WIDGPT-57] Per code-review comments, move real work to a separate service and add simple caching.