
import torch
from torch import nn
from transformers import CLIPPreTrainedModel, CLIPVisionModel

from ...models.attention import BasicTransformerBlock
from ...utils import logging


_snake_case      = logging.get_logger(__name__)  # pylint: disable=invalid-name
class       _lowerCAmelCase  (		__magic_name__							):

 """simple docstring"""

 def __init__(						self			:			int					, SCREAMING_SNAKE_CASE__			:			Union[str, Any]					, SCREAMING_SNAKE_CASE__			:			Optional[int]=7_68   ):






      """simple docstring"""



      super().__init__(SCREAMING_SNAKE_CASE__   )
      UpperCamelCase						    =					proj_size

      UpperCamelCase						    =					CLIPVisionModel(SCREAMING_SNAKE_CASE__   )
      UpperCamelCase						    =					PaintByExampleMapper(SCREAMING_SNAKE_CASE__   )
      UpperCamelCase						    =					nn.LayerNorm(config.hidden_size   )
      UpperCamelCase						    =					nn.Linear(config.hidden_size					, self.proj_size   )

      # uncondition for scaling
      UpperCamelCase						    =					nn.Parameter(torch.randn((1, 1, self.proj_size)   )   )






 def      __lowerCAmelCase  (						self			:			Union[str, Any]					, SCREAMING_SNAKE_CASE__			:			str					, SCREAMING_SNAKE_CASE__			:			str=False   ):






      """simple docstring"""



      UpperCamelCase						    =					self.model(pixel_values=SCREAMING_SNAKE_CASE__   )
      UpperCamelCase						    =					clip_output.pooler_output
      UpperCamelCase						    =					self.mapper(latent_states[:, None]   )
      UpperCamelCase						    =					self.final_layer_norm(SCREAMING_SNAKE_CASE__   )
      UpperCamelCase						    =					self.proj_out(SCREAMING_SNAKE_CASE__   )
      if return_uncond_vector:
           return latent_states, self.uncond_vector

      return latent_states




class       _lowerCAmelCase  (		nn.Module							):

 """simple docstring"""

 def __init__(						self			:			Tuple					, SCREAMING_SNAKE_CASE__			:			Optional[Any]   ):






      """simple docstring"""



      super().__init__()
      UpperCamelCase						    =					(config.num_hidden_layers + 1) // 5
      UpperCamelCase						    =					config.hidden_size
      UpperCamelCase						    =					1
      UpperCamelCase						    =					nn.ModuleList(
          [
              BasicTransformerBlock(SCREAMING_SNAKE_CASE__					, SCREAMING_SNAKE_CASE__					, SCREAMING_SNAKE_CASE__					, activation_fn='gelu'					, attention_bias=SCREAMING_SNAKE_CASE__   )
              for _ in range(SCREAMING_SNAKE_CASE__   )
          ]   )






 def      __lowerCAmelCase  (						self			:			Optional[Any]					, SCREAMING_SNAKE_CASE__			:			Optional[Any]   ):






      """simple docstring"""



      for block in self.blocks:
           UpperCamelCase						    =					block(SCREAMING_SNAKE_CASE__   )

      return hidden_states




# Copyright 2023 The HuggingFace Inc. team. All rights reserved.
#
# 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.
from ..models.whisper import WhisperForConditionalGeneration, WhisperProcessor
from .base import PipelineTool
class       _lowerCAmelCase  (		__magic_name__							):

 """simple docstring"""
 SCREAMING_SNAKE_CASE_				:					Tuple       						="openai/whisper-base"
 SCREAMING_SNAKE_CASE_				:					List[str]       						=(
     "This is a tool that transcribes an audio into text. It takes an input named `audio` and returns the "
     "transcribed text."
 )
 SCREAMING_SNAKE_CASE_				:					int       						="transcriber"
 SCREAMING_SNAKE_CASE_				:					Tuple       						=WhisperProcessor
 SCREAMING_SNAKE_CASE_				:					List[Any]       						=WhisperForConditionalGeneration

 SCREAMING_SNAKE_CASE_				:					Union[str, Any]       						=["audio"]
 SCREAMING_SNAKE_CASE_				:					Any       						=["text"]

 def      __lowerCAmelCase  (						self			:			List[Any]					, SCREAMING_SNAKE_CASE__			:			List[Any]   ):






      """simple docstring"""



      return self.pre_processor(SCREAMING_SNAKE_CASE__					, return_tensors='pt'   ).input_features

 def      __lowerCAmelCase  (						self			:			Tuple					, SCREAMING_SNAKE_CASE__			:			Union[str, Any]   ):






      """simple docstring"""



      return self.model.generate(inputs=SCREAMING_SNAKE_CASE__   )






 def      __lowerCAmelCase  (						self			:			List[str]					, SCREAMING_SNAKE_CASE__			:			List[str]   ):






      """simple docstring"""



      return self.pre_processor.batch_decode(SCREAMING_SNAKE_CASE__					, skip_special_tokens=SCREAMING_SNAKE_CASE__   )[0]


