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 Z0ee_1eedZ2e
2dZ3dZ4dd Z5dd Z6dd Z7dd Z8e09dd d! Z:e0;d"d#efd$d%Z<e0;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segue_profile_split3)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%   0/home/air/segue/gemini/backup/gemini_routerV2.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   r6   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_idr4   
audio_filefchunks3_keyr%   r%   r&   synthesize_speech8   s    
rN   c                    sH   t jjd| d}|jd j}tj|gdd}|d d }d|}|S )Nztext-embedding-3-small)r*   r9   r      )query_embeddings	n_results	documentsz

)r<   
embeddingsr/   data	embeddingcollection_profilequeryjoin)questionr4   query_embeddingresultsretrieved_docsprofile_contextr%   r%   r&   search_profile_contextI   s   
r^   c              	      s   |  ds
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dddg}|rP|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   크롤링끝systemuu   あなたは「セグエグループ」の会社紹介および就職希望者向けのチャットボットです。)roler!   uK   以下のルールに従って、ユーザーと会話してください。u   1.会話スタイル：SNS上のやり取りのように、親しみやすく、1回の返信は300文字以内に収めてください。u   2.トーン：丁寧で共感的な言葉遣いを心がけ、ユーザーとの会話を楽しむように、適度に質問を返してください。u   3.情報の制限：返答に使用できるのは、提供されたURLとExcelファイルに含まれる情報のみとします。その他の情報は使用しないでください。uq   4.数値データ形式：数値がある場合は、マークダウン形式の表で表示してください。u]   この制約のもと、ユーザーに寄り添いながら会話を進めてください。u   企業サイト情報
useru   대답생성 시작r(   r)   u   대답생성 종료r   u	   대답 : )
startswithprintr   nowr^   appendr<   r-   r.   r/   r0   r1   r!   )rY   profile_datar+   r4   r5   r%   r%   r&   generate_gpt_answerk   s6   
rg   z/healthc                      s
   ddiS )Nstatushealthyr%   r%   r%   r%   r&   health_check   s   rj   z/apige2/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detailrJ   )rH   
chat_tokenr   rN   )rk   rH   rp   rJ   r%   r%   r&   r>      s   r>   z/apige2/ask_questionuser_questionc                    s2   | j  }|stdddt|I d H }d|iS )Nrl   zQuestion is requiredrm   r5   )rY   r2   r   rg   )rq   question_textgenerated_answerr%   r%   r&   gemini_question   s   
rt   )>fastapir   r   r   r   fastapi.responsesr   r,   r   reboto3rF   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   
HttpClientchroma_clientget_collectionrV   routerr   r<   rC   rE   r6   rN   r^   rg   r"   rj   postr>   rt   r%   r%   r%   r&   <module>   sZ     



"1

