o
    Ž’õfâ  ã                   @   sP  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ dd„ Z	dd„ Z
d'd
d„ZedƒZdd„ Ze d¡Zd(dd„Zd)dd„Zeddd�ZejZde_dd„ Zdd„ ZdZdZg Ze  e¡D ]Ze d ¡r{e j ee¡Ze	eƒZ e  !d!¡Z"e #e"¡ q_eD ]Z$ee$ƒZ%e &e 'e%g¡¡ q~d"d#„ Z(d$Z)e(e)ƒZ*e+d%e)› �ƒ e+d&e*› �ƒ dS )*é    N)ÚSentenceTransformer)Úpipelinec                 C   s@   d}t | dƒ�}|| ¡ 7 }W d   ƒ |S 1 sw   Y  |S )NÚ Úr)ÚopenÚread)Útxt_pathÚtextÚfile© r   ú0/home/www_ssl/assistant/app/project_assistant.pyÚextract_text_from_txt	   s   
ÿþr   c                 C   sV   t | dƒ�}t |¡}d}|jD ]}|| ¡ 7 }qW d   ƒ |S 1 s$w   Y  |S )NÚrbr   )r   ÚPyPDF2Ú	PdfReaderÚpagesÚextract_text)Úpdf_pathr
   Úreaderr	   Úpager   r   r   Úextract_text_from_pdf   s   

ÿ
ýûr   éè  éÈ   c                 C   sJ   g }d}|t | ƒk r#|| }| ||… }| |¡ || }|t | ƒk s
|S ©Nr   )ÚlenÚappend)r	   Ú
chunk_sizeÚoverlapÚchunksÚstartÚendÚchunkr   r   r   Ú
chunk_text   s   
ür"   zall-MiniLM-L6-v2c                 C   s
   t  | ¡S )N)ÚmodelÚencode)r	   r   r   r   Úcreate_embedding%   s   
r%   i€  é   c                 C   ó(   t | ƒ}t t |g¡|¡\}}|d S r   ©r%   ÚindexÚsearchÚnpÚarray)ÚqueryÚkÚquery_vectorÚDÚIr   r   r   r*   ,   ó   r*   é   c                 C   r'   r   r(   )r-   r.   r/   Ú	DistancesÚIndicesr   r   r   Úsearch_question1   r2   r6   zquestion-answeringÚgpt2)r#   Tc                 C   s>   d| › d|› d�}t |ddddd�d d	 }| d
¡d  ¡ S )Nú
Pregunta: z
Contexto: z
Respuesta:é,  é   T)Ú
max_lengthÚnum_return_sequencesÚ
truncationÚmax_new_tokensr   Úgenerated_textz
Respuesta:éÿÿÿÿ)Ú	generatorÚsplitÚstrip)r-   ÚcontextÚpromptÚresponser   r   r   Úgenerate_response<   s   rG   c                 C   s   t || dœdddd�}|d S )N)rD   Úquestionr:   Tr9   )r<   r=   r>   Úanswer)rA   )r-   rD   rF   r   r   r   Úgenerate_answerA   s   þþrJ   z /home/www_ssl/assistant/data/pdfz /home/www_ssl/assistant/data/txtz.txtÚ.c                 C   s.   t | ƒ}dd„ |D ƒ}d |¡}t| |ƒ}|S )Nc                 S   s   g | ]}t | ‘qS r   )Ú
all_chunks)Ú.0Úir   r   r   Ú
<listcomp>e   s    z%project_assistant.<locals>.<listcomp>ú )r6   ÚjoinrJ   )r-   Úrelevant_chunk_indicesÚrelevant_chunksrD   rF   r   r   r   Úproject_assistantc   s
   

rT   u3   Â¿CuÃ¡les son las fases principales de un proyecto?r8   zRespuesta: )r   r   )r&   )r3   ),Úosr   Úsentence_transformersr   ÚfaissÚnumpyr+   Útransformersr   r   r   r"   r#   r%   ÚIndexFlatL2r)   r*   r6   rA   Ú	tokenizerÚclean_up_tokenization_spacesrG   rJ   Ú
pdf_folderÚ
txt_folderrL   ÚlistdirÚfilenameÚendswithÚpathrQ   r   r	   rB   r   Úextendr!   Ú	embeddingÚaddr,   rT   rH   rI   Úprintr   r   r   r   Ú<module>   sJ    



	



€