我正在写一个自定义的Sagemaker Ground Truth作业,我不知道如何在不使用taskInput
的Liquid形式的情况下获取{{ task.input }}
值。
我到处搜索,查找了localStorage,js变量和html本身。
答案 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