
    :g|                        d dl Z d dlZd dlmZ d dlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZdZdZdZ ej        e          Z ej        e          ZeeeeeedZd dl Z d dlZd Zd Zd Z d Z!dS )    N)Dataset)T5TokenizerT5ForConditionalGenerationTrainingArgumentsTrainer   )COEFICIENTES_PAREDES)COEFICIENTES_PESSOAS)COEFICIENTES_VIDROS)COEFICIENTES_TELHADOS)COEFICIENTE_AR)COEFICIENTES_PORTASz=/var/www/html/cag/cag/conhecimento_base/base_conhecimento.csvzG/var/www/html/cag/cag/conhecimento_base/dataset_perguntas_respostas.csvz7/var/www/html/cag/cag/conhecimento_base/modelo_treinadozt5-small)ParedesPessoasTelhadosVidroszRenovacao de ArPortasc           
         g }t                                           D ]c\  }}|                                D ]G\  }}d|vrEt          d| d           d|                    dd          |                    dg           di|d<   |d                                         D ]u\  }}|                    dd          }	d	| d
| d}
d| d
| d|	 d}|                    |
|d           d| d| d}d| d| d|	 d}|                    ||d           v|dv r'd| d}d| d|	 d}|                    ||d           d|                                v r'd| d}d| d|	 d}|                    ||d           Iet          j        t          j        	                    |          d           t          j        |          }|                    |d           t          d|            d S )!z\
    Prepara o dataset de perguntas e respostas a partir dos coeficientes padronizados.
    
espessurasz[WARNING] 'u;   ' não tem a chave 'espessuras', criando espessura padrão.1cmcoeficienter   	sinonimos)r   r   zQual o coeficiente para z com espessura de ?zPara u   , o coeficiente sugerido é .)perguntarespostazQual o coeficiente de  zO coeficiente de u    é )r   r   r   z( usado em ambientes com ar-condicionado?u+    usado em ambientes com ar-condicionado é 	renovacaou2   Qual a taxa de renovação de ar recomendada para u-   A taxa de renovação de ar recomendada para u    m³/h.T)exist_okF)indexz[INFO] Dataset salvo em N)COEFICIENTESitemsprintgetappendlowerosmakedirspathdirnamepd	DataFrameto_csv)csv_conhecimentocsv_datasetperguntas_respostas	categoriadados_categoriatipo_materialdados_material	espessuradados_espessurar   r   r   pergunta_coefresposta_coefpergunta_usoresposta_usopergunta_renovacaoresposta_renovacaodatasets                      */var/www/html/cag/ctermica/chatctermica.pypreparar_datasetr?   $   s    &2&8&8&:&: #m #m"	?-<-B-B-D-D "	m "	m)M>>11nMnnnooo'5'9'9-'K'K%3%7%7R%H%H 0|, /=\.J.P.P.R.R c c*	?-11-CC dmccW`cccy=yyIyykvyyy#**h+W+WXXX !V U U U U U aM a aI a aS^ a a a#**S`+a+abbbb ===oooo{={{mx{{{#**R^+_+_```ioo////%jZg%j%j%j"%|Ub%|%|hs%|%|%|"#**8JXj+k+klllE"	mJ K,,t<<<<l.//GNN;eN,,,	
2[
2
233333    c                 `   d | d         D             }d | d         D             }t          |dddd	          }t          |dddd	          }|d
         }d||t           j        k    <   |d
                                         |d                                         |                                dS )uB   
    Pré-processa os exemplos do dataset para o treinamento.
    c                     g | ]}d | S )
pergunta:  ).0r   s     r>   
<listcomp>z'preprocessa_exemplo.<locals>.<listcomp>_   s!    MMMH'X''MMMr@   r   c                     g | ]}| S rD   rD   )rE   r   s     r>   rF   z'preprocessa_exemplo.<locals>.<listcomp>`   s    AAAmAAAr@   r      T
max_lengthpt)rI   
truncationpaddingreturn_tensors	input_idsiattention_mask)rN   rO   labels)	tokenizerpad_token_idtolist)exemplosentradassaidasentrada_tokenizadasaida_tokenizadarP   s         r>   preprocessa_exemplorY   [   s     NM8LMMMHAAHZ,@AAAF"   !   k*F/3F6Y++, (4;;==,-=>EEGG--//  r@   c                 2   t           j                            |           st          d|            	 t	          j        |           }n$# t          $ r}t          d|           d}~ww xY wt          j	        |          }t          d           |                    t          d          }|                    d          }|d	         }|d
         }t          d           t          |dddddddd	  	        }	t          d           t          t           |	||          }
|
                                 t          d           t          d           t                               |           t&                              |           t          d|            dS )zA
    Treina o modelo com o dataset de perguntas e respostas.
    u   O dataset não foi encontrado: zErro ao ler o dataset CSV: Nu$   [INFO] Pré-processando o dataset...T)batchedg?)	test_sizetraintestz0[INFO] Configurando argumentos de treinamento...stepsd         i     z./logs)	
output_direvaluation_strategy
eval_stepsper_device_train_batch_sizeper_device_eval_batch_sizenum_train_epochs
save_stepssave_total_limitlogging_dirz[INFO] Iniciando treinamento...)modelargstrain_dataseteval_datasetu   [INFO] Treinamento concluído.z$[INFO] Salvando o modelo treinado...z[INFO] Modelo salvo em )r'   r)   existsFileNotFoundErrorr+   read_csv	Exception
ValueErrorr   from_pandasr#   maprY   train_test_splitr   r   modelor]   save_pretrainedrQ   )r/   
model_pathdadoser=   tokenized_datasetdataset_splitro   rp   training_argstrainers              r>   treinar_modelor   |   s    7>>+&& Q O+ O OPPP<K(( < < <:q::;;;< !%((G 

0111$7FF &666EEM!'*M (L 

<===%#$%#$
 
 
M 

+,,,#!	  G MMOOO	
*+++ 

0111
:&&&j)))	
0J
0
011111s   A 
A)A$$A)c                 r   t           j                            |          st          d|           t	          j        |          }t          j        |          }d|  d} ||ddd          }|                    |d         dd	d
dd          }|                    |d         d          }d|v sd|v rd}|S )z;
    Usa o modelo treinado para responder a perguntas.
    u'   O modelo treinado não foi encontrado: rC   z </s>rJ   T)rM   rL   rK   rN   2   r   rc   gffffff?)rI   num_return_sequencesno_repeat_ngram_sizetop_ptop_kr   )skip_special_tokensDesconhecida0u8   Desculpe, não consegui encontrar uma resposta adequada.)	r'   r)   rq   rr   r   from_pretrainedr   generatedecode)r   r{   modelo_treinadotokenizer_treinadoentradarW   saidar   s           r>   responder_perguntar      s     7>>*%% X V* V VWWW 1@LLO$4Z@@ +8***G++GDRVcghhh $$;' %  E "((qt(LLH !!SH__MOr@   )"r'   pandasr+   datasetsr   transformersr   r   r   r   coefparedesr	   coefpessoasr
   
coefvidrosr   coeftelhadosr   coefrenovacaor   
coefportasr   CSV_CONHECIMENTOCSV_DATASET
MODEL_PATHMODELO_NOMEr   rQ   ry   r!   r?   rY   r   r   rD   r@   r>   <module>r      s{   				           \ \ \ \ \ \ \ \ \ \ \ \ - - - - - - - - - - - - + + + + + + / / / / / / ) ) ) ) ) ) + + + + + + S WF
 'K'44		3	#	3K	@	@ $#%!%!  
			    /4 /4 /4n  B62 62 62r    r@   