def get_answer(app: mod_tru_chain.TruChain, question: str) -> Tuple[str, str]:
    """
    Use the given `app` to respond to `question`. Return the answer text and
    sources elaboration text.
    """

    outs = app.with_(app.app, dict(question=question))

    result = outs["answer"]
    sources = outs["source_documents"]

    result_sources = "Sources:\n"

    temp = set()

    for doc in sources:
        src = doc.metadata["source"]
        if src not in temp:
            result_sources += " - " + doc.metadata["source"]
            if "page" in doc.metadata:
                result_sources += f" (page {int(doc.metadata['page'])})\n"
            else:
                result_sources += "\n"

            temp.add(src)

    return result, result_sources

    Use the given `app` to respond to `question`. Return the answer text and
    sources elaboration text.
    
examples/experimental/end2end_apps/trubot/trubot.py