

'''simple docstring'''






# 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 typing import TYPE_CHECKING

from ..models.auto import AutoModelForVisionaSeq
from ..utils import requires_backends
from .base import PipelineTool


if TYPE_CHECKING:
 from PIL import Image






class 			lowercase_	(lowerCamelCase__      ):




  """simple docstring"""




  SCREAMING_SNAKE_CASE    :  Any							=			'Salesforce/blip-image-captioning-base'
  SCREAMING_SNAKE_CASE    :  Union[str, Any]							=			(
      'This is a tool that generates a description of an image. It takes an input named `image` which should be the '
      'image to caption, and returns a text that contains the description in English.'
  )
  SCREAMING_SNAKE_CASE    :  str							=			'image_captioner'
  SCREAMING_SNAKE_CASE    :  int							=			AutoModelForVisionaSeq

  SCREAMING_SNAKE_CASE    :  str							=			['image']
  SCREAMING_SNAKE_CASE    :  Optional[Any]							=			['text']






  def __init__(      self   :     Union[str, Any]					,*lowercase__   :     Dict					,**lowercase__   :     Optional[Any]			):
   requires_backends(self					,['''vision''']			)
   super().__init__(*lowercase__					,**lowercase__			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Dict					,lowercase__   :     "Image"			):
   return self.pre_processor(images=lowercase__					,return_tensors='''pt'''			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Tuple					,lowercase__   :     Tuple			):
   return self.model.generate(**lowercase__			)






  def 					SCREAMING_SNAKE_CASE      (      self   :     Any					,lowercase__   :     int			):
   return self.pre_processor.batch_decode(lowercase__					,skip_special_tokens=lowercase__			)[0].strip()


from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCamelCase  							=						{
    '''configuration_electra''': ['''ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''ElectraConfig''', '''ElectraOnnxConfig'''],
    '''tokenization_electra''': ['''ElectraTokenizer'''],
}

try:
      if not is_tokenizers_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase  							=						['''ElectraTokenizerFast''']

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase  							=						[
          '''ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST''',
          '''ElectraForCausalLM''',
          '''ElectraForMaskedLM''',
          '''ElectraForMultipleChoice''',
          '''ElectraForPreTraining''',
          '''ElectraForQuestionAnswering''',
          '''ElectraForSequenceClassification''',
          '''ElectraForTokenClassification''',
          '''ElectraModel''',
          '''ElectraPreTrainedModel''',
          '''load_tf_weights_in_electra''',
      ]

try:
      if not is_tf_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase  							=						[
          '''TF_ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST''',
          '''TFElectraForMaskedLM''',
          '''TFElectraForMultipleChoice''',
          '''TFElectraForPreTraining''',
          '''TFElectraForQuestionAnswering''',
          '''TFElectraForSequenceClassification''',
          '''TFElectraForTokenClassification''',
          '''TFElectraModel''',
          '''TFElectraPreTrainedModel''',
      ]

try:
      if not is_flax_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      UpperCamelCase  							=						[
          '''FlaxElectraForCausalLM''',
          '''FlaxElectraForMaskedLM''',
          '''FlaxElectraForMultipleChoice''',
          '''FlaxElectraForPreTraining''',
          '''FlaxElectraForQuestionAnswering''',
          '''FlaxElectraForSequenceClassification''',
          '''FlaxElectraForTokenClassification''',
          '''FlaxElectraModel''',
          '''FlaxElectraPreTrainedModel''',
      ]


if TYPE_CHECKING:
      from .configuration_electra import ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP, ElectraConfig, ElectraOnnxConfig
      from .tokenization_electra import ElectraTokenizer

      try:
            if not is_tokenizers_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .tokenization_electra_fast import ElectraTokenizerFast

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_electra import (
                ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST,
                ElectraForCausalLM,
                ElectraForMaskedLM,
                ElectraForMultipleChoice,
                ElectraForPreTraining,
                ElectraForQuestionAnswering,
                ElectraForSequenceClassification,
                ElectraForTokenClassification,
                ElectraModel,
                ElectraPreTrainedModel,
                load_tf_weights_in_electra,
            )

      try:
            if not is_tf_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_tf_electra import (
                TF_ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST,
                TFElectraForMaskedLM,
                TFElectraForMultipleChoice,
                TFElectraForPreTraining,
                TFElectraForQuestionAnswering,
                TFElectraForSequenceClassification,
                TFElectraForTokenClassification,
                TFElectraModel,
                TFElectraPreTrainedModel,
            )

      try:
            if not is_flax_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_flax_electra import (
                FlaxElectraForCausalLM,
                FlaxElectraForMaskedLM,
                FlaxElectraForMultipleChoice,
                FlaxElectraForPreTraining,
                FlaxElectraForQuestionAnswering,
                FlaxElectraForSequenceClassification,
                FlaxElectraForTokenClassification,
                FlaxElectraModel,
                FlaxElectraPreTrainedModel,
            )

else:
      import sys

      UpperCamelCase  							=						_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)



