Source code for steamship.plugin.blockifier.transcriber
from abc import abstractmethod
from typing import List, Optional
from steamship import Block, File, SteamshipError, Tag, Task, TaskState
from steamship.invocable import InvocableResponse
from steamship.invocable.plugin_service import PluginRequest
from steamship.plugin.blockifier.blockifier import Blockifier
from steamship.plugin.inputs.raw_data_plugin_input import RawDataPluginInput
from steamship.plugin.outputs.block_and_tag_plugin_output import BlockAndTagPluginOutput
TRANSCRIPT_ID = "transcript_id"
[docs]
class Transcriber(Blockifier):
[docs]
@abstractmethod
def start_transcription(self, audio_file: PluginRequest[RawDataPluginInput]) -> str:
"""Start a transcription job and return an id to identify the transcription."""
raise NotImplementedError()
[docs]
@abstractmethod
def get_transcript(self, transcript_id: str) -> (Optional[str], Optional[List[Tag]]):
"""Method to retrieve the transcript and optional Tags. If the transcription is not ready, return None"""
raise NotImplementedError()
def _get_transcript(self, transcript_id: str) -> InvocableResponse:
"""Retrieve the transcript using the transcript_id."""
transcript, tags = self.get_transcript(transcript_id)
if transcript is None and tags is None:
return InvocableResponse(
status=Task(
state=TaskState.running,
remote_status_message="Transcription is ongoing.",
remote_status_input={"transcript_id": transcript_id},
)
)
else:
return InvocableResponse(
data=BlockAndTagPluginOutput(
file=File(
blocks=[
Block(
text=transcript,
tags=tags,
)
]
)
)
)
[docs]
def run(
self, request: PluginRequest[RawDataPluginInput]
) -> InvocableResponse[BlockAndTagPluginOutput]:
if request.is_status_check:
if TRANSCRIPT_ID not in request.status.remote_status_input:
raise SteamshipError(message="Status check requests need to provide a valid job id")
transcript_id = request.status.remote_status_input[TRANSCRIPT_ID]
return self._get_transcript(transcript_id)
else:
transcript_id = self.start_transcription(audio_file=request.data.data)
return self._get_transcript(transcript_id)