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/

gefragt vor 4 Jahren316 Aufrufe
2 Antworten
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.

beantwortet vor 4 Jahren
  • 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

beantwortet vor 2 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen