<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start_or_update_helper_process(self, agent_metadata: AgentMetadata):
 """ Examines the agent metadata to see if the agent needs a helper process. If the process is not running yet, create the process. Once the process is running, feed the agent metadata to it. If a process is created here, the pid will be added to the agent metadata. """


        helper_req = agent_metadata.helper_process_request

        if helper_req is not None:
            if helper_req.key not in self.helper_process_map:
                metadata_queue = mp.Queue()
                if helper_req.python_file_path is not None:
                    process = mp.Process(target=run_helper_process,
                                         args=(helper_req.python_file_path, metadata_queue, self.quit_event,
                                               helper_req.options))
                    process.daemon = True
                    process.start()
                    agent_metadata.pids.add(process.pid)

                    self.helper_process_map[helper_req.key] = metadata_queue

                if helper_req.executable is not None:
                    # TODO: find a nice way to pass the options dict as arguments
                    process = subprocess.Popen([helper_req.executable])

                    agent_metadata.pids.add(process.pid)

                    self.helper_process_map[helper_req.key] = metadata_queue

            metadata_queue = self.helper_process_map[helper_req.key]
            metadata_queue.put(agent_metadata)