Issue with invoking start_human_loop on the API's

0

I am having an issue invoking the start_human_loop method on the Augmented AI API's.

Code:
def startHumanReview():

bucket= '{S3 Bucket name}'  
document = 'xxxx.pdf'  
s3_fname= 's3://%s/%s' % (bucket,document)  
inputContent = {  
		'initialValue': "Withdrawal",  
		'taskObject': s3_fname # the s3 object will be passed to the worker task UI to render  
		}  
client = boto3.client('sagemaker-a2i-runtime')  
response = client.start_human_loop(  
    HumanLoopName='ManualTEST011',  
    FlowDefinitionArn='{FlowARN}',  
    HumanLoopInput={  
    	"InputContent": json.dumps(inputContent)  
    }  
    )  

if name == "main":
startHumanReview()

Error:
Traceback (most recent call last):
File "test.py", line 138, in <module>
startHumanReview()
File "test.py", line 125, in startHumanReview
response = client.start_human_loop(
File "\AppData\Roaming\Python\Python38\site-packages\botocore\client.py", line 316, in _api_call
return self._make_api_call(operation_name, kwargs)
File "\AppData\Roaming\Python\Python38\site-packages\botocore\client.py", line 635, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the StartHumanLoop operation: Provided InputContent is not valid. Please use valid InputContent JSON and try your request again.

Any guidance on how to fix this issue?
The format of the inputContent is similar to what's described in the following
https://aws.amazon.com/blogs/machine-learning/object-detection-and-model-retraining-with-amazon-sagemaker-and-amazon-augmented-ai/

已提问 4 年前319 查看次数
2 回答
1

I was able to get it working. Actually it seems the issue had to do with the Workflow. I created a new custom workflow and no longer getting the error message.

已回答 4 年前
  • Thx! You saved me a lot of time. Got the same error and was tweaking the InputContent JSON and scratching my head for an hour!

  • I am new to textract and a2i. Just trying to understand. In below code..

    inputContent = {
    'initialValue': "Withdrawal",
    'taskObject': s3_fname # the s3 object will be passed to the worker task UI to render
    }

    Why 'initialValue': "Withdrawal". What does it mean?

0

For anyone struggling with this as well, the answer above didn't work for me. I was creating all my resources on the fly so the workflow wasn't the issue.

The issue for me was I was giving a list of dictionaries as the root. ie my string was [{"valid_json": "foobar", ...}, {...}]. While this is parsable by json.loads and was directly coming from a json.dumps call, AWS apparently wants an object as the root. This isn't explicitly mentioned in the docs and took quite a lot of headache to finally come to the realization.

TLDR: Don't use a list at the root, use an object

已回答 2 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则

相关内容