codingutf8 2021 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 speech2text2 featureextractorclass autofeatureextractor tokenizerclass speech2text2tokenizer def initself featureextractor tokenizer super initfeatureextractor tokenizer self currentprocessor self featureextractor self intargetcontextmanager false def callself args kwargs for backward compatibility if self intargetcontextmanager return self currentprocessorargs kwargs if rawspeech in kwargs warnings warnusing rawspeech as a keyword argument is deprecated use audio instead audio kwargs poprawspeech else 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 contextmanager def astargetprocessorself warnings warn astargetprocessor is deprecated and will be removed in v5 of transformers you can process your labels by using the argument text of the regular call method either in the same call as your audio inputs or in a separate call self intargetcontextmanager true self currentprocessor self tokenizer yield self currentprocessor self featureextractor self intargetcontextmanager false coding utf 8 2021 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 speech2text2 constructs a speech2text2 processor which wraps a speech2text2 feature extractor and a speech2text2 tokenizer into a single processor speech2text2processor offers all the functionalities of autofeatureextractor and speech2text2tokenizer see the speech2text2processor __call__ and speech2text2processor decode for more information args feature_extractor autofeatureextractor an instance of autofeatureextractor the feature extractor is a required input tokenizer speech2text2tokenizer an instance of speech2text2tokenizer the tokenizer is a required input when used in normal mode this method forwards all its arguments to autofeatureextractor s autofeatureextractor __call__ and returns its output if used in the context speech2text2processor as_target_processor this method forwards all its arguments to speech2text2tokenizer s speech2text2tokenizer __call__ please refer to the doctsring of the above two methods for more information for backward compatibility this method forwards all its arguments to speech2text2tokenizer s pretrainedtokenizer batch_decode please refer to the docstring of this method for more information this method forwards all its arguments to speech2text2tokenizer s pretrainedtokenizer decode please refer to the docstring of this method for more information temporarily sets the tokenizer for processing the input useful for encoding the labels when fine tuning speech2text2
import warnings
from contextlib import contextmanager

from ...processing_utils import ProcessorMixin


class Speech2Text2Processor(ProcessorMixin):
    r

    feature_extractor_class = "AutoFeatureExtractor"
    tokenizer_class = "Speech2Text2Tokenizer"

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

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

        if "raw_speech" in kwargs:
            warnings.warn("Using `raw_speech` as a keyword argument is deprecated. Use `audio` instead.")
            audio = kwargs.pop("raw_speech")
        else:
            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)

    @contextmanager
    def as_target_processor(self):
        
        warnings.warn(
            "`as_target_processor` is deprecated and will be removed in v5 of Transformers. You can process your "
            "labels by using the argument `text` of the regular `__call__` method (either in the same call as "
            "your audio inputs, or in a separate call."
        )
        self._in_target_context_manager = True
        self.current_processor = self.tokenizer
        yield
        self.current_processor = self.feature_extractor
        self._in_target_context_manager = False