codingutf8 2022 the huggingface inc team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache orglicenseslicense2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license speech processor class for whisper featureextractorclass whisperfeatureextractor tokenizerclass whispertokenizer def initself featureextractor tokenizer super initfeatureextractor tokenizer self currentprocessor self featureextractor self intargetcontextmanager false def getdecoderpromptidsself tasknone languagenone notimestampstrue return self tokenizer getdecoderpromptidstasktask languagelanguage notimestampsnotimestamps def callself args kwargs for backward compatibility if self intargetcontextmanager return self currentprocessorargs kwargs audio kwargs popaudio none samplingrate kwargs popsamplingrate none text kwargs poptext none if lenargs 0 audio args0 args args1 if audio is none and text is none raise valueerroryou need to specify either an audio or text input to process if audio is not none inputs self featureextractoraudio args samplingratesamplingrate kwargs if text is not none encodings self tokenizertext kwargs if text is none return inputs elif audio is none return encodings else inputslabels encodingsinputids return inputs def batchdecodeself args kwargs return self tokenizer batchdecodeargs kwargs def decodeself args kwargs return self tokenizer decodeargs kwargs def getpromptidsself text str returntensorsnp return self tokenizer getpromptidstext returntensorsreturntensors coding utf 8 2022 the huggingface inc team licensed under the apache license version 2 0 the license you may not use this file except in compliance with the license you may obtain a copy of the license at http www apache org licenses license 2 0 unless required by applicable law or agreed to in writing software distributed under the license is distributed on an as is basis without warranties or conditions of any kind either express or implied see the license for the specific language governing permissions and limitations under the license speech processor class for whisper constructs a whisper processor which wraps a whisper feature extractor and a whisper tokenizer into a single processor whisperprocessor offers all the functionalities of whisperfeatureextractor and whispertokenizer see the whisperprocessor __call__ and whisperprocessor decode for more information args feature_extractor whisperfeatureextractor an instance of whisperfeatureextractor the feature extractor is a required input tokenizer whispertokenizer an instance of whispertokenizer the tokenizer is a required input forwards the audio argument to whisperfeatureextractor s whisperfeatureextractor __call__ and the text argument to whispertokenizer __call__ please refer to the doctsring of the above two methods for more information for backward compatibility this method forwards all its arguments to whispertokenizer s pretrainedtokenizer batch_decode please refer to the docstring of this method for more information this method forwards all its arguments to whispertokenizer s pretrainedtokenizer decode please refer to the docstring of this method for more information
from ...processing_utils import ProcessorMixin


class WhisperProcessor(ProcessorMixin):
    r

    feature_extractor_class = "WhisperFeatureExtractor"
    tokenizer_class = "WhisperTokenizer"

    def __init__(self, feature_extractor, tokenizer):
        super().__init__(feature_extractor, tokenizer)
        self.current_processor = self.feature_extractor
        self._in_target_context_manager = False

    def get_decoder_prompt_ids(self, task=None, language=None, no_timestamps=True):
        return self.tokenizer.get_decoder_prompt_ids(task=task, language=language, no_timestamps=no_timestamps)

    def __call__(self, *args, **kwargs):
        
        
        if self._in_target_context_manager:
            return self.current_processor(*args, **kwargs)

        audio = kwargs.pop("audio", None)
        sampling_rate = kwargs.pop("sampling_rate", None)
        text = kwargs.pop("text", None)
        if len(args) > 0:
            audio = args[0]
            args = args[1:]

        if audio is None and text is None:
            raise ValueError("You need to specify either an `audio` or `text` input to process.")

        if audio is not None:
            inputs = self.feature_extractor(audio, *args, sampling_rate=sampling_rate, **kwargs)
        if text is not None:
            encodings = self.tokenizer(text, **kwargs)

        if text is None:
            return inputs

        elif audio is None:
            return encodings
        else:
            inputs["labels"] = encodings["input_ids"]
            return inputs

    def batch_decode(self, *args, **kwargs):
        
        return self.tokenizer.batch_decode(*args, **kwargs)

    def decode(self, *args, **kwargs):
        
        return self.tokenizer.decode(*args, **kwargs)

    def get_prompt_ids(self, text: str, return_tensors="np"):
        return self.tokenizer.get_prompt_ids(text, return_tensors=return_tensors)