o
    g                     @   sz  d dl mZmZmZmZ d dlmZ d dlZd dlmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZmZmZmZmZ d dlmZmZ d dlZd dlZd dlZd dlZd dlmZ d dlZe Z ee_!eedZ"e
"d	Z#d
Z$dZ%dZ&dd Z'dd Z(dd Z)dd Z*dd Z+e+ \Z,Z-d'ddZ.dd Z/e 0ddd Z1e 2dd efd!d"Z3e 2d#d$efd%d&Z4dS )(    )	APIRouterHTTPExceptionRequestDepends)RedirectResponseN)OpenAI)ChatMessage
SpeechTextQuizMessageLineUserMedicineTextUserQuestion)loggeropenai_api_key)TfidfVectorizer)api_keys3z$shanri-ai-chatbot-for-text-to-speechz/home/GPT/reference.pdfz/home/GPT/QA.xlsxc                    s8   dd | D }t jjjd|d}|jd jj }|S )Nc                 S   s   g | ]	}| d r|qS )content)get).0msg r   /home/air/api/chatbot_router.py
<listcomp>!   s    zask_openai.<locals>.<listcomp>zgpt-4omodelmessagesr   )openaichatcompletionscreatechoicesmessager   strip)r   valid_messagesresponseanswerr   r   r   
ask_openai    s   r'   c                    s   t jjjdd| d}d| dt  d}t|d}| D ]}|| q W d    n1 s2w   Y  | dt  d}t	|t
| t| dt
 d	| S )
Nztts-1nova)r   voiceinputz
tmp/audio--z.mp3wbzhttps://z.s3.amazonaws.com/)clientaudiospeechr    timeopen
iter_byteswrite	s3_clientupload_filebucket_nameosremove)textuser_idr%   
audio_filefchunks3_keyr   r   r   synthesize_speech*   s    
r?   c              
   C   s   d}z-t | d}t|}|jD ]
}|| d 7 }qW d    W |S 1 s(w   Y  W |S  tyI } ztd|  W Y d }~|S d }~ww )N rb
zError reading PDF: )r1   PyPDF2	PdfReaderpagesextract_text	Exceptionprint)	file_pathr9   filereaderpageer   r   r   load_pdf_data;   s    

rN   c           	      C   s   g }t | }|jD ]D}t j||td}d|jv rNd|jv rN| D ]+\}}t |d r3|d  nd }t |d rB|d  nd }|rM|	||f q"q
|S )N)
sheet_namedtypequestionr&   )
pd	ExcelFilesheet_names
read_excelstrcolumnsiterrowsnotnar#   append)	rI   dataxlsrO   df_rowrQ   r&   r   r   r   load_excel_dataJ   s   

r`   c                  C   s,   t d tt} tt}t d | |fS )NzLoading initial data...zInitial Data Load Completed)logginginforN   PDF_FILEr`   
EXCEL_FILE)pdf_textqa_datar   r   r   initialize_data\   s
   

rg     c                    sf   | d t | g  }||j  d dd  } fdd| dd  D }d|d | S )NrB   r      c                    s   g | ]} | qS r   r   )r   i	sentencesr   r   r   o   s    z&find_relevant_text.<locals>.<listcomp>i)splitr   fit_transformTtoarrayargsortjoin)rQ   re   
max_length
vectorizersimilaritiestop_sentencesr   rk   r   find_relevant_texti   s
   
rw   c                    sH   t jjjdddddd| ddddd| dgd}|jd	 jjS )
Nzgpt-3.5-turbosystemux   与えられた質問を見て、referenceの内容を活用して一つの文章で回答を作成してください。)roler   zreference:
u<   回答に何を参照したかは言わないでほしい。userr   r   )r   r   r   r    r!   r"   r   )rQ   reference_textr%   r   r   r   generate_gpt_answeru   s   
r|   z/healthc                      s
   ddiS )Nstatushealthyr   r   r   r   r   health_check   s   r   z/api/speechspeech_textc                    s6   | j }| j}|stdddt||I d H }d|iS )N  zText is requiredstatus_codedetailr;   )r9   
chat_tokenr   r?   )r   r9   r   r;   r   r   r   r/      s   r/   z/api/ask_questionuser_questionc                    sl   | j    stddd fddtD }|r%|d d ur%d|d iS t t}t |I d H }d|iS )Nr   zQuestion is requiredr   c                    s   g | ]
\}} |v r|qS r   r   )r   rQ   r&   question_textr   r   r      s    z ask_question.<locals>.<listcomp>r   r&   )rQ   r#   r   rf   rw   re   r|   )r   matched_answersrelevant_textgenerated_answerr   r   r   ask_question   s   

r   )rh   )5fastapir   r   r   r   fastapi.responsesr   r   r   reboto3r7   r0   	db_moduleschemasr   r	   r
   r   r   r   configr   r   httpxjsonpandasrR   rC   sklearn.feature_extraction.textr   ra   routerr   r-   r4   r6   rc   rd   r'   r?   rN   r`   rg   re   rf   rw   r|   r   r   postr/   r   r   r   r   r   <module>   sL     



	


