def process()

in processors/slack.py [0:0]


    def process(self, output_var='slack'):
        if 'api' not in self.config and 'mode' not in self.config:
            raise NotConfiguredException('No Slack API call specified.')
        if 'token' not in self.config:
            raise NotConfiguredException('No Slack token specified.')
        if 'request' not in self.config:
            self.config['request'] = {}

        mode = self._jinja_expand_string(
            self.config['mode'], 'mode') if 'mode' in self.config else 'api'

        token = self._jinja_expand_string(self.config['token'], 'token')
        slack_api = None
        if mode == 'api':
            slack_api = self._jinja_expand_string(self.config['api'], 'api')
        request_params = self._jinja_expand_dict_all(self.config['request'],
                                                     'request')

        mode = self._jinja_expand_string(
            self.config['mode'], 'mode') if 'mode' in self.config else 'api'

        if mode == 'processMessages' or mode == 'lastImage':
            if 'messages' not in self.config:
                raise NotConfiguredException('No Slack messages specified.')
            if 'appId' not in self.config:
                raise NotConfiguredException('No Slack app ID specified.')
            app_id = self._jinja_expand_string(self.config['appId'], 'app_id')
            multi_modal = self._jinja_expand_bool(
                self.config['multimodal'],
                'multimodal') if 'multimodal' in self.config else False
            messages = self._jinja_expand_expr(self.config['messages'],
                                               'messages')

            no_question = self._jinja_expand_string(
                self.config['noQuestionPrompt'], 'no_question_prompt'
            ) if 'noQuestionPrompt' in self.config else "Answer the question in this audio clip or image."

            processed = []
            if 'messages' in messages:
                messages = messages['messages']

            for message in messages:
                new_message = None
                if 'app_id' in message:
                    if message['app_id'] == app_id:
                        parts = self._slack_message_to_parts(
                            message, token, multi_modal, no_question)
                        if len(parts) > 0:
                            new_message = {'role': 'MODEL', 'parts': parts}
                else:
                    parts = self._slack_message_to_parts(
                        message, token, multi_modal, no_question)
                    if len(parts) > 0:
                        new_message = {'role': 'USER', 'parts': parts}
                if new_message:
                    processed.append(new_message)

            # Prepend an initial prompt that can be instructions or such
            if 'prompt' in self.config:
                prompt_added = False
                for msg_idx, msg in enumerate(processed):
                    if msg['role'] == 'USER':
                        for part_idx, part in enumerate(msg['parts']):
                            if 'text' in part:
                                processed[msg_idx]['parts'][part_idx][
                                    'text'] = self._jinja_expand_string(
                                        self.config['prompt'],
                                        'prompt') + " " + processed[msg_idx][
                                            'parts'][part_idx]['text']
                                prompt_added = True
                                break
                    if prompt_added:
                        break

            if mode == 'lastImage':
                if len(processed) > 0:
                    last_message = processed[len(processed) - 1]
                    for part in last_message['parts']:
                        if 'inlineData' in part:
                            if part['inlineData']['mimeType'][0:6] == 'image/':
                                return {output_var: part['inlineData']['data']}
                return {output_var: None}
            return {output_var: processed}

        if slack_api == 'conversations.list':
            slack_response = self.call_slack(self.config['api'], token,
                                             request_params, True)
            self.logger.debug('Slack API %s responded.' % (slack_api),
                              extra={
                                  'slack_request': request_params,
                                  'slack_response': slack_response
                              })
            return {
                output_var: slack_response,
            }

        if slack_api == 'conversations.history':
            slack_response = self.call_slack(self.config['api'], token,
                                             request_params)
            self.logger.debug('Slack API %s responded.' % (slack_api),
                              extra={
                                  'slack_request': request_params,
                                  'slack_response': slack_response
                              })
            return {
                output_var: slack_response,
            }

        if slack_api == 'conversations.replies':
            slack_response = self.call_slack(self.config['api'], token,
                                             request_params, True)
            self.logger.debug('Slack API %s responded.' % (slack_api),
                              extra={
                                  'slack_request': request_params,
                                  'slack_response': slack_response
                              })
            return {
                output_var: slack_response,
            }

        return {
            output_var: None,
        }