



from typing import Optional

from .. import Features, NamedSplit
from ..packaged_modules.text.text import Text
from ..utils.typing import NestedDataStructureLike, PathLike
from .abc import AbstractDatasetReader



class     _UpperCAmelCase			(       A__     ):




     def __init__(				self ,						a__ ,						a__ = None ,						a__ = None ,						a__ = None ,						a__ = False ,						a__ = False ,						a__ = None ,						**a__ ,						):
         super().__init__(
             a__ ,						split=a__ ,						features=a__ ,						cache_dir=a__ ,						keep_in_memory=a__ ,						streaming=a__ ,						num_proc=a__ ,						**a__ ,						)
         A__		 =					path_or_paths if isinstance(a__ ,						a__) else {self.split: path_or_paths}
         A__		 =					Text(
             cache_dir=a__ ,						data_files=a__ ,						features=a__ ,						**a__ ,						)




     def 		snake_case_		(				self):
         # Build iterable dataset
         if self.streaming:
             A__		 =					self.builder.as_streaming_dataset(split=self.split)
         # Build regular (map-style) dataset
         else:
             A__		 =					None
             A__		 =					None
             A__		 =					None
             A__		 =					None

             self.builder.download_and_prepare(
                 download_config=a__ ,						download_mode=a__ ,						verification_mode=a__ ,						base_path=a__ ,						num_proc=self.num_proc ,						)
             A__		 =					self.builder.as_dataset(
                 split=self.split ,						verification_mode=a__ ,						in_memory=self.keep_in_memory)
         return dataset





# 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     _UpperCAmelCase			(       A__     ):
     UpperCamelCase__		    =				'''Salesforce/blip-image-captioning-base'''
     UpperCamelCase__		    =				(
         '''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.'''
     )
     UpperCamelCase__		    =				'''image_captioner'''
     UpperCamelCase__		    =				AutoModelForVisionaSeq

     UpperCamelCase__		    =				['''image''']
     UpperCamelCase__		    =				['''text''']




     def __init__(				self ,						*a__ ,						**a__):
         requires_backends(self ,						['''vision'''])
         super().__init__(*a__ ,						**a__)




     def 		snake_case_		(				self ,						a__):
         return self.pre_processor(images=a__ ,						return_tensors='''pt''')




     def 		snake_case_		(				self ,						a__):
         return self.model.generate(**a__)




     def 		snake_case_		(				self ,						a__):
         return self.pre_processor.batch_decode(a__ ,						skip_special_tokens=a__)[0].strip()
