#amazon-web-services #boto3 #amazon-sagemaker
#amazon-web-services #boto3 #amazon-sagemaker
Вопрос:
Я пытаюсь вызвать конечную точку AWS SageMaker с помощью следующего простого кода с использованием boto3
import boto3
session = boto3.Session(profile_name='mlacc',
region_name='us-west-2')
sagemaker_client = session.client('sagemaker-runtime')
request_body = "{n "requestSource": "unittest",n "clusters": [{n "clusterMetadata": {n "
""clusterId": "id1",n "topic": ["corona virus", "Donald Trump"],n "
""clusterSize": 2n },n "documents": [{n "uid": "1",n "
""content": "content2",n "domain": "CNN.com",n "title": "This is a "
"title",n "similarityScore": 1.3,n "published_at": 1566264017,n "
""domain_rank": 1,n "trust_domain_score": 1n }, {n "uid": "2","
"n "content": "content2",n "domain": "CNN.com",n "title": "
""This is a title",n "similarityScore": 1.3,n "published_at": 1566264017,"
"n "domain_rank": 1,n "trust_domain_score": 1n }, {n "uid": "
""2",n "content": "content3",n "domain": "CNN.com",n "title": "
""This is a title",n "similarityScore": 1.3,n "published_at": 1566264017,"
"n "domain_rank": 1,n "trust_domain_score": 1n }]n }]n}"
response = sagemaker_client.invoke_endpoint(
EndpointName='myEndpoint22',
Body=request_body,
ContentType='application/json',
)
response_json = response['Body'].read().decode('utf-8')
print(response_json)
Я получаю следующую ошибку при запуске этого кода
Traceback (most recent call last):
File "/Users/rppatwa/Desktop/WorkDocs/CodePlayground/SimplePythonProject/src/PrototypeTesting/SummarizationLocal.py", line 205, in <module>
main()
File "/Users/rppatwa/Desktop/WorkDocs/CodePlayground/SimplePythonProject/src/PrototypeTesting/SummarizationLocal.py", line 186, in main
ContentType='application/json',
File "/Users/rppatwa/anaconda3/lib/python3.7/site-packages/botocore/client.py", line 316, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Users/rppatwa/anaconda3/lib/python3.7/site-packages/botocore/client.py", line 635, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received client error (400) from model with message "Unable to parse data as JSON. Make sure the Content-Type header is set to "application/json"". See https://us-west-2.console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEventViewer:group=/aws/sagemaker/Endpoints/KeyurshaASMLModel in account 753843489946 for more information.
Если я встрою тело (не используя request_json), этот вызов завершится успешно. Пожалуйста, дайте мне знать, чего мне не хватает.
Спасибо
Комментарии:
1. удалите конечную запятую после типа содержимого и попробуйте импортировать json json.dumps (request_body), чтобы убедиться, что json действителен, и выполните test=json.dumps(request_body).encode () затем передайте test в тело как Body=test
2. Это сработало для меня. Большое спасибо за ваш ответ, Прабхакар!
3. Спасибо, Рахул. Я написал ответ. Пожалуйста, отметьте этот случай как ответ, если это помогло.
Ответ №1:
Вам нужно удалить конечную запятую после ContentType='application/json',
и попробовать приведенный ниже фрагмент для передачи JSON в поле body.
import json
json.dumps(request_body)
test=json.dumps(request_body).encode()
Это также подтвердит передаваемый вами JSON.Теперь передайте тест телу для вызова конечной точки.