o
    \h                     @   s  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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mZ d dlZd dlZd dlmZ d dlZd d	l m!Z! d d
l"m#Z# d dl$m%Z%m&Z& d dlZd dl'Z'd dl(m(Z( d dl)Z)d dl*m+Z+ e)j,dde+dddZ-e-.dZ/e-.dZ0e Z1ee_2eedZ3e
3dZ4dZ5dd Z6dd Z7dd Z8dd Z9d d! Z:e1;d"d#d$ Z<e1=d%d&efd'd(Z>e1=d)d*efd+d,Z?dS )-    )	APIRouterHTTPExceptionRequestDepends)RedirectResponseN)OpenAI)ChatMessage
SpeechTextQuizMessageLineUserMedicineTextUserQuestion)loggeropenai_api_key)TfidfVectorizer)BeautifulSoup)	webdriver)Options)urljoinurlparse)datetime)Settings	localhostiA  rest)chroma_api_impl)hostportsettingssanwa_profileexcel_honbun)api_keys3z$shanri-ai-chatbot-for-text-to-speechc                    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/sanwanet/backup_V2/chatbot_router4.py
<listcomp>/   s    zask_openai.<locals>.<listcomp>gpt-4omodelmessagesr   )openaichatcompletionscreatechoicesmessager"   strip)r,   valid_messagesresponseanswerr&   r&   r'   
ask_openai.   s   r7   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speechr0   timeopen
iter_byteswrite	s3_clientupload_filebucket_nameosremove)textuser_idr5   
audio_filefchunks3_keyr&   r&   r'   synthesize_speech8   s    
rO   c                    H   t jjd| d}|jd j}tj|gdd}|d d }d|}|S Nztext-embedding-3-small)r+   r:   r      )query_embeddings	n_results	documentsz

)r=   
embeddingsr0   data	embeddingcollection_profilequeryjoin)questionr5   query_embeddingresultsretrieved_docsprofile_contextr&   r&   r'   search_profile_contextI      
ra   c                    rP   rQ   )r=   rV   r0   rW   rX   collection_excelrZ   r[   )r\   r5   r]   r^   r_   excel_contextr&   r&   r'   search_excel_contextZ   rb   re   c                    sD  |  ds
d|  } tt d t| I dH }td|  tt d tt d t| I dH }td|  tt d d	d
dd	ddd	ddd	ddd	ddd	ddg}|rg|d	d| d |rt|d	d| d |d| d tt d tjj	j
d|d}tt d |jd jj}td|  |S )uw   GPT-4o를 사용해 벡터DB의 웹사이트 데이터, 회사제공 엑셀 데이터 정보를 포함한 답변 생성u	   御社のu   크롤링시작Nzprofile_data : u   크롤링끝u   Excel 검색 시작zexcel_data : u   Excel 검색 끝systemux   あなたは「三和電業グループ」の会社紹介および就職希望者向けのチャットボットです。)roler"   uK   以下のルールに従って、ユーザーと会話してください。u   1.会話スタイル：SNS上のやり取りのように、親しみやすく、1回の返信は300文字以内に収めてください。u   2.トーン：丁寧で共感的な言葉遣いを心がけ、ユーザーとの会話を楽しむように、適度に質問を返してください。u   3.情報の制限：返答に使用できるのは、提供されたURLとExcelファイルに含まれる情報のみとします。その他の情報は使用しないでください。u]   この制約のもと、ユーザーに寄り添いながら会話を進めてください。u   企業サイト情報
u0   Excelファイルに記載されている情報
useru   대답생성 시작r)   r*   u   대답생성 종료r   u	   대답 : )
startswithprintr   nowra   re   appendr=   r.   r/   r0   r1   r2   r"   )r\   profile_data
excel_datar,   r5   r6   r&   r&   r'   generate_gpt_answerk   s@   

ro   z/healthc                      s
   ddiS )Nstatushealthyr&   r&   r&   r&   r'   health_check   s   rr   z/sanwa/gpt-v2-backup/speechspeech_textc                    s6   | j }| j}|stdddt||I d H }d|iS )N  u   Text is required。status_codedetailrK   )rI   
chat_tokenr   rO   )rs   rI   rx   rK   r&   r&   r'   r?      s   r?   z!/sanwa/gpt-v2-backup/ask_questionuser_questionc                    s>   | j  }|stdddtt  t|I d H }d|iS )Nrt   zQuestion is requiredru   r6   )r\   r3   r   rj   chroma_clientlist_collectionsro   )ry   question_textgenerated_answerr&   r&   r'   ask_question   s   
r~   )@fastapir   r   r   r   fastapi.responsesr   r-   r   reboto3rG   r@   schemasr   r	   r
   r   r   r   configr   r   jsonsklearn.feature_extraction.textr   loggingrequestsbs4r   numpynpseleniumr   !selenium.webdriver.chrome.optionsr   urllib.parser   r   astr   chromadbchromadb.configr   
HttpClientrz   get_collectionrY   rc   routerr    r=   rD   rF   r7   rO   ra   re   ro   r#   rr   postr?   r~   r&   r&   r&   r'   <module>   s^     




1

