o
    hU)                     @   s  d dl mZmZmZm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 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(m)Z) e Z*dZ+e'j,e+dZ-e-dZ.dZ/dd Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd  Z7e*8d!d"d# Z9e*:d$d%efd&d'Z;e*:d(d)efd*d+Z<dS ),    )	APIRouterHTTPExceptionRequestDepends)RedirectResponseN)ChatMessage
SpeechTextQuizMessageLineUserMedicineTextUserQuestion)logger)TfidfVectorizer)BeautifulSoup)	webdriver)Options)urljoinurlparse)genai)typesz'AIzaSyB0gBfm2dXJaxUoX-T40SDomM7f4vQkQQU)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/V2/geminibackup/gemini_routerV2.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    
rC   c                  C   s0   t  } | d | d | d tj| dS )Nz
--headlessz--disable-gpuz--no-sandboxoptions)r   add_argumentr   ChromerD   r   r   r   init_driverL   s
   


rH   c                 C   s   t | jt |jkS )N)r   netloc)base_urltest_urlr   r   r   is_same_domainS   s   rL   c           	         s   t  }d}z_| D ]U}z7td|  || td t|jd}|jdd}d}|D ]}|| 7 }q-|d| d| d	7 }W q	 t	y^ } ztd
| d|  W Y d}~q	d}~ww |W |
  S |
  w )uV   url_list에 있는 각 페이지의 sections_group HTML만 크롤링 (내부 링크 X) u   
🟢 크롤링 중:    zhtml.parsersections_group)class_z<!-- z -->


u	   [에러] z: N)rH   printr   r4   sleepr   page_sourcefind_allprettify	Exceptionquitall_text)	url_listdriverall_htmlurlsoupsections	page_htmlsectioner   r   r   fetch_all_pages_with_seleniumV   s*   

 rc   c                 C   s.   d|  d}t jjd|tjdgdd}|jS )Nu  
    以下の内容を丁寧に修正してください。

    - 企業名の代わりに「弊社」という表現を使ってください。
    - 本社のスタッフがお客様に話しかける感じにしてください。
    - 「ホームページに記載されている」といった表現は削除してください。
    - 数値がある場合は、マークダウン形式の表で表示してください。
    - 冒頭の挨拶文（例：「お客様各位」「いつもご利用ありがとうございます」「お問い合わせありがとうございます」など）は省略してください。

    以下が修正対象の文章です：
    z
    gemini-1.5-proTEXTresponse_modalitiesr   contentsconfig)r1   modelsgenerate_contentr   GenerateContentConfigr=   )
raw_answerpromptr)   r   r   r   refine_answer_with_gemini   s   
rp   c                    s0   d|  }t jjd|tjdgdd}|j S )u!   homepage_urlを選択する関数ul  
    以下の情報を元に、質問に対して最も適切なURLを一つ以上配列の形で選んでください。

    - 出力形式は配列のみを返すこと。例: ['https://segue-g.jp/company/boardmember/index.html','https://segue-g.jp/ir/results/settle.html']
    - 回答や説明文は不要です。配列形式のみ出力してください。

    【URLリスト】
    - 企業理念 : https://segue-g.jp/company/sdgs/index.html
    - IR 情報 : https://segue-g.jp/ir/index.html
    - 財務、業績報告 : https://segue-g.jp/ir/results/settle.html
    - 株式情報 : https://segue-g.jp/ir/stock/index.html
    - 当社の強み : https://segue-g.jp/ir/investor/strong_point/index.html
    - 成長戦略 : https://segue-g.jp/ir/investor/strategy/index.html
    - 会社概要 : https://segue-g.jp/company/basic/index.html
    - 企業理念 : https://segue-g.jp/company/brand/index.html
    - 沿革 : https://segue-g.jp/company/history/index.html
    - 役員一覧 : https://segue-g.jp/company/boardmember/index.html
    - 事業紹介 : https://segue-g.jp/business/index.html

    【質問】
    rd   re   rf   rh   )r1   rk   rl   r   rm   r=   r'   )questionro   r)   r   r   r   choose_homepage_url   s   
rr   c           
         s  |  ds
d|  } t| I d H }t|}t|I d H }td|  tdt|  d|  }tjj	d|gt
jt
jt
 dgdgdd	}td
|j  dg}|rZ|d|  |re|d|j  |d|   d|}tjj	d|t
jdgdd	}t|j}	|	S )Nu	   御社のu$   segue-g 사이트 크롤링 결과: zurl_list : u#   株式会社 セグエグループ rd   )google_search_retrievalre   )toolsrg   rh   u   웹 검색결과: un  ※ 回答には情報源のリンクや「ホームページに記載されている」などの表現を含めないでください。※ 回答は丁寧である必要はありますが、挨拶文（例：「お客様各位」「お問い合わせありがとうございます」など）は含めず、要点から始めてください。※ 回答を生成するときに、企業公式サイトの情報とウェブ検索の情報が同じ情報を持っている場合は、それを参照してください。※ 情報の内容が異なる場合は、企業公式サイトの情報を優先してください。u"   [企業公式サイトの情報]:
u   [ウェブ検索の情報]:
u
   [質問]:
rQ   rf   )
startswithrr   astliteral_evalrc   rR   strr1   rk   rl   r   rm   ToolGoogleSearchRetrievalr=   appendjoinrp   )
rq   url_list_strrZ   website_datawebsearch_inputwebsearch_dataprompt_partsfull_promptr)   refined_answerr   r   r   generate_gemini_answer   sF   

	

r   z/healthc                      s
   ddiS )Nstatushealthyr   r   r   r   r   health_check   s   r   z/apigeV2_2/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?   )r=   
chat_tokenr   rC   )r   r=   r   r?   r   r   r   r3     s   r3   z/apigeV2_2/ask_questionuser_questionc                    s2   | j  }|stdddt|I d H }d|iS )Nr   zQuestion is requiredr   r*   )rq   r'   r   r   )r   question_textgenerated_answerr   r   r   gemini_question  s   
r   )=fastapir   r   r   r   fastapi.responsesr   r!   boto3r;   r4   schemasr   r   r	   r
   r   r   rj   r   pandaspdsklearn.feature_extraction.textr   loggingrequestsbs4r   numpynpseleniumr   !selenium.webdriver.chrome.optionsr   urllib.parser   r   rv   googler   google.genair   routerAPI_KEYClientr1   r8   r:   r+   rC   rH   rL   rc   rp   rr   r   r   r   postr3   r   r   r   r   r   <module>   sP     

!,#A

