





# 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        snake_case_		(			_A):
		lowerCamelCase    :List[Any]						=     "Salesforce/blip-image-captioning-base"
		lowerCamelCase    :int						=     (
		    "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    :str						=     "image_captioner"
		lowerCamelCase    :Any						=     AutoModelForVisionaSeq

		lowerCamelCase    :List[str]						=     ["image"]
		lowerCamelCase    :Union[str, Any]						=     ["text"]







		def __init__(		self			,     *__lowercase			,     **__lowercase   )				->   Any:
				requires_backends(self			,     ['''vision''']   )
				super().__init__(*__lowercase			,     **__lowercase   )







		def 			__lowercase   (		self			,     __lowercase   )				->   Optional[int]:
				return self.pre_processor(images=__lowercase			,     return_tensors='''pt'''   )







		def 			__lowercase   (		self			,     __lowercase   )				->   Optional[int]:
				return self.model.generate(**__lowercase   )







		def 			__lowercase   (		self			,     __lowercase   )				->   Any:
				return self.pre_processor.batch_decode(__lowercase			,     skip_special_tokens=__lowercase   )[0].strip()








from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


snake_case_							=			{
    '''configuration_instructblip''': [
        '''INSTRUCTBLIP_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''InstructBlipConfig''',
        '''InstructBlipQFormerConfig''',
        '''InstructBlipVisionConfig''',
    ],
    '''processing_instructblip''': ['''InstructBlipProcessor'''],
}

try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				snake_case_							=			[
				    '''INSTRUCTBLIP_PRETRAINED_MODEL_ARCHIVE_LIST''',
				    '''InstructBlipQFormerModel''',
				    '''InstructBlipPreTrainedModel''',
				    '''InstructBlipForConditionalGeneration''',
				    '''InstructBlipVisionModel''',
				]

if TYPE_CHECKING:
				from .configuration_instructblip import (
				    INSTRUCTBLIP_PRETRAINED_CONFIG_ARCHIVE_MAP,
				    InstructBlipConfig,
				    InstructBlipQFormerConfig,
				    InstructBlipVisionConfig,
				)
				from .processing_instructblip import InstructBlipProcessor

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_instructblip import (
								    INSTRUCTBLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
								    InstructBlipForConditionalGeneration,
								    InstructBlipPreTrainedModel,
								    InstructBlipQFormerModel,
								    InstructBlipVisionModel,
								)

else:
				import sys

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

