messenger.py (2829B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\auraguidance\client\messenger.py 2 from auraguidance.client.errors import AuraGuidanceServiceUnavailableError, AuraGuidanceError 3 from auraguidance.client.logger import logger 4 from eveProto.generated.eve_public.ai.assistant.chat.api.requests_pb2 import QueryRequest, QueryResponse 5 from six.moves.http_client import OK, responses as httplib_responses 6 from localization.client.cerberus_dynamic_formatted_message import CerberusDynamicFormattedMessage 7 from stackless_response_router.exceptions import TimeoutException, UnpackException 8 9 class AuraGuidanceMessenger(object): 10 11 def __init__(self, public_gateway): 12 self.public_gateway = public_gateway 13 14 def get_response(self, query, max_attempts = 1): 15 request = QueryRequest() 16 request.message = query 17 info_log = 'QueryRequest: \n{request}\n'.format(request=request) 18 status_code, payload = self._send_request(request, response_class=QueryResponse, info_log=info_log, max_attempts=max_attempts) 19 if status_code == OK: 20 logger.info(info_log + 'SUCCESS') 21 return (CerberusDynamicFormattedMessage.from_proto(payload.formatted_response), payload.fallback) 22 logger.info(info_log + 'FAILED') 23 response = payload.formatted_response if hasattr(payload, 'formatted_response') else 'payload has no formatted response attribute' 24 fallback = payload.fallback if hasattr(payload, 'fallback') else 'payload has no fallback attribute' 25 self._raise_generic_error(info_log, status_code, response, fallback) 26 27 def _send_request(self, request, response_class, info_log, timeout_seconds = 10, max_attempts = 1): 28 try: 29 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=response_class, timeout_seconds=timeout_seconds, max_attempts=max_attempts, retry_delay_in_seconds=1) 30 except (TimeoutException, UnpackException) as exc: 31 error_info = 'ERROR: %s' % exc.__class__.__name__ 32 info_log += error_info 33 logger.info(info_log) 34 request_cls = request.__class__.__name__ 35 raise AuraGuidanceServiceUnavailableError('%s, Failed to receive response from %s: %s' % (error_info, request_cls, exc)) 36 37 return (response_primitive.status_code, response) 38 39 @staticmethod 40 def _raise_generic_error(error_text, status_code, response, is_fallback): 41 error_text += 'QueryRequest for Aura Guidance raises %s(%s)\n%s\nIs fallback message:%s' % (httplib_responses[status_code], 42 status_code, 43 response, 44 is_fallback) 45 logger.info(error_text) 46 raise AuraGuidanceError(status_code, response, is_fallback)