import abc class AbstractPromptStrategy: """ Represents a strategy for generating prompts for a given audio segment. Note that the strategy must be picklable, as it will be serialized and sent to the workers. """ @abc.abstractmethod def get_segment_prompt(self, segment_index: int, whisper_prompt: str, detected_language: str) -> str: """ Retrieves the prompt for a given segment. Parameters ---------- segment_index: int The index of the segment. whisper_prompt: str The prompt for the segment generated by Whisper. This is typically concatenated with the initial prompt. detected_language: str The language detected for the segment. """ pass @abc.abstractmethod def on_segment_finished(self, segment_index: int, whisper_prompt: str, detected_language: str, result: dict): """ Called when a segment has finished processing. Parameters ---------- segment_index: int The index of the segment. whisper_prompt: str The prompt for the segment generated by Whisper. This is typically concatenated with the initial prompt. detected_language: str The language detected for the segment. result: dict The result of the segment. It has the following format: { "text": str, "segments": [ { "text": str, "start": float, "end": float, "words": [words], } ], "language": str, } """ pass def _concat_prompt(self, prompt1, prompt2): """ Concatenates two prompts. Parameters ---------- prompt1: str The first prompt. prompt2: str The second prompt. """ if (prompt1 is None): return prompt2 elif (prompt2 is None): return prompt1 else: return prompt1 + " " + prompt2