From 3bd8d27eccd2d9f0d7866b2475a6aaacc2d652e8 Mon Sep 17 00:00:00 2001 From: vinicvaz Date: Mon, 4 Dec 2023 09:31:08 -0300 Subject: [PATCH] youtube transcript example --- .../components/WorkflowExamplesGalleryModal/index.tsx | 8 ++++++++ .../utils/workflows/youtube_transcript_local.json | 1 + 2 files changed, 9 insertions(+) create mode 100644 frontend/src/features/workflowEditor/utils/workflows/youtube_transcript_local.json diff --git a/frontend/src/features/workflowEditor/components/WorkflowExamplesGalleryModal/index.tsx b/frontend/src/features/workflowEditor/components/WorkflowExamplesGalleryModal/index.tsx index c683555d..46885b76 100644 --- a/frontend/src/features/workflowEditor/components/WorkflowExamplesGalleryModal/index.tsx +++ b/frontend/src/features/workflowEditor/components/WorkflowExamplesGalleryModal/index.tsx @@ -21,6 +21,7 @@ import ImageFilterWorkflow from "../../utils/workflows/image_filter_workflow.jso import NasaImageWorkflow from "../../utils/workflows/nasa_workflow.json"; import RandomForestClassifierWorkflow from "../../utils/workflows/random_forest_pipeline.json"; import YoutubeSummarizerWorkflow from "../../utils/workflows/youtube_summarizer.json"; +import YoutubeLocalTranscript from "../../utils/workflows/youtube_transcript_local.json"; interface WorkflowGalleryModalRef extends ModalRef {} @@ -71,6 +72,13 @@ const localCardsContents = [ jsonFile: CloudSegmentationWorkflow, levelTag: "Intermediate", }, + { + title: "Youtube Transcript Local Model", + description: + "A workflow that uses a local whisper model with GPU access transcript a youtube video. To use it you must use Shared Storage", + jsonFile: YoutubeLocalTranscript, + levelTag: "Advanced", + }, ] as unknown as WorkflowsGalleryExamples; const WorkflowExamplesGalleryModal = forwardRef( diff --git a/frontend/src/features/workflowEditor/utils/workflows/youtube_transcript_local.json b/frontend/src/features/workflowEditor/utils/workflows/youtube_transcript_local.json new file mode 100644 index 00000000..06991e7f --- /dev/null +++ b/frontend/src/features/workflowEditor/utils/workflows/youtube_transcript_local.json @@ -0,0 +1 @@ +{"workflowPieces":{"131_b2ab3d66-563b-4a34-8939-76c2caa8a90a":{"id":131,"name":"YoutubeListVideosPiece","description":"List videos from youtube channel.","dependency":{"dockerfile":"Dockerfile_youtube","requirements_file":null},"source_image":"ghcr.io/tauffer-consulting/social_media_domino_pieces:0.5.2-group2","input_schema":{"$defs":{"OrderBy":{"description":"The order in which the videos are returned.","enum":["date","rating","relevance","title","viewCount"],"title":"OrderBy","type":"string"},"VideoDuration":{"description":"The duration of the video.","enum":["any","long","medium","short"],"title":"VideoDuration","type":"string"}},"description":"Input data for YoutubeListVideosPiece","properties":{"channel_username":{"default":null,"description":"The username of the Youtube channel.","title":"Channel Username","type":"string"},"max_videos":{"default":10,"description":"The maximum number of videos to be returned","exclusiveMinimum":0,"title":"Max Videos","type":"integer"},"published_at_or_after":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Filter videos created at or after the specified date","title":"Published At Or After"},"published_at_or_before":{"anyOf":[{"format":"date","type":"string"},{"type":"null"}],"default":null,"description":"Filter videos created before or at the specified date","title":"Published At Or Before"},"order_by":{"allOf":[{"$ref":"#/$defs/OrderBy"}],"default":"date","description":"The order in which the videos are returned","title":"Order By"},"video_duration":{"allOf":[{"$ref":"#/$defs/VideoDuration"}],"default":"any","description":"The duration of the video","title":"Video Duration"},"return_only_urls":{"default":false,"description":"If True, only the urls of the videos will be returned","title":"Return only urls","type":"boolean"}},"title":"YoutubeListVideosPiece","type":"object"},"output_schema":{"description":"Output data for YoutubeListVideosPiece","properties":{"message":{"default":"","description":"Output message to log","title":"Message","type":"string"},"videos_list":{"description":"A list containing information about videos.","items":{},"title":"Videos List","type":"array"}},"required":["videos_list"],"title":"OutputModel","type":"object"},"secrets_schema":{"description":"Secrets data for YoutubeListVideosPiece","properties":{"YOUTUBE_API_KEY":{"description":"The Youtube Data API Key.","title":"Youtube Api Key","type":"string"}},"required":["YOUTUBE_API_KEY"],"title":"SecretsModel","type":"object"},"container_resources":{"requests":{"cpu":100,"memory":128},"limits":{"cpu":500,"memory":512},"use_gpu":false},"tags":[],"style":{"module":"YoutubeListVideosPiece","label":"Youtube list videos","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-brands:youtube","iconStyle":{"cursor":"pointer"}},"source_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces/tree/main/pieces/YoutubeListVideosPiece","repository_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces","repository_id":17},"117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159":{"id":117,"name":"YoutubeDownloadPiece","description":"Downloads content from youtube videos as audio or video files.","dependency":{"dockerfile":"Dockerfile_youtube","requirements_file":null},"source_image":"ghcr.io/tauffer-consulting/social_media_domino_pieces:0.5.2-group2","input_schema":{"$defs":{"OutputTypeType":{"enum":["audio","video"],"title":"OutputTypeType","type":"string"}},"description":"Input data for YoutubeDownloadPiece","properties":{"url":{"description":"The url of the video to be downloaded.","title":"Url","type":"string"},"output_type":{"allOf":[{"$ref":"#/$defs/OutputTypeType"}],"default":"audio","description":"The type of output file to be downloaded."}},"required":["url"],"title":"YoutubeDownloadPiece","type":"object"},"output_schema":{"description":"Output data for YoutubeDownloadPiece","properties":{"message":{"default":"","description":"Output message to log","title":"Message","type":"string"},"file_path":{"description":"The path to the downloaded file","title":"File Path","type":"string"}},"required":["file_path"],"title":"OutputModel","type":"object"},"secrets_schema":null,"container_resources":{"requests":{"cpu":100,"memory":128},"limits":{"cpu":500,"memory":512},"use_gpu":false},"tags":[],"style":{"module":"YoutubeDownloadPiece","label":"Youtube Download Piece","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:download","iconStyle":{"cursor":"pointer"}},"source_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces/tree/main/pieces/YoutubeDownloadPiece","repository_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces","repository_id":17},"114_65f6cf14-b129-4875-955d-bd2f66901e13":{"id":114,"name":"EmailSenderPiece","description":"Email sender","dependency":{"dockerfile":null,"requirements_file":null},"source_image":"ghcr.io/tauffer-consulting/social_media_domino_pieces:0.5.2-group0","input_schema":{"$defs":{"InnerArgModel":{"description":"Inner argument model to use in the body and subject texts","properties":{"arg_name":{"title":"Arg Name","type":"string"},"arg_value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"boolean"}],"title":"Arg Value"}},"required":["arg_name","arg_value"],"title":"InnerArgModel","type":"object"},"ProviderType":{"enum":["gmail","outlook","office365","yahoo"],"title":"ProviderType","type":"string"}},"description":"Input data for EmailSenderPiece","properties":{"email_provider":{"allOf":[{"$ref":"#/$defs/ProviderType"}],"default":"gmail","description":"The email provider to use"},"email_receivers":{"description":"The receivers of the email, as comma-separated values","title":"Email Receivers","type":"string"},"email_subject":{"description":"The subject of the email.","title":"Email Subject","type":"string"},"subject_args":{"anyOf":[{"items":{"$ref":"#/$defs/InnerArgModel"},"type":"array"},{"type":"null"}],"default":null,"description":"List of arguments to insert into the subject of the email","title":"Subject Args"},"email_body":{"description":"The body of the email.","title":"Email Body","type":"string"},"body_args":{"anyOf":[{"items":{"$ref":"#/$defs/InnerArgModel"},"type":"array"},{"type":"null"}],"default":null,"description":"List of arguments to insert into the body of the email","title":"Body Args"},"attachment_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Path to the attachment file","title":"Attachment Path"}},"required":["email_receivers","email_subject","email_body"],"title":"EmailSenderPiece","type":"object"},"output_schema":{"description":"Output data for EmailSenderPiece","properties":{"message":{"default":"","description":"Output message to log.","title":"Message","type":"string"},"success":{"description":"The result of the email sending task.","title":"Success","type":"boolean"},"error":{"default":"","description":"The error message, if any.","title":"Error","type":"string"}},"required":["success"],"title":"OutputModel","type":"object"},"secrets_schema":{"description":"Secrets data for EmailSenderPiece","properties":{"EMAIL_SENDER_ACCOUNT":{"description":"The email sender account.","title":"Email Sender Account","type":"string"},"EMAIL_SENDER_PASSWORD":{"description":"The email sender password","title":"Email Sender Password","type":"string"}},"required":["EMAIL_SENDER_ACCOUNT","EMAIL_SENDER_PASSWORD"],"title":"SecretsModel","type":"object"},"container_resources":{"requests":{"cpu":100,"memory":128},"limits":{"cpu":500,"memory":200},"use_gpu":false},"tags":[],"style":{"module":"EmailSenderPiece","label":"Email sender Piece","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:envelope","iconStyle":{"cursor":"pointer"}},"source_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces/tree/main/pieces/EmailSenderPiece","repository_url":"https://github.com/Tauffer-Consulting/social_media_domino_pieces","repository_id":17},"129_44c1cbc0-185f-4b86-96a2-f93240795503":{"id":129,"name":"GetItemFromArrayPiece","description":"Get one item from an input array.","dependency":{"dockerfile":null,"requirements_file":"requirements_0.txt"},"source_image":"ghcr.io/tauffer-consulting/default_domino_pieces:0.8.0-group0","input_schema":{"$defs":{"IndexType":{"enum":["first","last","random","another"],"title":"IndexType","type":"string"}},"description":"GetItemFromArrayPiece Input Model","properties":{"input_array":{"description":"Input array to get item from.","from_upstream":"always","items":{},"title":"Input Array","type":"array"},"index":{"allOf":[{"$ref":"#/$defs/IndexType"}],"default":"first","description":"Index of item to get from input array."},"another_index":{"default":1,"description":"Index number of item to get from input array.","minimum":1,"title":"Another Index","type":"integer"}},"required":["input_array"],"title":"GetItemFromArrayPiece","type":"object"},"output_schema":{"description":"GetItemFromArrayPiece Output Model","properties":{"output_value":{"anyOf":[{"type":"string"},{"items":{},"type":"array"},{"type":"integer"},{"type":"number"},{"type":"boolean"},{"type":"object"},{"format":"date","type":"string"},{"format":"time","type":"string"},{"format":"date-time","type":"string"}],"description":"Item from input array at specified index.","title":"Output Value"}},"required":["output_value"],"title":"OutputModel","type":"object"},"secrets_schema":null,"container_resources":{"requests":{"cpu":100,"memory":128},"limits":{"cpu":100,"memory":128},"use_gpu":false},"tags":["default","array"],"style":{"module":"GetItemFromArrayPiece","label":"Get Item From Array","nodeType":"default","nodeStyle":{"backgroundColor":"#b3cde8"},"useIcon":true,"iconClassName":"fluent:tray-item-remove-24-filled","iconStyle":{"cursor":"pointer"}},"source_url":"https://github.com/Tauffer-Consulting/default_domino_pieces/tree/main/pieces/GetItemFromArrayPiece","repository_url":"https://github.com/Tauffer-Consulting/default_domino_pieces","repository_id":15},"166_4854e4df-8288-445d-8f61-56c65543301d":{"id":166,"name":"AudioTranscriptionLocalPiece","description":"Runs transcription locally using Whisper, a general-purpose speech recognition model. Ref: https://github.com/openai/whisper","dependency":{"dockerfile":"Dockerfile_whisper","requirements_file":null},"source_image":"ghcr.io/tauffer-consulting/openai_domino_pieces:0.7.1-group1","input_schema":{"$defs":{"ModelSizeType":{"enum":["tiny","base","small","medium","large"],"title":"ModelSizeType","type":"string"},"OutputTypeType":{"enum":["string","file","both"],"title":"OutputTypeType","type":"string"}},"properties":{"audio_file_path":{"description":"The path to the audio file to process.","from_upstream":"always","title":"Audio File Path","type":"string"},"output_type":{"allOf":[{"$ref":"#/$defs/OutputTypeType"}],"default":"string","description":"The type of output for the result text. Options are `string`, `file` or `both`. Default is `string`."},"model_size":{"allOf":[{"$ref":"#/$defs/ModelSizeType"}],"default":"tiny","description":"The size of the model to use. Default is tiny."}},"required":["audio_file_path"],"title":"AudioTranscriptionLocalPiece","type":"object"},"output_schema":{"properties":{"transcription_result":{"default":"","description":"The result transcription text as a string.","title":"Transcription Result","type":"string"},"file_path_transcription_result":{"anyOf":[{"format":"file-path","type":"string"},{"type":"string"}],"default":"","description":"The path to the text file with the transcription result.","title":"File Path Transcription Result"}},"title":"OutputModel","type":"object"},"secrets_schema":null,"container_resources":{"requests":{"cpu":1000,"memory":3000},"limits":{"cpu":5000,"memory":15000},"use_gpu":true},"tags":[],"style":{"module":"AudioTranscriptionLocalPiece","label":"Audio Transcription Local","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:comment-dots","iconStyle":{"cursor":"pointer"}},"source_url":"https://github.com/Tauffer-Consulting/openai_domino_pieces/tree/main/pieces/AudioTranscriptionLocalPiece","repository_url":"https://github.com/Tauffer-Consulting/openai_domino_pieces","repository_id":21}},"workflowPiecesData":{"131_b2ab3d66-563b-4a34-8939-76c2caa8a90a":{"storage":{"storageAccessMode":"Read/Write"},"containerResources":{"cpu":{"max":500,"min":100},"memory":{"max":512,"min":128},"useGpu":false},"inputs":{"channel_username":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"bbcnews"},"max_videos":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":10},"published_at_or_after":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"2023-11-20"},"published_at_or_before":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":null},"order_by":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"date"},"video_duration":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"medium"},"return_only_urls":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":true}}},"117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159":{"storage":{"storageAccessMode":"Read/Write"},"containerResources":{"cpu":{"max":500,"min":100},"memory":{"max":512,"min":128},"useGpu":false},"inputs":{"url":{"fromUpstream":true,"upstreamId":"GetItemFro_44c1cbc0185f4b8696a2f93240795503","upstreamArgument":"output_value","upstreamValue":"GetItemFromArrayPiece (44c1cbc0) - Output Value","value":""},"output_type":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"audio"}}},"114_65f6cf14-b129-4875-955d-bd2f66901e13":{"storage":{"storageAccessMode":"Read/Write"},"containerResources":{"cpu":{"max":500,"min":100},"memory":{"max":200,"min":128},"useGpu":false},"inputs":{"email_provider":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"gmail"},"email_receivers":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":""},"email_subject":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"transcript"},"subject_args":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":[]},"email_body":{"fromUpstream":true,"upstreamId":"AudioTrans_4854e4df8288445d8f6156c65543301d","upstreamArgument":"transcription_result","upstreamValue":"AudioTranscriptionLocalPiece (4854e4df) - Transcription Result","value":""},"body_args":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":[]},"attachment_path":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":null}}},"129_44c1cbc0-185f-4b86-96a2-f93240795503":{"storage":{"storageAccessMode":"Read/Write"},"containerResources":{"cpu":{"max":100,"min":100},"memory":{"max":128,"min":128},"useGpu":false},"inputs":{"input_array":{"fromUpstream":true,"upstreamId":"YoutubeLis_b2ab3d66563b4a34893976c2caa8a90a","upstreamArgument":"videos_list","upstreamValue":"YoutubeListVideosPiece (b2ab3d66) - Videos List","value":""},"index":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"first"},"another_index":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":1}}},"166_4854e4df-8288-445d-8f61-56c65543301d":{"storage":{"storageAccessMode":"Read/Write"},"containerResources":{"cpu":{"max":5000,"min":1000},"memory":{"max":15000,"min":3000},"useGpu":true},"inputs":{"audio_file_path":{"fromUpstream":true,"upstreamId":"YoutubeDow_3c0c02d99f60473e91cc2ecaa59f9159","upstreamArgument":"file_path","upstreamValue":"YoutubeDownloadPiece (3c0c02d9) - File Path","value":""},"output_type":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"string"},"model_size":{"fromUpstream":false,"upstreamId":"","upstreamArgument":"","upstreamValue":"","value":"tiny"}}}},"workflowNodes":[{"id":"131_b2ab3d66-563b-4a34-8939-76c2caa8a90a","type":"CustomNode","position":{"x":-103,"y":-59.638566380615856},"data":{"name":"YoutubeListVideosPiece","style":{"module":"YoutubeListVideosPiece","label":"Youtube list videos","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-brands:youtube","iconStyle":{"cursor":"pointer"}},"validationError":false,"orientation":"horizontal"},"width":150,"height":70,"selected":true,"positionAbsolute":{"x":-103,"y":-59.638566380615856},"dragging":false},{"id":"117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159","type":"CustomNode","position":{"x":360,"y":-65},"data":{"name":"YoutubeDownloadPiece","style":{"module":"YoutubeDownloadPiece","label":"Youtube Download Piece","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:download","iconStyle":{"cursor":"pointer"}},"validationError":false,"orientation":"horizontal"},"width":150,"height":70,"selected":false,"positionAbsolute":{"x":360,"y":-65},"dragging":false},{"id":"114_65f6cf14-b129-4875-955d-bd2f66901e13","type":"CustomNode","position":{"x":897,"y":-58},"data":{"name":"EmailSenderPiece","style":{"module":"EmailSenderPiece","label":"Email sender Piece","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:envelope","iconStyle":{"cursor":"pointer"}},"validationError":false,"orientation":"horizontal"},"width":150,"height":70,"selected":false,"dragging":false},{"id":"129_44c1cbc0-185f-4b86-96a2-f93240795503","type":"CustomNode","position":{"x":147,"y":-58},"data":{"name":"GetItemFromArrayPiece","style":{"module":"GetItemFromArrayPiece","label":"Get Item From Array","nodeType":"default","nodeStyle":{"backgroundColor":"#b3cde8"},"useIcon":true,"iconClassName":"fluent:tray-item-remove-24-filled","iconStyle":{"cursor":"pointer"}},"validationError":false,"orientation":"horizontal"},"width":150,"height":70,"selected":false,"positionAbsolute":{"x":536,"y":170.5},"dragging":false},{"id":"166_4854e4df-8288-445d-8f61-56c65543301d","type":"CustomNode","position":{"x":646,"y":-72.5},"data":{"name":"AudioTranscriptionLocalPiece","style":{"module":"AudioTranscriptionLocalPiece","label":"Audio Transcription Local","nodeType":"default","nodeStyle":{"backgroundColor":"#ebebeb"},"useIcon":true,"iconClassName":"fa-solid:comment-dots","iconStyle":{"cursor":"pointer"}},"validationError":false,"orientation":"horizontal"},"width":150,"height":70,"selected":false,"dragging":false}],"workflowEdges":[{"source":"131_b2ab3d66-563b-4a34-8939-76c2caa8a90a","sourceHandle":"source-131_b2ab3d66-563b-4a34-8939-76c2caa8a90a","target":"129_44c1cbc0-185f-4b86-96a2-f93240795503","targetHandle":"target-129_44c1cbc0-185f-4b86-96a2-f93240795503","id":"reactflow__edge-131_b2ab3d66-563b-4a34-8939-76c2caa8a90asource-131_b2ab3d66-563b-4a34-8939-76c2caa8a90a-129_44c1cbc0-185f-4b86-96a2-f93240795503target-129_44c1cbc0-185f-4b86-96a2-f93240795503"},{"source":"129_44c1cbc0-185f-4b86-96a2-f93240795503","sourceHandle":"source-129_44c1cbc0-185f-4b86-96a2-f93240795503","target":"117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159","targetHandle":"target-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159","id":"reactflow__edge-129_44c1cbc0-185f-4b86-96a2-f93240795503source-129_44c1cbc0-185f-4b86-96a2-f93240795503-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159target-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159"},{"source":"117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159","sourceHandle":"source-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159","target":"166_4854e4df-8288-445d-8f61-56c65543301d","targetHandle":"target-166_4854e4df-8288-445d-8f61-56c65543301d","id":"reactflow__edge-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159source-117_3c0c02d9-9f60-473e-91cc-2ecaa59f9159-166_4854e4df-8288-445d-8f61-56c65543301dtarget-166_4854e4df-8288-445d-8f61-56c65543301d"},{"source":"166_4854e4df-8288-445d-8f61-56c65543301d","sourceHandle":"source-166_4854e4df-8288-445d-8f61-56c65543301d","target":"114_65f6cf14-b129-4875-955d-bd2f66901e13","targetHandle":"target-114_65f6cf14-b129-4875-955d-bd2f66901e13","id":"reactflow__edge-166_4854e4df-8288-445d-8f61-56c65543301dsource-166_4854e4df-8288-445d-8f61-56c65543301d-114_65f6cf14-b129-4875-955d-bd2f66901e13target-114_65f6cf14-b129-4875-955d-bd2f66901e13"}]} \ No newline at end of file