{
    "name": "AssemblyAI Transcription and Speech AI Flow",
    "icon": null,
    "is_component": false,
    "endpoint_name": null,
    "data": {
        "nodes": [
            {
                "id": "Prompt-IO8Cq",
                "type": "genericNode",
                "position": {
                    "x": -1376.3296370680628,
                    "y": 928.8860970980681
                },
                "data": {
                    "type": "Prompt",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "from langflow.base.prompts.api_utils import process_prompt_template\nfrom langflow.custom import Component\nfrom langflow.inputs.inputs import DefaultPromptField\nfrom langflow.io import Output, PromptInput\nfrom langflow.schema.message import Message\nfrom langflow.template.utils import update_template_values\n\n\nclass PromptComponent(Component):\n    display_name: str = \"Prompt\"\n    description: str = \"Create a prompt template with dynamic variables.\"\n    icon = \"prompts\"\n    trace_type = \"prompt\"\n    name = \"Prompt\"\n\n    inputs = [\n        PromptInput(name=\"template\", display_name=\"Template\"),\n    ]\n\n    outputs = [\n        Output(display_name=\"Prompt Message\", name=\"prompt\", method=\"build_prompt\"),\n    ]\n\n    async def build_prompt(\n        self,\n    ) -> Message:\n        prompt = Message.from_template_and_variables(**self._attributes)\n        self.status = prompt.text\n        return prompt\n\n    def _update_template(self, frontend_node: dict):\n        prompt_template = frontend_node[\"template\"][\"template\"][\"value\"]\n        custom_fields = frontend_node[\"custom_fields\"]\n        frontend_node_template = frontend_node[\"template\"]\n        _ = process_prompt_template(\n            template=prompt_template,\n            name=\"template\",\n            custom_fields=custom_fields,\n            frontend_node_template=frontend_node_template,\n        )\n        return frontend_node\n\n    def post_code_processing(self, new_frontend_node: dict, current_frontend_node: dict):\n        \"\"\"\n        This function is called after the code validation is done.\n        \"\"\"\n        frontend_node = super().post_code_processing(new_frontend_node, current_frontend_node)\n        template = frontend_node[\"template\"][\"template\"][\"value\"]\n        # Kept it duplicated for backwards compatibility\n        _ = process_prompt_template(\n            template=template,\n            name=\"template\",\n            custom_fields=frontend_node[\"custom_fields\"],\n            frontend_node_template=frontend_node[\"template\"],\n        )\n        # Now that template is updated, we need to grab any values that were set in the current_frontend_node\n        # and update the frontend_node with those values\n        update_template_values(new_template=frontend_node, previous_template=current_frontend_node[\"template\"])\n        return frontend_node\n\n    def _get_fallback_input(self, **kwargs):\n        return DefaultPromptField(**kwargs)\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "template": {
                                "trace_as_input": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "template",
                                "value": "Provide a brief summary of the transcript.",
                                "display_name": "Template",
                                "advanced": false,
                                "dynamic": false,
                                "info": "",
                                "title_case": false,
                                "type": "prompt",
                                "_input_type": "PromptInput"
                            }
                        },
                        "description": "Create a prompt template with dynamic variables.",
                        "icon": "prompts",
                        "is_input": null,
                        "is_output": null,
                        "is_composition": null,
                        "base_classes": [
                            "Message"
                        ],
                        "name": "",
                        "display_name": "Prompt",
                        "documentation": "",
                        "custom_fields": {
                            "template": []
                        },
                        "output_types": [],
                        "full_path": null,
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Message"
                                ],
                                "selected": "Message",
                                "name": "prompt",
                                "hidden": null,
                                "display_name": "Prompt Message",
                                "method": "build_prompt",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "template"
                        ],
                        "beta": false,
                        "error": null,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "Prompt-IO8Cq"
                },
                "selected": false,
                "width": 384,
                "height": 324,
                "positionAbsolute": {
                    "x": -1376.3296370680628,
                    "y": 928.8860970980681
                },
                "dragging": false
            },
            {
                "id": "AssemblyAITranscriptionJobCreator-Idt7P",
                "type": "genericNode",
                "position": {
                    "x": -1957.7132501771657,
                    "y": 470.79685053457587
                },
                "data": {
                    "type": "AssemblyAITranscriptionJobCreator",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "audio_file": {
                                "trace_as_metadata": true,
                                "file_path": "fa69381c-d1c4-4535-bc23-bc2fb4956e1e/2024-09-26_16-47-01_sports_injuries.mp3",
                                "fileTypes": [
                                    "3ga",
                                    "8svx",
                                    "aac",
                                    "ac3",
                                    "aif",
                                    "aiff",
                                    "alac",
                                    "amr",
                                    "ape",
                                    "au",
                                    "dss",
                                    "flac",
                                    "flv",
                                    "m4a",
                                    "m4b",
                                    "m4p",
                                    "m4r",
                                    "mp3",
                                    "mpga",
                                    "ogg",
                                    "oga",
                                    "mogg",
                                    "opus",
                                    "qcp",
                                    "tta",
                                    "voc",
                                    "wav",
                                    "wma",
                                    "wv",
                                    "webm",
                                    "mts",
                                    "m2ts",
                                    "ts",
                                    "mov",
                                    "mp2",
                                    "mp4",
                                    "m4p",
                                    "m4v",
                                    "mxf"
                                ],
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "audio_file",
                                "value": "sports_injuries.mp3",
                                "display_name": "Audio File",
                                "advanced": false,
                                "dynamic": false,
                                "info": "The audio file to transcribe",
                                "title_case": false,
                                "type": "file",
                                "_input_type": "FileInput",
                                "load_from_db": false
                            },
                            "api_key": {
                                "load_from_db": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "api_key",
                                "value": null,
                                "display_name": "Assembly API Key",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
                                "title_case": false,
                                "password": true,
                                "type": "str",
                                "_input_type": "SecretStrInput"
                            },
                            "audio_file_url": {
                                "trace_as_input": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "audio_file_url",
                                "value": "",
                                "display_name": "Audio File URL",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "The URL of the audio file to transcribe (Can be used instead of a File)",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MessageTextInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "import os\n\nimport assemblyai as aai\nfrom loguru import logger\n\nfrom langflow.custom import Component\nfrom langflow.io import BoolInput, DropdownInput, FileInput, MessageTextInput, Output, SecretStrInput\nfrom langflow.schema import Data\n\n\nclass AssemblyAITranscriptionJobCreator(Component):\n    display_name = \"AssemblyAI Start Transcript\"\n    description = \"Create a transcription job for an audio file using AssemblyAI with advanced options\"\n    documentation = \"https://www.assemblyai.com/docs\"\n    icon = \"AssemblyAI\"\n\n    inputs = [\n        SecretStrInput(\n            name=\"api_key\",\n            display_name=\"Assembly API Key\",\n            info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n        ),\n        FileInput(\n            name=\"audio_file\",\n            display_name=\"Audio File\",\n            file_types=[\n                \"3ga\",\n                \"8svx\",\n                \"aac\",\n                \"ac3\",\n                \"aif\",\n                \"aiff\",\n                \"alac\",\n                \"amr\",\n                \"ape\",\n                \"au\",\n                \"dss\",\n                \"flac\",\n                \"flv\",\n                \"m4a\",\n                \"m4b\",\n                \"m4p\",\n                \"m4r\",\n                \"mp3\",\n                \"mpga\",\n                \"ogg\",\n                \"oga\",\n                \"mogg\",\n                \"opus\",\n                \"qcp\",\n                \"tta\",\n                \"voc\",\n                \"wav\",\n                \"wma\",\n                \"wv\",\n                \"webm\",\n                \"mts\",\n                \"m2ts\",\n                \"ts\",\n                \"mov\",\n                \"mp2\",\n                \"mp4\",\n                \"m4p\",\n                \"m4v\",\n                \"mxf\",\n            ],\n            info=\"The audio file to transcribe\",\n        ),\n        MessageTextInput(\n            name=\"audio_file_url\",\n            display_name=\"Audio File URL\",\n            info=\"The URL of the audio file to transcribe (Can be used instead of a File)\",\n            advanced=True,\n        ),\n        DropdownInput(\n            name=\"speech_model\",\n            display_name=\"Speech Model\",\n            options=[\n                \"best\",\n                \"nano\",\n            ],\n            value=\"best\",\n            info=\"The speech model to use for the transcription\",\n            advanced=True,\n        ),\n        BoolInput(\n            name=\"language_detection\",\n            display_name=\"Automatic Language Detection\",\n            info=\"Enable automatic language detection\",\n            advanced=True,\n        ),\n        MessageTextInput(\n            name=\"language_code\",\n            display_name=\"Language\",\n            info=\"\"\"\n            The language of the audio file. Can be set manually if automatic language detection is disabled. \n            See https://www.assemblyai.com/docs/getting-started/supported-languages for a list of supported language codes.\n            \"\"\",\n            advanced=True,\n        ),\n        BoolInput(\n            name=\"speaker_labels\",\n            display_name=\"Enable Speaker Labels\",\n            info=\"Enable speaker diarization\",\n        ),\n        MessageTextInput(\n            name=\"speakers_expected\",\n            display_name=\"Expected Number of Speakers\",\n            info=\"Set the expected number of speakers (optional, enter a number)\",\n            advanced=True,\n        ),\n        BoolInput(\n            name=\"punctuate\",\n            display_name=\"Punctuate\",\n            info=\"Enable automatic punctuation\",\n            advanced=True,\n            value=True,\n        ),\n        BoolInput(\n            name=\"format_text\",\n            display_name=\"Format Text\",\n            info=\"Enable text formatting\",\n            advanced=True,\n            value=True,\n        ),\n    ]\n\n    outputs = [\n        Output(display_name=\"Transcript ID\", name=\"transcript_id\", method=\"create_transcription_job\"),\n    ]\n\n    def create_transcription_job(self) -> Data:\n        aai.settings.api_key = self.api_key\n\n        # Convert speakers_expected to int if it's not empty\n        speakers_expected = None\n        if self.speakers_expected and self.speakers_expected.strip():\n            try:\n                speakers_expected = int(self.speakers_expected)\n            except ValueError:\n                self.status = \"Error: Expected Number of Speakers must be a valid integer\"\n                return Data(data={\"error\": \"Error: Expected Number of Speakers must be a valid integer\"})\n\n        language_code = self.language_code if self.language_code else None\n\n        config = aai.TranscriptionConfig(\n            speech_model=self.speech_model,\n            language_detection=self.language_detection,\n            language_code=language_code,\n            speaker_labels=self.speaker_labels,\n            speakers_expected=speakers_expected,\n            punctuate=self.punctuate,\n            format_text=self.format_text,\n        )\n\n        audio = None\n        if self.audio_file:\n            if self.audio_file_url:\n                logger.warning(\"Both an audio file an audio URL were specified. The audio URL was ignored.\")\n\n            # Check if the file exists\n            if not os.path.exists(self.audio_file):\n                self.status = \"Error: Audio file not found\"\n                return Data(data={\"error\": \"Error: Audio file not found\"})\n            audio = self.audio_file\n        elif self.audio_file_url:\n            audio = self.audio_file_url\n        else:\n            self.status = \"Error: Either an audio file or an audio URL must be specified\"\n            return Data(data={\"error\": \"Error: Either an audio file or an audio URL must be specified\"})\n\n        try:\n            transcript = aai.Transcriber().submit(audio, config=config)\n\n            if transcript.error:\n                self.status = transcript.error\n                return Data(data={\"error\": transcript.error})\n            else:\n                result = Data(data={\"transcript_id\": transcript.id})\n                self.status = result\n                return result\n        except Exception as e:\n            self.status = f\"An error occurred: {str(e)}\"\n            return Data(data={\"error\": f\"An error occurred: {str(e)}\"})\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "format_text": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "format_text",
                                "value": true,
                                "display_name": "Format Text",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Enable text formatting",
                                "title_case": false,
                                "type": "bool",
                                "_input_type": "BoolInput"
                            },
                            "language_code": {
                                "trace_as_input": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "language_code",
                                "value": "",
                                "display_name": "Language",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "\n            The language of the audio file. Can be set manually if automatic language detection is disabled. \n            See https://www.assemblyai.com/docs/getting-started/supported-languages for a list of supported language codes.\n            ",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MessageTextInput"
                            },
                            "language_detection": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "language_detection",
                                "value": false,
                                "display_name": "Automatic Language Detection",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Enable automatic language detection",
                                "title_case": false,
                                "type": "bool",
                                "_input_type": "BoolInput"
                            },
                            "punctuate": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "punctuate",
                                "value": true,
                                "display_name": "Punctuate",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Enable automatic punctuation",
                                "title_case": false,
                                "type": "bool",
                                "_input_type": "BoolInput"
                            },
                            "speaker_labels": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "speaker_labels",
                                "value": true,
                                "display_name": "Enable Speaker Labels",
                                "advanced": false,
                                "dynamic": false,
                                "info": "Enable speaker diarization",
                                "title_case": false,
                                "type": "bool",
                                "_input_type": "BoolInput",
                                "load_from_db": false
                            },
                            "speakers_expected": {
                                "trace_as_input": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "speakers_expected",
                                "value": "",
                                "display_name": "Expected Number of Speakers",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Set the expected number of speakers (optional, enter a number)",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MessageTextInput"
                            },
                            "speech_model": {
                                "trace_as_metadata": true,
                                "options": [
                                    "best",
                                    "nano"
                                ],
                                "combobox": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "speech_model",
                                "value": "best",
                                "display_name": "Speech Model",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The speech model to use for the transcription",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "DropdownInput"
                            }
                        },
                        "description": "Create a transcription job for an audio file using AssemblyAI with advanced options",
                        "icon": "AssemblyAI",
                        "base_classes": [
                            "Data"
                        ],
                        "display_name": "AssemblyAI Start Transcript",
                        "documentation": "https://www.assemblyai.com/docs",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": true,
                        "outputs": [
                            {
                                "types": [
                                    "Data"
                                ],
                                "selected": "Data",
                                "name": "transcript_id",
                                "display_name": "Transcript ID",
                                "method": "create_transcription_job",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "api_key",
                            "audio_file",
                            "audio_file_url",
                            "speech_model",
                            "language_detection",
                            "language_code",
                            "speaker_labels",
                            "speakers_expected",
                            "punctuate",
                            "format_text"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "AssemblyAITranscriptionJobCreator-Idt7P",
                    "description": "Create a transcription job for an audio file using AssemblyAI with advanced options",
                    "display_name": "AssemblyAI Start Transcript"
                },
                "selected": false,
                "width": 384,
                "height": 482,
                "positionAbsolute": {
                    "x": -1957.7132501771657,
                    "y": 470.79685053457587
                },
                "dragging": false
            },
            {
                "id": "AssemblyAITranscriptionJobPoller-F46nf",
                "type": "genericNode",
                "position": {
                    "x": -1408.0967182254753,
                    "y": 461.5039554434261
                },
                "data": {
                    "type": "AssemblyAITranscriptionJobPoller",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "transcript_id": {
                                "trace_as_metadata": true,
                                "list": false,
                                "trace_as_input": true,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "transcript_id",
                                "value": "",
                                "display_name": "Transcript ID",
                                "advanced": false,
                                "input_types": [
                                    "Data"
                                ],
                                "dynamic": false,
                                "info": "The ID of the transcription job to poll",
                                "title_case": false,
                                "type": "other",
                                "_input_type": "DataInput"
                            },
                            "api_key": {
                                "load_from_db": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "api_key",
                                "value": null,
                                "display_name": "Assembly API Key",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
                                "title_case": false,
                                "password": true,
                                "type": "str",
                                "_input_type": "SecretStrInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "import assemblyai as aai\n\nfrom langflow.custom import Component\nfrom langflow.io import DataInput, FloatInput, Output, SecretStrInput\nfrom langflow.schema import Data\n\n\nclass AssemblyAITranscriptionJobPoller(Component):\n    display_name = \"AssemblyAI Poll Transcript\"\n    description = \"Poll for the status of a transcription job using AssemblyAI\"\n    documentation = \"https://www.assemblyai.com/docs\"\n    icon = \"AssemblyAI\"\n\n    inputs = [\n        SecretStrInput(\n            name=\"api_key\",\n            display_name=\"Assembly API Key\",\n            info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n        ),\n        DataInput(\n            name=\"transcript_id\",\n            display_name=\"Transcript ID\",\n            info=\"The ID of the transcription job to poll\",\n        ),\n        FloatInput(\n            name=\"polling_interval\",\n            display_name=\"Polling Interval\",\n            value=3.0,\n            info=\"The polling interval in seconds\",\n            advanced=True,\n        ),\n    ]\n\n    outputs = [\n        Output(display_name=\"Transcription Result\", name=\"transcription_result\", method=\"poll_transcription_job\"),\n    ]\n\n    def poll_transcription_job(self) -> Data:\n        \"\"\"Polls the transcription status until completion and returns the Data.\"\"\"\n        aai.settings.api_key = self.api_key\n        aai.settings.polling_interval = self.polling_interval\n\n        # check if it's an error message from the previous step\n        if self.transcript_id.data.get(\"error\"):\n            self.status = self.transcript_id.data[\"error\"]\n            return self.transcript_id\n\n        try:\n            transcript = aai.Transcript.get_by_id(self.transcript_id.data[\"transcript_id\"])\n        except Exception as e:\n            error = f\"Getting transcription failed: {str(e)}\"\n            self.status = error\n            return Data(data={\"error\": error})\n\n        if transcript.status == aai.TranscriptStatus.completed:\n            json_response = transcript.json_response\n            text = json_response.pop(\"text\", None)\n            utterances = json_response.pop(\"utterances\", None)\n            transcript_id = json_response.pop(\"id\", None)\n            sorted_data = { \"text\": text, \"utterances\": utterances, \"id\": transcript_id}\n            sorted_data.update(json_response)\n            data = Data(data=sorted_data)\n            self.status = data\n            return data\n        else:\n            self.status = transcript.error\n            return Data(data={\"error\": transcript.error})\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "polling_interval": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "polling_interval",
                                "value": 3,
                                "display_name": "Polling Interval",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The polling interval in seconds",
                                "title_case": false,
                                "type": "float",
                                "_input_type": "FloatInput"
                            }
                        },
                        "description": "Poll for the status of a transcription job using AssemblyAI",
                        "icon": "AssemblyAI",
                        "base_classes": [
                            "Data"
                        ],
                        "display_name": "AssemblyAI Poll Transcript",
                        "documentation": "https://www.assemblyai.com/docs",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Data"
                                ],
                                "selected": "Data",
                                "name": "transcription_result",
                                "display_name": "Transcription Result",
                                "method": "poll_transcription_job",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "api_key",
                            "transcript_id",
                            "polling_interval"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "AssemblyAITranscriptionJobPoller-F46nf",
                    "description": "Poll for the status of a transcription job using AssemblyAI",
                    "display_name": "AssemblyAI Poll Transcript"
                },
                "selected": false,
                "width": 384,
                "height": 368,
                "positionAbsolute": {
                    "x": -1408.0967182254753,
                    "y": 461.5039554434261
                },
                "dragging": false
            },
            {
                "id": "AssemblyAIGetSubtitles-3sjU6",
                "type": "genericNode",
                "position": {
                    "x": -867.5862690424032,
                    "y": 368.91683022842676
                },
                "data": {
                    "type": "AssemblyAIGetSubtitles",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "transcription_result": {
                                "trace_as_metadata": true,
                                "list": false,
                                "trace_as_input": true,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "transcription_result",
                                "value": "",
                                "display_name": "Transcription Result",
                                "advanced": false,
                                "input_types": [
                                    "Data"
                                ],
                                "dynamic": false,
                                "info": "The transcription result from AssemblyAI",
                                "title_case": false,
                                "type": "other",
                                "_input_type": "DataInput"
                            },
                            "api_key": {
                                "load_from_db": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "api_key",
                                "value": null,
                                "display_name": "Assembly API Key",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
                                "title_case": false,
                                "password": true,
                                "type": "str",
                                "_input_type": "SecretStrInput"
                            },
                            "chars_per_caption": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "chars_per_caption",
                                "value": 0,
                                "display_name": "Characters per Caption",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The maximum number of characters per caption (0 for no limit)",
                                "title_case": false,
                                "type": "int",
                                "_input_type": "IntInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "import assemblyai as aai\n\nfrom langflow.custom import Component\nfrom langflow.io import DataInput, DropdownInput, IntInput, Output, SecretStrInput\nfrom langflow.schema import Data\n\n\nclass AssemblyAIGetSubtitles(Component):\n    display_name = \"AssemblyAI Get Subtitles\"\n    description = \"Export your transcript in SRT or VTT format for subtitles and closed captions\"\n    documentation = \"https://www.assemblyai.com/docs\"\n    icon = \"AssemblyAI\"\n\n    inputs = [\n        SecretStrInput(\n            name=\"api_key\",\n            display_name=\"Assembly API Key\",\n            info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n        ),\n        DataInput(\n            name=\"transcription_result\",\n            display_name=\"Transcription Result\",\n            info=\"The transcription result from AssemblyAI\",\n        ),\n        DropdownInput(\n            name=\"subtitle_format\",\n            display_name=\"Subtitle Format\",\n            options=[\"srt\", \"vtt\"],\n            value=\"srt\",\n            info=\"The format of the captions (SRT or VTT)\",\n        ),\n        IntInput(\n            name=\"chars_per_caption\",\n            display_name=\"Characters per Caption\",\n            info=\"The maximum number of characters per caption (0 for no limit)\",\n            value=0,\n            advanced=True,\n        ),\n    ]\n\n    outputs = [\n        Output(display_name=\"Subtitles\", name=\"subtitles\", method=\"get_subtitles\"),\n    ]\n\n    def get_subtitles(self) -> Data:\n        aai.settings.api_key = self.api_key\n\n        # check if it's an error message from the previous step\n        if self.transcription_result.data.get(\"error\"):\n            self.status = self.transcription_result.data[\"error\"]\n            return self.transcription_result\n\n        try:\n            transcript_id = self.transcription_result.data[\"id\"]\n            transcript = aai.Transcript.get_by_id(transcript_id)\n        except Exception as e:\n            error = f\"Getting transcription failed: {str(e)}\"\n            self.status = error\n            return Data(data={\"error\": error})\n\n        if transcript.status == aai.TranscriptStatus.completed:\n            subtitles = None\n            chars_per_caption = self.chars_per_caption if self.chars_per_caption > 0 else None\n            if self.subtitle_format == \"srt\":\n                subtitles = transcript.export_subtitles_srt(chars_per_caption)\n            else:\n                subtitles = transcript.export_subtitles_vtt(chars_per_caption)\n\n            result = Data(\n                subtitles=subtitles,\n                format=self.subtitle_format,\n                transcript_id=transcript_id,\n                chars_per_caption=chars_per_caption,\n            )\n\n            self.status = result\n            return result\n        else:\n            self.status = transcript.error\n            return Data(data={\"error\": transcript.error})\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "subtitle_format": {
                                "trace_as_metadata": true,
                                "options": [
                                    "srt",
                                    "vtt"
                                ],
                                "combobox": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "subtitle_format",
                                "value": "srt",
                                "display_name": "Subtitle Format",
                                "advanced": false,
                                "dynamic": false,
                                "info": "The format of the captions (SRT or VTT)",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "DropdownInput"
                            }
                        },
                        "description": "Export your transcript in SRT or VTT format for subtitles and closed captions",
                        "icon": "AssemblyAI",
                        "base_classes": [
                            "Data"
                        ],
                        "display_name": "AssemblyAI Get Subtitles",
                        "documentation": "https://www.assemblyai.com/docs",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Data"
                                ],
                                "selected": "Data",
                                "name": "subtitles",
                                "display_name": "Subtitles",
                                "method": "get_subtitles",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "api_key",
                            "transcription_result",
                            "subtitle_format",
                            "chars_per_caption"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "AssemblyAIGetSubtitles-3sjU6",
                    "description": "Export your transcript in SRT or VTT format for subtitles and closed captions",
                    "display_name": "AssemblyAI Get Subtitles"
                },
                "selected": false,
                "width": 384,
                "height": 454,
                "positionAbsolute": {
                    "x": -867.5862690424032,
                    "y": 368.91683022842676
                },
                "dragging": false
            },
            {
                "id": "AssemblyAIListTranscripts-3prc4",
                "type": "genericNode",
                "position": {
                    "x": -380.99808133361984,
                    "y": 401.2674645310267
                },
                "data": {
                    "type": "AssemblyAIListTranscripts",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "api_key": {
                                "load_from_db": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "api_key",
                                "value": null,
                                "display_name": "Assembly API Key",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
                                "title_case": false,
                                "password": true,
                                "type": "str",
                                "_input_type": "SecretStrInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "import assemblyai as aai\n\nfrom langflow.custom import Component\nfrom langflow.io import BoolInput, DropdownInput, IntInput, MessageTextInput, Output, SecretStrInput\nfrom langflow.schema import Data\n\n\nclass AssemblyAIListTranscripts(Component):\n    display_name = \"AssemblyAI List Transcripts\"\n    description = \"Retrieve a list of transcripts from AssemblyAI with filtering options\"\n    documentation = \"https://www.assemblyai.com/docs\"\n    icon = \"AssemblyAI\"\n\n    inputs = [\n        SecretStrInput(\n            name=\"api_key\",\n            display_name=\"Assembly API Key\",\n            info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n        ),\n        IntInput(\n            name=\"limit\",\n            display_name=\"Limit\",\n            info=\"Maximum number of transcripts to retrieve (default: 20, use 0 for all)\",\n            value=20,\n        ),\n        DropdownInput(\n            name=\"status_filter\",\n            display_name=\"Status Filter\",\n            options=[\"all\", \"queued\", \"processing\", \"completed\", \"error\"],\n            value=\"all\",\n            info=\"Filter by transcript status\",\n            advanced=True,\n        ),\n        MessageTextInput(\n            name=\"created_on\",\n            display_name=\"Created On\",\n            info=\"Only get transcripts created on this date (YYYY-MM-DD)\",\n            advanced=True,\n        ),\n        BoolInput(\n            name=\"throttled_only\",\n            display_name=\"Throttled Only\",\n            info=\"Only get throttled transcripts, overrides the status filter\",\n            advanced=True,\n        ),\n    ]\n\n    outputs = [\n        Output(display_name=\"Transcript List\", name=\"transcript_list\", method=\"list_transcripts\"),\n    ]\n\n    def list_transcripts(self) -> list[Data]:\n        aai.settings.api_key = self.api_key\n\n        params = aai.ListTranscriptParameters()\n        if self.limit:\n            params.limit = self.limit\n        if self.status_filter != \"all\":\n            params.status = self.status_filter\n        if self.created_on and self.created_on.text:\n            params.created_on = self.created_on.text\n        if self.throttled_only:\n            params.throttled_only = True\n\n        try:\n            transcriber = aai.Transcriber()\n\n            def convert_page_to_data_list(page):\n                return [Data(**t.dict()) for t in page.transcripts]\n\n            if self.limit == 0:\n                # paginate over all pages\n                params.limit = 100\n                page = transcriber.list_transcripts(params)\n                transcripts = convert_page_to_data_list(page)\n\n                while page.page_details.before_id_of_prev_url is not None:\n                    params.before_id = page.page_details.before_id_of_prev_url\n                    page = transcriber.list_transcripts(params)\n                    transcripts.extend(convert_page_to_data_list(page))\n            else:\n                # just one page\n                page = transcriber.list_transcripts(params)\n                transcripts = convert_page_to_data_list(page)\n\n            self.status = transcripts\n            return transcripts\n        except Exception as e:\n            error_data = Data(data={\"error\": f\"An error occurred: {str(e)}\"})\n            self.status = [error_data]\n            return [error_data]\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "created_on": {
                                "trace_as_input": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "created_on",
                                "value": "",
                                "display_name": "Created On",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Only get transcripts created on this date (YYYY-MM-DD)",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MessageTextInput"
                            },
                            "limit": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "limit",
                                "value": 20,
                                "display_name": "Limit",
                                "advanced": false,
                                "dynamic": false,
                                "info": "Maximum number of transcripts to retrieve (default: 20, use 0 for all)",
                                "title_case": false,
                                "type": "int",
                                "_input_type": "IntInput"
                            },
                            "status_filter": {
                                "trace_as_metadata": true,
                                "options": [
                                    "all",
                                    "queued",
                                    "processing",
                                    "completed",
                                    "error"
                                ],
                                "combobox": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "status_filter",
                                "value": "all",
                                "display_name": "Status Filter",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Filter by transcript status",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "DropdownInput"
                            },
                            "throttled_only": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "throttled_only",
                                "value": false,
                                "display_name": "Throttled Only",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Only get throttled transcripts, overrides the status filter",
                                "title_case": false,
                                "type": "bool",
                                "_input_type": "BoolInput"
                            }
                        },
                        "description": "Retrieve a list of transcripts from AssemblyAI with filtering options",
                        "icon": "AssemblyAI",
                        "base_classes": [
                            "Data"
                        ],
                        "display_name": "AssemblyAI List Transcripts",
                        "documentation": "https://www.assemblyai.com/docs",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Data"
                                ],
                                "selected": "Data",
                                "name": "transcript_list",
                                "display_name": "Transcript List",
                                "method": "list_transcripts",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "api_key",
                            "limit",
                            "status_filter",
                            "created_on",
                            "throttled_only"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "AssemblyAIListTranscripts-3prc4",
                    "description": "Retrieve a list of transcripts from AssemblyAI with filtering options",
                    "display_name": "AssemblyAI List Transcripts"
                },
                "selected": false,
                "width": 384,
                "height": 410,
                "positionAbsolute": {
                    "x": -380.99808133361984,
                    "y": 401.2674645310267
                },
                "dragging": false
            },
            {
                "id": "AssemblyAILeMUR-jzwHZ",
                "type": "genericNode",
                "position": {
                    "x": -875.6482330011189,
                    "y": 887.1705799007382
                },
                "data": {
                    "type": "AssemblyAILeMUR",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "transcription_result": {
                                "trace_as_metadata": true,
                                "list": false,
                                "trace_as_input": true,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "transcription_result",
                                "value": "",
                                "display_name": "Transcription Result",
                                "advanced": false,
                                "input_types": [
                                    "Data"
                                ],
                                "dynamic": false,
                                "info": "The transcription result from AssemblyAI",
                                "title_case": false,
                                "type": "other",
                                "_input_type": "DataInput"
                            },
                            "api_key": {
                                "load_from_db": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "api_key",
                                "value": null,
                                "display_name": "Assembly API Key",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
                                "title_case": false,
                                "password": true,
                                "type": "str",
                                "_input_type": "SecretStrInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "import assemblyai as aai\n\nfrom langflow.custom import Component\nfrom langflow.io import DataInput, DropdownInput, FloatInput, IntInput, MultilineInput, Output, SecretStrInput\nfrom langflow.schema import Data\n\n\nclass AssemblyAILeMUR(Component):\n    display_name = \"AssemblyAI LeMUR\"\n    description = \"Apply Large Language Models to spoken data using the AssemblyAI LeMUR framework\"\n    documentation = \"https://www.assemblyai.com/docs/lemur\"\n    icon = \"AssemblyAI\"\n\n    inputs = [\n        SecretStrInput(\n            name=\"api_key\",\n            display_name=\"Assembly API Key\",\n            info=\"Your AssemblyAI API key. You can get one from https://www.assemblyai.com/\",\n            advanced=False,\n        ),\n        DataInput(\n            name=\"transcription_result\",\n            display_name=\"Transcription Result\",\n            info=\"The transcription result from AssemblyAI\",\n        ),\n        MultilineInput(\n            name=\"prompt\",\n            display_name=\"Input Prompt\",\n            info=\"The text to prompt the model\",\n        ),\n        DropdownInput(\n            name=\"final_model\",\n            display_name=\"Final Model\",\n            options=[\"claude3_5_sonnet\", \"claude3_opus\", \"claude3_haiku\", \"claude3_sonnet\"],\n            value=\"claude3_5_sonnet\",\n            info=\"The model that is used for the final prompt after compression is performed\",\n            advanced=True,\n        ),\n        FloatInput(\n            name=\"temperature\",\n            display_name=\"Temperature\",\n            advanced=True,\n            value=0.0,\n            info=\"The temperature to use for the model\",\n        ),\n        IntInput(\n            name=\"max_output_size\",\n            display_name=\" Max Output Size\",\n            advanced=True,\n            value=2000,\n            info=\"Max output size in tokens, up to 4000\",\n        ),\n        DropdownInput(\n            name=\"endpoint\",\n            display_name=\"Endpoint\",\n            options=[\"task\", \"summary\", \"question-answer\"],\n            value=\"task\",\n            info=\"The LeMUR endpoint to use. For 'summary' and 'question-answer', no prompt input is needed. See https://www.assemblyai.com/docs/api-reference/lemur/ for more info.\",\n            advanced=True,\n        ),\n        MultilineInput(\n            name=\"questions\",\n            display_name=\"Questions\",\n            info=\"Comma-separated list of your questions. Only used if Endpoint is 'question-answer'\",\n            advanced=True,\n        ),\n        MultilineInput(\n            name=\"transcript_ids\",\n            display_name=\"Transcript IDs\",\n            info=\"Comma-separated list of transcript IDs. LeMUR can perform actions over multiple transcripts. If provided, the Transcription Result is ignored.\",\n            advanced=True,\n        ),\n    ]\n\n    outputs = [\n        Output(display_name=\"LeMUR Response\", name=\"lemur_response\", method=\"run_lemur\"),\n    ]\n\n    def run_lemur(self) -> Data:\n        \"\"\"Use the LeMUR task endpoint to input the LLM prompt.\"\"\"\n        aai.settings.api_key = self.api_key\n\n        if not self.transcription_result and not self.transcript_ids:\n            error = \"Either a Transcription Result or Transcript IDs must be provided\"\n            self.status = error\n            return Data(data={\"error\": error})\n        elif self.transcription_result and self.transcription_result.data.get(\"error\"):\n            # error message from the previous step\n            self.status = self.transcription_result.data[\"error\"]\n            return self.transcription_result\n        elif self.endpoint == \"task\" and not self.prompt:\n            self.status = \"No prompt specified for the task endpoint\"\n            return Data(data={\"error\": \"No prompt specified\"})\n        elif self.endpoint == \"question-answer\" and not self.questions:\n            error = \"No Questions were provided for the question-answer endpoint\"\n            self.status = error\n            return Data(data={\"error\": error})\n\n        # Check for valid transcripts\n        transcript_ids = None\n        if self.transcription_result and \"id\" in self.transcription_result.data:\n            transcript_ids = [self.transcription_result.data[\"id\"]]\n        elif self.transcript_ids:\n            transcript_ids = self.transcript_ids.split(\",\")\n            transcript_ids = [t.strip() for t in transcript_ids]\n        \n        if not transcript_ids:\n            error = \"Either a valid Transcription Result or valid Transcript IDs must be provided\"\n            self.status = error\n            return Data(data={\"error\": error})\n\n        # Get TranscriptGroup and check if there is any error\n        transcript_group = aai.TranscriptGroup(transcript_ids=transcript_ids)\n        transcript_group, failures = transcript_group.wait_for_completion(return_failures=True)\n        if failures:\n            error = f\"Getting transcriptions failed: {failures[0]}\"\n            self.status = error\n            return Data(data={\"error\": error})\n        \n        for t in transcript_group.transcripts:\n            if t.status == aai.TranscriptStatus.error:\n                self.status = t.error\n                return Data(data={\"error\": t.error})\n\n        # Perform LeMUR action\n        try:\n            response = self.perform_lemur_action(transcript_group, self.endpoint)\n            result = Data(data=response)\n            self.status = result\n            return result\n        except Exception as e:\n            error = f\"An Error happened: {str(e)}\"\n            self.status = error\n            return Data(data={\"error\": error})\n\n    def perform_lemur_action(self, transcript_group: aai.TranscriptGroup, endpoint: str) -> dict:\n        print(\"Endpoint:\", endpoint, type(endpoint))\n        if endpoint == \"task\":\n            result = transcript_group.lemur.task(\n                prompt=self.prompt,\n                final_model=self.get_final_model(self.final_model),\n                temperature=self.temperature,\n                max_output_size=self.max_output_size,\n            )\n        elif endpoint == \"summary\":\n            result = transcript_group.lemur.summarize(\n                final_model=self.get_final_model(self.final_model),\n                temperature=self.temperature,\n                max_output_size=self.max_output_size,\n            )\n        elif endpoint == \"question-answer\":\n            questions = self.questions.split(\",\")\n            questions = [aai.LemurQuestion(question=q) for q in questions]\n            result = transcript_group.lemur.question(\n                questions=questions,\n                final_model=self.get_final_model(self.final_model),\n                temperature=self.temperature,\n                max_output_size=self.max_output_size,\n            )\n        else:\n            raise ValueError(f\"Endpoint not supported: {endpoint}\")\n\n        return result.dict()\n        \n    def get_final_model(self, model_name: str) -> aai.LemurModel:\n        if model_name == \"claude3_5_sonnet\":\n            return aai.LemurModel.claude3_5_sonnet\n        elif model_name == \"claude3_opus\":\n            return aai.LemurModel.claude3_opus\n        elif model_name == \"claude3_haiku\":\n            return aai.LemurModel.claude3_haiku\n        elif model_name == \"claude3_sonnet\":\n            return aai.LemurModel.claude3_sonnet\n        else:\n            raise ValueError(f\"Model name not supported: {model_name}\")\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "endpoint": {
                                "trace_as_metadata": true,
                                "options": [
                                    "task",
                                    "summary",
                                    "question-answer"
                                ],
                                "combobox": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "endpoint",
                                "value": "task",
                                "display_name": "Endpoint",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The LeMUR endpoint to use. For 'summary' and 'question-answer', no prompt input is needed. See https://www.assemblyai.com/docs/api-reference/lemur/ for more info.",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "DropdownInput"
                            },
                            "final_model": {
                                "trace_as_metadata": true,
                                "options": [
                                    "claude3_5_sonnet",
                                    "claude3_opus",
                                    "claude3_haiku",
                                    "claude3_sonnet"
                                ],
                                "combobox": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "final_model",
                                "value": "claude3_5_sonnet",
                                "display_name": "Final Model",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The model that is used for the final prompt after compression is performed",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "DropdownInput"
                            },
                            "max_output_size": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "max_output_size",
                                "value": 2000,
                                "display_name": " Max Output Size",
                                "advanced": true,
                                "dynamic": false,
                                "info": "Max output size in tokens, up to 4000",
                                "title_case": false,
                                "type": "int",
                                "_input_type": "IntInput"
                            },
                            "prompt": {
                                "trace_as_input": true,
                                "multiline": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "prompt",
                                "value": "",
                                "display_name": "Input Prompt",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "The text to prompt the model",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MultilineInput"
                            },
                            "questions": {
                                "trace_as_input": true,
                                "multiline": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "questions",
                                "value": "",
                                "display_name": "Questions",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Comma-separated list of your questions. Only used if Endpoint is 'question-answer'",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MultilineInput"
                            },
                            "temperature": {
                                "trace_as_metadata": true,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "temperature",
                                "value": 0,
                                "display_name": "Temperature",
                                "advanced": true,
                                "dynamic": false,
                                "info": "The temperature to use for the model",
                                "title_case": false,
                                "type": "float",
                                "_input_type": "FloatInput"
                            },
                            "transcript_ids": {
                                "trace_as_input": true,
                                "multiline": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "transcript_ids",
                                "value": "",
                                "display_name": "Transcript IDs",
                                "advanced": true,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "Comma-separated list of transcript IDs. LeMUR can perform actions over multiple transcripts. If provided, the Transcription Result is ignored.",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MultilineInput"
                            }
                        },
                        "description": "Apply Large Language Models to spoken data using the AssemblyAI LeMUR framework",
                        "icon": "AssemblyAI",
                        "base_classes": [
                            "Data"
                        ],
                        "display_name": "AssemblyAI LeMUR",
                        "documentation": "https://www.assemblyai.com/docs/lemur",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Data"
                                ],
                                "selected": "Data",
                                "name": "lemur_response",
                                "display_name": "LeMUR Response",
                                "method": "run_lemur",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "api_key",
                            "transcription_result",
                            "prompt",
                            "final_model",
                            "temperature",
                            "max_output_size",
                            "endpoint",
                            "questions",
                            "transcript_ids"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "AssemblyAILeMUR-jzwHZ",
                    "description": "Apply Large Language Models to spoken data using the AssemblyAI LeMUR framework",
                    "display_name": "AssemblyAI LeMUR"
                },
                "selected": false,
                "width": 384,
                "height": 454,
                "positionAbsolute": {
                    "x": -875.6482330011189,
                    "y": 887.1705799007382
                },
                "dragging": false
            },
            {
                "id": "ParseData-th7JM",
                "type": "genericNode",
                "position": {
                    "x": -862.5843195492909,
                    "y": -56.71774780191424
                },
                "data": {
                    "type": "ParseData",
                    "node": {
                        "template": {
                            "_type": "Component",
                            "data": {
                                "trace_as_metadata": true,
                                "list": false,
                                "trace_as_input": true,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "data",
                                "value": "",
                                "display_name": "Data",
                                "advanced": false,
                                "input_types": [
                                    "Data"
                                ],
                                "dynamic": false,
                                "info": "The data to convert to text.",
                                "title_case": false,
                                "type": "other",
                                "_input_type": "DataInput"
                            },
                            "code": {
                                "type": "code",
                                "required": true,
                                "placeholder": "",
                                "list": false,
                                "show": true,
                                "multiline": true,
                                "value": "from langflow.custom import Component\nfrom langflow.helpers.data import data_to_text\nfrom langflow.io import DataInput, MultilineInput, Output, StrInput\nfrom langflow.schema.message import Message\n\n\nclass ParseDataComponent(Component):\n    display_name = \"Parse Data\"\n    description = \"Convert Data into plain text following a specified template.\"\n    icon = \"braces\"\n    name = \"ParseData\"\n\n    inputs = [\n        DataInput(name=\"data\", display_name=\"Data\", info=\"The data to convert to text.\"),\n        MultilineInput(\n            name=\"template\",\n            display_name=\"Template\",\n            info=\"The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.\",\n            value=\"{text}\",\n        ),\n        StrInput(name=\"sep\", display_name=\"Separator\", advanced=True, value=\"\\n\"),\n    ]\n\n    outputs = [\n        Output(display_name=\"Text\", name=\"text\", method=\"parse_data\"),\n    ]\n\n    def parse_data(self) -> Message:\n        data = self.data if isinstance(self.data, list) else [self.data]\n        template = self.template\n\n        result_string = data_to_text(template, data, sep=self.sep)\n        self.status = result_string\n        return Message(text=result_string)\n",
                                "fileTypes": [],
                                "file_path": "",
                                "password": false,
                                "name": "code",
                                "advanced": true,
                                "dynamic": true,
                                "info": "",
                                "load_from_db": false,
                                "title_case": false
                            },
                            "sep": {
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "sep",
                                "value": "\n",
                                "display_name": "Separator",
                                "advanced": true,
                                "dynamic": false,
                                "info": "",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "StrInput"
                            },
                            "template": {
                                "trace_as_input": true,
                                "multiline": true,
                                "trace_as_metadata": true,
                                "load_from_db": false,
                                "list": false,
                                "required": false,
                                "placeholder": "",
                                "show": true,
                                "name": "template",
                                "value": "{text}",
                                "display_name": "Template",
                                "advanced": false,
                                "input_types": [
                                    "Message"
                                ],
                                "dynamic": false,
                                "info": "The template to use for formatting the data. It can contain the keys {text}, {data} or any other key in the Data.",
                                "title_case": false,
                                "type": "str",
                                "_input_type": "MultilineInput"
                            }
                        },
                        "description": "Convert Data into plain text following a specified template.",
                        "icon": "braces",
                        "base_classes": [
                            "Message"
                        ],
                        "display_name": "Parse Data",
                        "documentation": "",
                        "custom_fields": {},
                        "output_types": [],
                        "pinned": false,
                        "conditional_paths": [],
                        "frozen": false,
                        "outputs": [
                            {
                                "types": [
                                    "Message"
                                ],
                                "selected": "Message",
                                "name": "text",
                                "display_name": "Text",
                                "method": "parse_data",
                                "value": "__UNDEFINED__",
                                "cache": true
                            }
                        ],
                        "field_order": [
                            "data",
                            "template",
                            "sep"
                        ],
                        "beta": false,
                        "edited": false,
                        "lf_version": "1.0.18"
                    },
                    "id": "ParseData-th7JM"
                },
                "selected": false,
                "width": 384,
                "height": 368,
                "positionAbsolute": {
                    "x": -862.5843195492909,
                    "y": -56.71774780191424
                },
                "dragging": false
            }
        ],
        "edges": [
            {
                "source": "AssemblyAITranscriptionJobCreator-Idt7P",
                "sourceHandle": "{œdataTypeœ:œAssemblyAITranscriptionJobCreatorœ,œidœ:œAssemblyAITranscriptionJobCreator-Idt7Pœ,œnameœ:œtranscript_idœ,œoutput_typesœ:[œDataœ]}",
                "target": "AssemblyAITranscriptionJobPoller-F46nf",
                "targetHandle": "{œfieldNameœ:œtranscript_idœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "data": {
                    "targetHandle": {
                        "fieldName": "transcript_id",
                        "id": "AssemblyAITranscriptionJobPoller-F46nf",
                        "inputTypes": [
                            "Data"
                        ],
                        "type": "other"
                    },
                    "sourceHandle": {
                        "dataType": "AssemblyAITranscriptionJobCreator",
                        "id": "AssemblyAITranscriptionJobCreator-Idt7P",
                        "name": "transcript_id",
                        "output_types": [
                            "Data"
                        ]
                    }
                },
                "id": "reactflow__edge-AssemblyAITranscriptionJobCreator-Idt7P{œdataTypeœ:œAssemblyAITranscriptionJobCreatorœ,œidœ:œAssemblyAITranscriptionJobCreator-Idt7Pœ,œnameœ:œtranscript_idœ,œoutput_typesœ:[œDataœ]}-AssemblyAITranscriptionJobPoller-F46nf{œfieldNameœ:œtranscript_idœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "animated": false,
                "className": "",
                "selected": false
            },
            {
                "source": "AssemblyAITranscriptionJobPoller-F46nf",
                "sourceHandle": "{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}",
                "target": "AssemblyAIGetSubtitles-3sjU6",
                "targetHandle": "{œfieldNameœ:œtranscription_resultœ,œidœ:œAssemblyAIGetSubtitles-3sjU6œ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "data": {
                    "targetHandle": {
                        "fieldName": "transcription_result",
                        "id": "AssemblyAIGetSubtitles-3sjU6",
                        "inputTypes": [
                            "Data"
                        ],
                        "type": "other"
                    },
                    "sourceHandle": {
                        "dataType": "AssemblyAITranscriptionJobPoller",
                        "id": "AssemblyAITranscriptionJobPoller-F46nf",
                        "name": "transcription_result",
                        "output_types": [
                            "Data"
                        ]
                    }
                },
                "id": "reactflow__edge-AssemblyAITranscriptionJobPoller-F46nf{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}-AssemblyAIGetSubtitles-3sjU6{œfieldNameœ:œtranscription_resultœ,œidœ:œAssemblyAIGetSubtitles-3sjU6œ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "animated": false,
                "className": ""
            },
            {
                "source": "AssemblyAITranscriptionJobPoller-F46nf",
                "sourceHandle": "{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}",
                "target": "ParseData-th7JM",
                "targetHandle": "{œfieldNameœ:œdataœ,œidœ:œParseData-th7JMœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "data": {
                    "targetHandle": {
                        "fieldName": "data",
                        "id": "ParseData-th7JM",
                        "inputTypes": [
                            "Data"
                        ],
                        "type": "other"
                    },
                    "sourceHandle": {
                        "dataType": "AssemblyAITranscriptionJobPoller",
                        "id": "AssemblyAITranscriptionJobPoller-F46nf",
                        "name": "transcription_result",
                        "output_types": [
                            "Data"
                        ]
                    }
                },
                "id": "reactflow__edge-AssemblyAITranscriptionJobPoller-F46nf{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}-ParseData-th7JM{œfieldNameœ:œdataœ,œidœ:œParseData-th7JMœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "animated": false,
                "className": ""
            },
            {
                "source": "Prompt-IO8Cq",
                "sourceHandle": "{œdataTypeœ:œPromptœ,œidœ:œPrompt-IO8Cqœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}",
                "target": "AssemblyAILeMUR-jzwHZ",
                "targetHandle": "{œfieldNameœ:œpromptœ,œidœ:œAssemblyAILeMUR-jzwHZœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
                "data": {
                    "targetHandle": {
                        "fieldName": "prompt",
                        "id": "AssemblyAILeMUR-jzwHZ",
                        "inputTypes": [
                            "Message"
                        ],
                        "type": "str"
                    },
                    "sourceHandle": {
                        "dataType": "Prompt",
                        "id": "Prompt-IO8Cq",
                        "name": "prompt",
                        "output_types": [
                            "Message"
                        ]
                    }
                },
                "id": "reactflow__edge-Prompt-IO8Cq{œdataTypeœ:œPromptœ,œidœ:œPrompt-IO8Cqœ,œnameœ:œpromptœ,œoutput_typesœ:[œMessageœ]}-AssemblyAILeMUR-jzwHZ{œfieldNameœ:œpromptœ,œidœ:œAssemblyAILeMUR-jzwHZœ,œinputTypesœ:[œMessageœ],œtypeœ:œstrœ}",
                "animated": false,
                "className": ""
            },
            {
                "source": "AssemblyAITranscriptionJobPoller-F46nf",
                "sourceHandle": "{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}",
                "target": "AssemblyAILeMUR-jzwHZ",
                "targetHandle": "{œfieldNameœ:œtranscription_resultœ,œidœ:œAssemblyAILeMUR-jzwHZœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "data": {
                    "targetHandle": {
                        "fieldName": "transcription_result",
                        "id": "AssemblyAILeMUR-jzwHZ",
                        "inputTypes": [
                            "Data"
                        ],
                        "type": "other"
                    },
                    "sourceHandle": {
                        "dataType": "AssemblyAITranscriptionJobPoller",
                        "id": "AssemblyAITranscriptionJobPoller-F46nf",
                        "name": "transcription_result",
                        "output_types": [
                            "Data"
                        ]
                    }
                },
                "id": "reactflow__edge-AssemblyAITranscriptionJobPoller-F46nf{œdataTypeœ:œAssemblyAITranscriptionJobPollerœ,œidœ:œAssemblyAITranscriptionJobPoller-F46nfœ,œnameœ:œtranscription_resultœ,œoutput_typesœ:[œDataœ]}-AssemblyAILeMUR-jzwHZ{œfieldNameœ:œtranscription_resultœ,œidœ:œAssemblyAILeMUR-jzwHZœ,œinputTypesœ:[œDataœ],œtypeœ:œotherœ}",
                "animated": false,
                "className": ""
            }
        ],
        "viewport": {
            "x": 733.3920447354355,
            "y": -42.8262727047815,
            "zoom": 0.2612816498236053
        }
    },
    "user_id": "9c01eee4-17dd-460e-8c52-bba36d635a9d",
    "folder_id": "54fc9211-d42d-4c3f-a932-ee4987f61988",
    "description": "Transcribe and analyze audio with AssemblyAI",
    "icon_bg_color": null,
    "updated_at": "2024-09-26T14:55:47+00:00",
    "webhook": false,
    "id": "fa69381c-d1c4-4535-bc23-bc2fb4956e1e"
}