






# 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 					SCREAMING_SNAKE_CASE_  (       _a ):
       """simple docstring"""


       __lowerCAmelCase    :		Tuple					='''Salesforce/blip-image-captioning-base'''
       __lowerCAmelCase    :		str					=(
           '''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.'''
       )
       __lowerCAmelCase    :		List[Any]					='''image_captioner'''
       __lowerCAmelCase    :		Dict					=AutoModelForVisionaSeq

       __lowerCAmelCase    :		Optional[int]					=['''image''']
       __lowerCAmelCase    :		List[Any]					=['''text''']





       def __init__(				self	:List[Any],      *snake_case	:Dict,      **snake_case	:List[Any]):



          """simple docstring"""

          requires_backends(self,      ['vision'])
          super().__init__(*snake_case,      **snake_case)





       def 				UpperCamelCase__						(				self	:Union[str, Any],      snake_case	:"Image"):



          """simple docstring"""

          return self.pre_processor(images=snake_case,      return_tensors='pt')





       def 				UpperCamelCase__						(				self	:str,      snake_case	:int):



          """simple docstring"""

          return self.model.generate(**snake_case)





       def 				UpperCamelCase__						(				self	:Optional[Any],      snake_case	:int):



          """simple docstring"""

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










def        _snake_case   (_snake_case				:       list      ,    _snake_case				:       int      ,    _snake_case				:       int = 0      ,    _snake_case				:       int = 0)					->	int:
   _lowercase              =right or len(_snake_case) - 1
   if left > right:
      return -1
   elif list_data[left] == key:
      return left
   elif list_data[right] == key:
      return right
   else:
      return search(_snake_case      ,    _snake_case      ,    left + 1      ,    right - 1)


if __name__ == "__main__":
    import doctest

    doctest.testmod()


