在不使用液体库的情况下获得贴标作业中的任务输入值

时间:2019-07-01 05:26:01

标签: amazon-sagemaker

我正在写一个自定义的Sagemaker Ground Truth作业,我不知道如何在不使用taskInput的Liquid形式的情况下获取{{ task.input }}值。

我到处搜索,查找了localStorage,js变量和html本身。

2 个答案:

答案 0 :(得分:0)

您无法完全摆脱Liquid,但可以通过将整个{{task.input}}转移到JS上下文中来最大程度地减少其使用。最初,我们尝试将Liquid Mustachios直接插入自定义UI的标签中,但没有用(即使在Sagemaker自定义UI的上下文中也不可用-即使Liquid的文档指出这应该起作用,甚至提供了示例)。

相反,我们将task.input的json形式插入一个隐藏的div中,并通过评估该div的内容来实例化js对象

<div id="hidden_conversation">{{task.input | json }}</div>
<script type="text/javascript">
  taskInput=eval($("#hidden_conversation").text());
</script>

答案 1 :(得分:0)

您需要添加skip_autoescape过滤器,否则Liquid将使您的JSON HTML安全(不再使用JSON)。

模板内容

<script>
    let x = {{ task.input.x | skip_autoescape }};
</script>

输入对象

{"x": ["foo", "bar"]}

渲染输出

<script>
    let x = ["foo","bar"];
</script>

我使用命令行尝试这些操作。这就是通话的样子。 template.liquid包含上面的模板内容。

aws sagemaker render-ui-template \
--ui-template "$(jq -csR '{"Content":.}' < template.liquid)" \
--task '{"Input":"{\"x\": [\"foo\",\"bar\"]}"}' \
--role-arn 'arn:aws:iam::00000000000:role/service-role/some-role' \
|jq -r .RenderedContent