agent-flow / src /backend /base /langflow /components /assemblyai /assemblyai_poll_transcript.py
Tai Truong
fix readme
d202ada
import assemblyai as aai
from loguru import logger
from langflow.custom import Component
from langflow.field_typing.range_spec import RangeSpec
from langflow.io import DataInput, FloatInput, Output, SecretStrInput
from langflow.schema import Data
class AssemblyAITranscriptionJobPoller(Component):
display_name = "AssemblyAI Poll Transcript"
description = "Poll for the status of a transcription job using AssemblyAI"
documentation = "https://www.assemblyai.com/docs"
icon = "AssemblyAI"
inputs = [
SecretStrInput(
name="api_key",
display_name="Assembly API Key",
info="Your AssemblyAI API key. You can get one from https://www.assemblyai.com/",
),
DataInput(
name="transcript_id",
display_name="Transcript ID",
info="The ID of the transcription job to poll",
),
FloatInput(
name="polling_interval",
display_name="Polling Interval",
value=3.0,
info="The polling interval in seconds",
advanced=True,
range_spec=RangeSpec(min=3, max=30),
),
]
outputs = [
Output(display_name="Transcription Result", name="transcription_result", method="poll_transcription_job"),
]
def poll_transcription_job(self) -> Data:
"""Polls the transcription status until completion and returns the Data."""
aai.settings.api_key = self.api_key
aai.settings.polling_interval = self.polling_interval
# check if it's an error message from the previous step
if self.transcript_id.data.get("error"):
self.status = self.transcript_id.data["error"]
return self.transcript_id
try:
transcript = aai.Transcript.get_by_id(self.transcript_id.data["transcript_id"])
except Exception as e: # noqa: BLE001
error = f"Getting transcription failed: {e}"
logger.opt(exception=True).debug(error)
self.status = error
return Data(data={"error": error})
if transcript.status == aai.TranscriptStatus.completed:
json_response = transcript.json_response
text = json_response.pop("text", None)
utterances = json_response.pop("utterances", None)
transcript_id = json_response.pop("id", None)
sorted_data = {"text": text, "utterances": utterances, "id": transcript_id}
sorted_data.update(json_response)
data = Data(data=sorted_data)
self.status = data
return data
self.status = transcript.error
return Data(data={"error": transcript.error})