def run(
        self,
        collection_id: str,
        *args,
        **kwargs,
    ) -> AgentResponse:
        """
        Edits and combines the specified videos and audio files.

        :param list videos: List of video objects with id, start and end times
        :param list audios: Optional list of audio objects with id, start and end times
        :param args: Additional positional arguments
        :param kwargs: Additional keyword arguments
        :return: The response indicating the success or failure of the editing operation
        :rtype: AgentResponse
        """
        try:
            # Initialize first video's collection
            self.videodb_tool = VideoDBTool(collection_id=collection_id)
            self.iterations = 10
            self.stop_flag = False

            video_content = VideoContent(
                agent_name=self.agent_name,
                status=MsgStatus.progress,
                status_message="Processing...",
            )
            self.output_message.content.append(video_content)
            self.output_message.push_update()

            input_context = ContextMessage(
                content=f"{EDITING_PROMPT}", role=RoleTypes.user
            )

            # TODO: find a better way to do remove last of tool call from this.
            self.editing_context = self.session.reasoning_context[:-1]
            self.editing_context.append(input_context)

            it = 0
            while self.iterations > 0:
                self.iterations -= 1
                print("-" * 40, "Editing LLM iteration ", it, "-" * 40)
                if self.stop_flag:
                    break

                self.run_llm()
                it += 1

            print("-" * 40, "Ended Run", "-" * 40)

            stream_url = self.editing_response.data.get("edited_stream_url")
            if stream_url:
                video_content.video = VideoData(stream_url=stream_url)
                video_content.status = MsgStatus.success
                video_content.status_message = "Here is your stream."
            else:
                video_content.status = MsgStatus.error
                video_content.status_message = (
                    "An error occurred while editing the video."
                )
            self.output_message.publish()

        except Exception as e:
            logger.exception(f"Error in {self.agent_name} agent: {e}")
            video_content.status = MsgStatus.error
            video_content.status_message = "An error occurred while editing the video."
            self.output_message.publish()
            return AgentResponse(status=AgentStatus.ERROR, message=str(e))

        return AgentResponse(
            status=AgentStatus.SUCCESS,
            message="Video editing completed successfully, and editing instruction for this run are attached in data ",
            data={"stream_url": "", "editing_instruction": self.editing_response},
        )

        Edits and combines the specified videos and audio files.

        :param list videos: List of video objects with id, start and end times
        :param list audios: Optional list of audio objects with id, start and end times
        :param args: Additional positional arguments
        :param kwargs: Additional keyword arguments
        :return: The response indicating the success or failure of the editing operation
        :rtype: AgentResponse
        
backend/director/agents/editing.py