UNPKG

@pipedream/gladia

Version:

Pipedream Gladia Components

128 lines (122 loc) 3.17 kB
import { ConfigurationError, getFileStreamAndMetadata, } from "@pipedream/platform"; import FormData from "form-data"; import { camelToSnakeCase } from "../../common/utils.mjs"; import gladia from "../../gladia.app.mjs"; export default { key: "gladia-send-audio-for-transcription", name: "Send Audio For Transcription", description: "Sends audio to Gladia for transcription and optional translation. [See the documentation](https://docs.gladia.io/reference/pre-recorded)", version: "1.0.2", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { gladia, audio: { type: "string", label: "Audio File or URL", description: "Provide an audio file URL or a path to a file in the `/tmp` directory.", }, toggleNoiseReduction: { propDefinition: [ gladia, "toggleNoiseReduction", ], optional: true, }, transcriptionHint: { propDefinition: [ gladia, "transcriptionHint", ], optional: true, }, toggleDiarization: { propDefinition: [ gladia, "toggleDiarization", ], optional: true, }, targetTranslationLanguage: { propDefinition: [ gladia, "targetTranslationLanguage", ], optional: true, }, toggleDirectTranslate: { propDefinition: [ gladia, "toggleDirectTranslate", ], optional: true, }, languageBehaviour: { propDefinition: [ gladia, "languageBehaviour", ], reloadProps: true, optional: true, }, syncDir: { type: "dir", accessMode: "read", sync: true, optional: true, }, }, async additionalProps() { const props = {}; if (this.languageBehaviour === "manual") { props.language = { type: "string", label: "Language", description: "If language_behaviour is set to manual, define the language to use for the transcription", }; } return props; }, async run({ $ }) { if (!this.audio) { throw new ConfigurationError("The Audio File or URL field is required."); } const { gladia, audio, toggleNoiseReduction, toggleDiarization, toggleDirectTranslate, ...data } = this; const formData = new FormData(); const { stream, metadata, } = await getFileStreamAndMetadata(audio); formData.append("audio", stream, { filename: metadata.name, }); formData.append("toggle_noise_reduction", `${toggleNoiseReduction}`); formData.append("toggle_diarization", `${toggleDiarization}`); formData.append("toggle_direct_translate", `${toggleDirectTranslate}`); for (const [ key, value, ] of Object.entries(data)) { formData.append(`${camelToSnakeCase(key)}`, value); } const response = await gladia.sendAudioForTranscription({ data: formData, headers: formData.getHeaders(), }); $.export("$summary", "The audio was successfully transcripted!"); return response; }, };