Kubeflow Pipelines 我们如何使用内联存储创建带有嵌入式 iFrame 的静态 HTML 可视化?

Kubeflow Pipelines How can we create static HTML visualization with embedded iFrame using inline storage?

我想知道如何使用内联存储为 kubeflow 管道创建一个简单的静态 HTML 可视化?
我的用例是我想传递一个带有原始 html 的字符串,其中包含一个简单的 iframe.

文档中的示例对我不起作用 (kfp sdk v1)。
这是我遵循的文档:https://www.kubeflow.org/docs/components/pipelines/sdk/output-viewer/#web-app

谢谢

更新:
我测试了来自 kfp sdk v2 的 Output[HTML],它可以工作,但我遇到了其他问题。
首先,Kubeflow html 查看器创建一个带有空白 src 和 srcdoc="your static html" 的 iframe。这使得无法在您的 html 中使用 iframe,因为您有一个嵌套的 iframe(来自 html 查看器的父级和来自实际 html 的嵌套)。

解法:

我找到了适用于所有用例的 KFP SDK v1 和 v2 的解决方案,我使用 markdown 可视化而不是 HTML 可视化。由于 markdown 支持内联 HTML,我可以直接将我的 html 粘贴到 markdown 输出。与使用HTML可视化相比,这支持iframe。

下面是一些代码来说明解决方案:

from kfp.components import create_component_from_func


def markdown_vis(mlpipeline_ui_metadata_path: kfp.components.OutputPath()):
    import json

    metadata = {
    'outputs' : [
    {
      'storage': 'inline',
      'source': f"<iframe src=\"https://www.google.ca/\" frameborder=\"0\" allowFullScreen=\"true\" width=\"950\" height=\"600\"/>",
      'type': 'markdown',
    }]
    }

    with open(mlpipeline_ui_metadata_path, 'w') as metadata_file:
        json.dump(metadata, metadata_file)

markdown_op = create_component_from_func(markdown_vis)

我还测试了该文档并且它有效: