o
    h                     @   s   d dl Z d dlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ e
 s2e s2ed	d
Zd
ZdefddZG dd deZdS )    N)ArgumentParser	Namespace   )%SingleSentenceClassificationProcessor)TextClassificationPipeline)is_tf_availableis_torch_availablelogging   )BaseTransformersCLICommandzRAt least one of PyTorch or TensorFlow 2.0+ should be installed to use CLI trainingFargsc                 C   s   t | S )z
    Factory function used to instantiate training command from provided command line arguments.

    Returns: TrainCommand
    )TrainCommand)r    r   o/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/transformers/commands/train.pytrain_command_factory    s   r   c                   @   sD   e Zd ZedefddZdefddZdd Zd	d
 Z	dd Z
dS )r   parserc                 C   s  | j ddd}|jdtddd |jdtd	d
d |jdtddd |jdtddd |jdddd |jdtddd |jdtddd |jdtddd |jdtd d!d |jd"td#d$d |jd%td&d'd |jd(td)d*d |jd+td,d-d |jd.td/d0d |jtd1 d2S )3z
        Register this command to argparse so it's available for the transformer-cli

        Args:
            parser: Root parser to register command-specific arguments
        trainz$CLI tool to train a model on a task.)helpz--train_dataTzcpath to train (and optionally evaluation) dataset as a csv with tab separated labels and sentences.)typerequiredr   z--column_labelr   z3Column of the dataset csv file with example labels.)r   defaultr   z--column_textr
   z2Column of the dataset csv file with example texts.z--column_idr   z0Column of the dataset csv file with example ids.z--skip_first_row
store_truez-Skip the first row of the csv file (headers).)actionr   z--validation_data zpath to validation dataset.z--validation_splitg?z^if validation dataset is not provided, fraction of train dataset to use as validation dataset.z--outputz./z path to saved the trained model.z--tasktext_classificationzTask to train the model on.z--modelzgoogle-bert/bert-base-uncasedz%Model's name or path to stored model.z--train_batch_size    zBatch size for training.z--valid_batch_size@   zBatch size for validation.z--learning_rategiUMu>zLearning rate.z--adam_epsilong:0yE>zEpsilon for Adam optimizer.)funcN)
add_parseradd_argumentstrintfloatset_defaultsr   )r   train_parserr   r   r   register_subcommand*   sL   z TrainCommand.register_subcommandr   c                 C   s>  t d| _t rdnd| _tj|jdd |j| _|j| _|j	| _	|j
| _
| jd|j d|j  |jdkrAt|j| _n|jd	krHt|jd
krOt| jd|j  tj|j|j|j	|j
|jd| _d | _|jr| jd|j  tj|j|j|j	|j
|jd| _|j| _|j| _|j| _|j| _|j| _d S )Nztransformers-cli/trainingtftorchT)exist_okzLoading z pipeline for r   token_classificationquestion_answeringzLoading dataset from )column_labelcolumn_text	column_idskip_first_rowz Loading validation dataset from )r	   
get_loggerloggerr   	frameworkosmakedirsoutputr+   r,   r-   infotaskmodelr   from_pretrainedpipelineNotImplementedError
train_data	Processorcreate_from_csvr.   train_datasetvalid_datasetvalidation_datavalidation_splittrain_batch_sizevalid_batch_sizelearning_rateadam_epsilon)selfr   r   r   r   __init__]   sJ   


zTrainCommand.__init__c                 C   s   | j dkr	|  S |  S )Nr&   )r1   run_tf	run_torchrF   r   r   r   run   s   
zTrainCommand.runc                 C   s   t )N)r:   rJ   r   r   r   rI      s   zTrainCommand.run_torchc              	   C   s:   | j j| j| j| j| j| j| j| jd | j 	| j
 d S )N)r@   rA   rD   rE   rB   rC   )r9   fitr>   r?   rA   rD   rE   rB   rC   save_pretrainedr4   rJ   r   r   r   rH      s   zTrainCommand.run_tfN)__name__
__module____qualname__staticmethodr   r%   r   rG   rK   rI   rH   r   r   r   r   r   )   s    2-r   )r2   argparser   r   datar   r<   	pipelinesr   utilsr   r   r	   r   r   RuntimeErrorUSE_XLAUSE_AMPr   r   r   r   r   r   <module>   s   	