
from typing import TYPE_CHECKING

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


lowercase        =  {
    '''configuration_owlvit''': [
        '''OWLVIT_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''OwlViTConfig''',
        '''OwlViTOnnxConfig''',
        '''OwlViTTextConfig''',
        '''OwlViTVisionConfig''',
    ],
    '''processing_owlvit''': ['''OwlViTProcessor'''],
}


try:
		if not is_vision_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase        =  ['''OwlViTFeatureExtractor''']
		lowercase        =  ['''OwlViTImageProcessor''']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase        =  [
		    '''OWLVIT_PRETRAINED_MODEL_ARCHIVE_LIST''',
		    '''OwlViTModel''',
		    '''OwlViTPreTrainedModel''',
		    '''OwlViTTextModel''',
		    '''OwlViTVisionModel''',
		    '''OwlViTForObjectDetection''',
		]

if TYPE_CHECKING:
		from .configuration_owlvit import (
		    OWLVIT_PRETRAINED_CONFIG_ARCHIVE_MAP,
		    OwlViTConfig,
		    OwlViTOnnxConfig,
		    OwlViTTextConfig,
		    OwlViTVisionConfig,
		)
		from .processing_owlvit import OwlViTProcessor

		try:
				if not is_vision_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .feature_extraction_owlvit import OwlViTFeatureExtractor
				from .image_processing_owlvit import OwlViTImageProcessor

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_owlvit import (
				    OWLVIT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    OwlViTForObjectDetection,
				    OwlViTModel,
				    OwlViTPreTrainedModel,
				    OwlViTTextModel,
				    OwlViTVisionModel,
				)

else:
		import sys

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







# 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.
import torch

from ..models.auto import AutoModelForSequenceClassification, AutoTokenizer
from .base import PipelineTool





class       __A(				UpperCAmelCase       ):
					SCREAMING_SNAKE_CASE			    =    '''facebook/bart-large-mnli'''
					SCREAMING_SNAKE_CASE			    =    (
					    '''This is a tool that classifies an English text using provided labels. It takes two inputs: `text`, which '''
					    '''should be the text to classify, and `labels`, which should be the list of labels to use for classification. '''
					    '''It returns the most likely label in the list of provided `labels` for the input text.'''
					)
					SCREAMING_SNAKE_CASE			    =    '''text_classifier'''
					SCREAMING_SNAKE_CASE			    =    AutoTokenizer
					SCREAMING_SNAKE_CASE			    =    AutoModelForSequenceClassification

					SCREAMING_SNAKE_CASE			    =    ['''text''', ['''text''']]
					SCREAMING_SNAKE_CASE			    =    ['''text''']

					def    lowercase__      (	self					:     Union[str, Any]   ):
												super().setup()
												lowerCamelCase_							  =					self.model.config
												lowerCamelCase_							  =					-1
												for idx, label in config.idalabel.items():
																			if label.lower().startswith("""entail"""   ):
																										lowerCamelCase_							  =					int(__UpperCamelCase   )
												if self.entailment_id == -1:
																			raise ValueError("""Could not determine the entailment ID from the model config, please pass it at init."""   )

					def    lowercase__      (	self					:     Any   ,					__UpperCamelCase					:     List[Any]   ,					__UpperCamelCase					:     Optional[Any]   ):
												lowerCamelCase_							  =					labels
												return self.pre_processor(
												    [text] * len(__UpperCamelCase   )   ,					[F'''This example is {label}''' for label in labels]   ,					return_tensors="""pt"""   ,					padding="""max_length"""   ,					)



					def    lowercase__      (	self					:     List[Any]   ,					__UpperCamelCase					:     List[str]   ):
												lowerCamelCase_							  =					outputs.logits
												lowerCamelCase_							  =					torch.argmax(logits[:, 2]   ).item()
												return self._labels[label_id]





