NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)