


"""simple docstring"""






import os
import shutil
import unittest
from unittest.mock import patch

from transformers.testing_utils import CaptureStd, is_pt_tf_cross_test, require_torch


class 			SCREAMING_SNAKE_CASE_  (   unittest.TestCase):




							'''simple docstring'''





							@patch("sys.argv"	,					["fakeprogrampath", "env"])
							def        UpperCAmelCase (						self)   ->	Dict:







								'''simple docstring'''




								import transformers.commands.transformers_cli

								with CaptureStd() as cs:
									transformers.commands.transformers_cli.main()
								self.assertIn("Python version"	,					cs.out)
								self.assertIn("Platform"	,					cs.out)
								self.assertIn("Using distributed or parallel set-up in script?"	,					cs.out)




							@is_pt_tf_cross_test
							@patch(
							    "sys.argv"	,					["fakeprogrampath", "pt-to-tf", "--model-name", "hf-internal-testing/tiny-random-gptj", "--no-pr"])
							def        UpperCAmelCase (						self)   ->	List[Any]:







								'''simple docstring'''




								import transformers.commands.transformers_cli

								shutil.rmtree("/tmp/hf-internal-testing/tiny-random-gptj"	,					ignore_errors=lowerCamelCase__)  # cleans potential past runs
								transformers.commands.transformers_cli.main()

								# The original repo has no TF weights -- if they exist, they were created by the CLI
								self.assertTrue(os.path.exists("/tmp/hf-internal-testing/tiny-random-gptj/tf_model.h5"))




							@require_torch
							@patch("sys.argv"	,					["fakeprogrampath", "download", "hf-internal-testing/tiny-random-gptj", "--cache-dir", "/tmp"])
							def        UpperCAmelCase (						self)   ->	int:







								'''simple docstring'''




								import transformers.commands.transformers_cli

								# # remove any previously downloaded model to start clean
								shutil.rmtree("/tmp/models--hf-internal-testing--tiny-random-gptj"	,					ignore_errors=lowerCamelCase__)

								# run the command
								transformers.commands.transformers_cli.main()

								# check if the model files are downloaded correctly on /tmp/models--hf-internal-testing--tiny-random-gptj
								self.assertTrue(os.path.exists("/tmp/models--hf-internal-testing--tiny-random-gptj/blobs"))
								self.assertTrue(os.path.exists("/tmp/models--hf-internal-testing--tiny-random-gptj/refs"))
								self.assertTrue(os.path.exists("/tmp/models--hf-internal-testing--tiny-random-gptj/snapshots"))







							@require_torch
							@patch(
							    "sys.argv"	,					[
							        "fakeprogrampath",
							        "download",
							        "hf-internal-testing/test_dynamic_model_with_tokenizer",
							        "--trust-remote-code",
							        "--cache-dir",
							        "/tmp",
							    ]	,					)
							def        UpperCAmelCase (						self)   ->	Optional[int]:







								'''simple docstring'''




								import transformers.commands.transformers_cli

								# # remove any previously downloaded model to start clean
								shutil.rmtree("/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer"	,					ignore_errors=lowerCamelCase__)

								# run the command
								transformers.commands.transformers_cli.main()

								# check if the model files are downloaded correctly on /tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer
								self.assertTrue(os.path.exists("/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/blobs"))
								self.assertTrue(os.path.exists("/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/refs"))
								self.assertTrue(
								    os.path.exists("/tmp/models--hf-internal-testing--test_dynamic_model_with_tokenizer/snapshots"))









"""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 ..models.auto import AutoModelForSeqaSeqLM, AutoTokenizer
from .base import PipelineTool


lowercase  		=			"""Here is a text containing a lot of information: '''{text}'''.

Can you answer this question about the text: '{question}'"""


class 			SCREAMING_SNAKE_CASE_  (   _lowercase):




							'''simple docstring'''





							__magic_name__					:     List[Any]				  =  '''google/flan-t5-base'''
							__magic_name__					:     Dict				  =  (
							    '''This is a tool that answers questions related to a text. It takes two arguments named `text`, which is the '''
							    '''text where to find the answer, and `question`, which is the question, and returns the answer to the question.'''
							)
							__magic_name__					:     Union[str, Any]				  =  '''text_qa'''
							__magic_name__					:     Union[str, Any]				  =  AutoTokenizer
							__magic_name__					:     List[Any]				  =  AutoModelForSeqaSeqLM

							__magic_name__					:     Tuple				  =  ['''text''', '''text''']
							__magic_name__					:     Tuple				  =  ['''text''']




							def        UpperCAmelCase (						self	,					lowerCamelCase__	,					lowerCamelCase__)   ->	Optional[int]:







								'''simple docstring'''




								snake_case__  :						str		=      QA_PROMPT.format(text=lowerCamelCase__	,					question=lowerCamelCase__)
								return self.pre_processor(lowerCamelCase__	,					return_tensors="pt")




							def        UpperCAmelCase (						self	,					lowerCamelCase__)   ->	Optional[int]:







								'''simple docstring'''




								snake_case__  :						Tuple		=      self.model.generate(**lowerCamelCase__)

								snake_case__,					snake_case__  :						Dict		=      inputs["input_ids"].shape
								snake_case__  :						List[Any]		=      output_ids.shape[0]

								return output_ids.reshape(lowerCamelCase__	,					out_b // in_b	,					*output_ids.shape[1:])[0][0]







							def        UpperCAmelCase (						self	,					lowerCamelCase__)   ->	List[Any]:







								'''simple docstring'''




								return self.pre_processor.decode(lowerCamelCase__	,					skip_special_tokens=lowerCamelCase__	,					clean_up_tokenization_spaces=lowerCamelCase__)





