def run(
        self,
        video_id: str,
        collection_id: str,
        language: str = "english",
        notes: str = "",
        *args,
        **kwargs,
    ) -> AgentResponse:
        """
        Adds subtitles to the specified video using the provided style configuration.

        :param str video_id: The unique identifier of the video to process.
        :param str collection_id: The unique identifier of the collection containing the video.
        :param str language: A string specifying the language for the subtitles.
        :param str notes: A String specifying the style of the language used in subtitles
        :param args: Additional positional arguments.
        :param kwargs: Additional keyword arguments.
        :return: The response indicating the success or failure of the subtitle addition operation.
        :rtype: AgentResponse
        """
        try:
            self.video_id = video_id
            self.videodb_tool = VideoDBTool(collection_id=collection_id)
            target_language = language.lower()

            self.output_message.actions.append(
                "Retrieving the subtitles in the video's original language"
            )
            video_content = VideoContent(
                agent_name=self.agent_name,
                status=MsgStatus.progress,
                status_message="Processing...",
            )
            self.output_message.push_update()

            try:
                self.videodb_tool.get_transcript(video_id, text=False)
            except InvalidRequestError:
                logger.info(
                    f"Transcript not available for video {video_id}. Indexing spoken words.."
                )
                self.output_message.actions.append("Indexing video spoken words..")
                self.output_message.push_update()

                self.videodb_tool.index_spoken_words(video_id)

            self.output_message.content.append(video_content)
            self.output_message.actions.append(
                "Translating the subtitles into the target language.."
            )
            self.output_message.push_update()

            try:
                subtitles = self.videodb_tool.translate_transcript(
                    video_id=video_id,
                    language=target_language,
                    additional_notes=notes,
                )

            except Exception as e:
                logger.error(f"Translation failed: {e}")
                video_content.status = MsgStatus.error
                video_content.status_message = "Translation failed. Please try again."
                self.output_message.publish()
                return AgentResponse(
                    status=AgentStatus.ERROR,
                    message=f"Translation failed: {str(e)}",
                )

            if notes:
                self.output_message.actions.append(
                    f"Refining the language with additional notes: {notes}"
                )

            self.output_message.actions.append(
                "Overlaying the subtitles onto the video"
            )
            self.output_message.push_update()

            stream_url = self.add_subtitles_using_timeline(subtitles)
            video_content.video = VideoData(stream_url=stream_url)
            video_content.status = MsgStatus.success
            video_content.status_message = f"Subtitles in {language} have been successfully added to your video. Here is your stream."
            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 adding subtitles to the video."
            )
            self.output_message.publish()
            return AgentResponse(status=AgentStatus.ERROR, message=str(e))

        return AgentResponse(
            status=AgentStatus.SUCCESS,
            message="Subtitles added successfully",
            data={"stream_url": stream_url},
        )

        Adds subtitles to the specified video using the provided style configuration.

        :param str video_id: The unique identifier of the video to process.
        :param str collection_id: The unique identifier of the collection containing the video.
        :param str language: A string specifying the language for the subtitles.
        :param str notes: A String specifying the style of the language used in subtitles
        :param args: Additional positional arguments.
        :param kwargs: Additional keyword arguments.
        :return: The response indicating the success or failure of the subtitle addition operation.
        :rtype: AgentResponse
        
backend/director/agents/subtitle.py