fd\ddlmZddlmZmZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZmZmZddlmZddlmZddlm Z ddl!m"Z"m#Z#m$Z$m%Z%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-m.Z.ddl/m0Z0m1Z1ddl2Z2ddl3m4Z4ddl5m6Z6m7Z7ddl8m9Z9ddl:m;Z;mm?Z?ddl@mAZAddlBZBGdd e0ZCGd!d"e0ZDGd#d$e;ZEdS)%)load_summarize_chain)PromptTemplateLLMChain) ChatOpenAI)r)TokenTextSplitter)OpenAIEmbeddings)FAISS) RetrievalQA) load_tools)initialize_agent) AgentType)Document)BaseToolStructuredToolTooltool)StdOutCallbackHandler)StreamingStdOutCallbackHandler)BaseCallbackManager)AnyDictListOptionalUnion)BaseCallbackHandler) print_text) AgentAction AgentFinish LLMResult) BaseModelFieldN) BeautifulSoup)Thread Condition)deque) BaseLLMModelCallbackToIteratorChuanhuCallbackHandler)default_chuanhu_assistant_model)SUMMARIZE_PROMPTc2eZdZUedZeed<dS)WebBrowsingInputURL of a webpage descriptionurlN)__name__ __module__ __qualname__r!r2str__annotations__D/Users/treediagram/dev/ChuanhuChatGPT/modules/models/ChuanhuAgent.pyr.r.$s0u!3444C44444r9r.cTeZdZUedZeed<edZeed<dS)WebAskingInputr/r0r2zMQuestion that you want to know the answer to, based on the webpage's content.questionN)r3r4r5r!r2r6r7r=r8r9r:r<r<'sNu!3444C444E&uvvvHcvvvvvr9r<cFeZdZd d fd ZdZdZdZdZd Zd Z xZ S) ChuanhuAgent_ClientreturnNct||tdd|_||_t |dt |_t |dd|_ttdg }t|jd d || |_ d |j vrtgd|j|_ntgd|j|_|jt#j|jddt(|jt+j|jddt.dS)N) model_nameuseri) chunk_size chunk_overlapr)openai_api_key temperaturerCz gpt-3.5-turbotext)templateinput_variables map_reduceT) chain_typereturn_intermediate_steps map_promptcombine_promptPro)zgoogle-search-results-jsonllm-matharxiv wikipediaz wolfram-alpha)llm)z ddg-searchrSrTrUzSummary Webpagez>useful when you need to know the overall content of a webpage.)funcnamer1 args_schemaz Ask Webpagez?useful when you need to ask detailed questions about a webpage.)super__init__r text_splitterapi_keyrr+rV cheap_llmrr,rsummarize_chainrCr toolsappendr from_function summary_urlr.rask_urlr<)selfrCrH user_namePROMPT __class__s r:r[zChuanhuAgent_Client.__init__-s JY???.#RPPP% ^Wvwww#>q]lmmm)9F8TTT3DN|w{IO`f g g g DO # ##$u$u$u{|DEEEDJJ#$T$T$TZ^ZbcccDJ   %&\,          (\"]*         r9ct|}|j|g}|d|iddS)N page_contentinput_documentsT)return_only_outputs output_text)rr\split_documentsr_)rerJtextss r:summaryzChuanhuAgent_Client.summaryLsPd+++"22E7;;##%6$>TX#YYZghhr9ctj|}t|jd}dd|dD}t jd||S)Nz html.parserr@c3>K|]}|VdS)N)getText).0ss r: z8ChuanhuAgent_Client.fetch_url_content..Vs*??qqyy{{??????r9pzExtracted text from )requestsgetr"rJjoinfind_alllogginginfo)rer2responsesouprJs r:fetch_url_contentz%ChuanhuAgent_Client.fetch_url_contentQsn<$$X]M::ww??DMM#,>,>????? 1C11222 r9cd||}||}d|z}|S)Nzwebpage content summary: )rrq)rer2rJ text_summary url_contents r:rczChuanhuAgent_Client.summary_urlZs6%%c**||D)) 2\A r9cf||}t|}|j|g}t |j}t j||}|}tj |j d|}| |dS)Nrj)rHstuff)rVrN retrieveru Reply in 中文) rrr\rorr]r from_documents as_retrieverr from_chain_typer^run) rer2r=rJrp embeddingsdbrqas r:rdzChuanhuAgent_Client.ask_urlas%%c**d+++"22E7;;%T\BBB  !% 4 4OO%%  (T^[d e e evv333444r9c|jdd}t|j|jtjd}||d}|dfS)NcontentT)agentverbose Reply in 简体中文input)historyr r`rVr +STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTIONr)rer=rreplys r:get_answer_at_oncez&ChuanhuAgent_Client.get_answer_at_oncensd<#I. TXY=r}ABBB 8 C C C DDbyr9c#Kjddtttjgfd}t |}|d}D] }||z }|V dS)Nrr)handlersctjjtjd}|d}|dS)NT)rrcallback_managerrr)r r`rVr rrcallbackfinish)rritmanagerr=res r: thread_funcz?ChuanhuAgent_Client.get_answer_stream_iter..thread_funcyst$TZAvAEX_```EIIx$G$G$GIHHE KK    IIKKKKKr9)targetr@)rr(rr)rr#start)rert partial_textvaluerrr=s` @@@r:get_answer_stream_iterz*ChuanhuAgent_Client.get_answer_stream_iterus<#I.  ! !%0Fr{0S0S/TUUU         + & & &     E E !L      r9)r@)rAN) r3r4r5r[rqrrcrdrr __classcell__)rhs@r:r?r?,s       >iii  5 5 5r9r?)Flangchain.chains.summarizer langchainrrlangchain.chat_modelsrlangchain.promptslangchain.text_splitterrlangchain.embeddingsrlangchain.vectorstoresr langchain.chainsr langchain.agentsr r r langchain.docstore.documentrlangchain.toolsrrrrlangchain.callbacks.stdoutr$langchain.callbacks.streaming_stdoutrlangchain.callbacks.managerrtypingrrrrrlangchain.callbacks.baserlangchain.inputrlangchain.schemarrrpydanticr r!rybs4r" threadingr#r$ collectionsr% base_modelr'r(r)configr+presetsr,r}r.r<r?r8r9r:rs;;;;;;........,,,,,,,,,,,,555555111111((((((((((((''''''------&&&&&&000000@@@@@@@@@@@@<<<<<<OOOOOO;;;;;;33333333333333888888&&&&&&@@@@@@@@@@%%%%%%%%''''''''PPPPPPPPPP444444&&&&&&55555y555wwwwwYwww WWWWW,WWWWWr9