1VeDddlmZddlmZmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlZddlmZddlmZddlZddlZddlmZddlmZdd lmZdd lmZmZmZm Z m!Z!dd l"m#Z#dd l$m%Z%dd l&m'Z'm(Z(m)Z)ddl*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl&m1Z1m2Z2m3Z3m4Z4ddl5Tddl6Tddl7Tddl8m9Z9ddl:m;Z;GddZGddeZ?GddZ@Gdd e@ZAdS)!) annotations) TYPE_CHECKINGListN)tqdm)DDGS)islice)Enum)StreamingStdOutCallbackHandler)BaseCallbackManager)AnyDictrOptionalUnion)BaseCallbackHandler) print_text) AgentAction AgentFinish LLMResult)Thread Condition)deque) BaseChatModel) HumanMessage AIMessage SystemMessage BaseMessage)*)shared)retrieve_proxyc,eZdZdZdZdZdZdZdS)CallbackToIteratorc`t|_t|_d|_dSNF)rqueuercondfinishedselfs H/Users/treediagram/Downloads/ChuanhuChatGPT/modules/models/base_model.py__init__zCallbackToIterator.__init__,s#WW KK  c|j5|j||jddddS#1swxYwYdSN)r&r%appendnotify)r)results r*callbackzCallbackToIterator.callback1s Y   J  f % % % I                       s4A  A A c|Sr.r(s r*__iter__zCallbackToIterator.__iter__6s r,c |j5|js.|js'|j|js|j'|jst |jcdddS#1swxYwYdSr.)r&r%r'wait StopIterationpopleftr(s r*__next__zCallbackToIterator.__next__9s Y ( (j ! !    j ! !: &#oo%:%%''  ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sA#A88A<?A<c|j5d|_|jddddS#1swxYwYdSNT)r&r'r0r(s r*finishzCallbackToIterator.finishBs Y   DM I                       s !6::N)__name__ __module__ __qualname__r+r2r5r:r=r4r,r*r"r"+s_  (((r,r"ctd|tj}|d}t j|}|d}|d}|dkr d|d|dSd S) Nz ```(.*?)```action action_inputz Final Answerz+

: z

)researchSgroupjsonloads)textmatch json_text json_dict action_namerDs r*get_action_descriptionrRHst IImT24 0 0E AI 9%%IH%K^,Ln$$u[uuLuuuurr,cNeZdZddZ ddd Z dddZ dd dZd!dZd"dZdS)#ChuanhuCallbackHandlerreturnNonec||_dS)zInitialize callback handler.Nr2)r)r2s r*r+zChuanhuCallbackHandler.__init__Xs   r,NrCrcolor Optional[str]kwargsr c T|t|jdSr.)r2rRlog)r)rCrYr[s r*on_agent_actionz&ChuanhuCallbackHandler.on_agent_action\s' ,VZ8899999r,outputstrobservation_prefix llm_prefixc |tj||||tj|dSdS)z/If not the final action, print out observation.N)logginginfor2)r)r_rYrarbr[s r* on_tool_endz"ChuanhuCallbackHandler.on_tool_endasQ  ) L+ , , , f  ! L $ $ $ $ $ " !r,r=rc 8tj|jdSr.)rdrer])r)r=rYr[s r*on_agent_finishz&ChuanhuCallbackHandler.on_agent_finishus  VZ     r,tokenc 0||dS)z?Run on new LLM token. Only available when streaming is enabled.NrX)r)rir[s r*on_llm_new_tokenz'ChuanhuCallbackHandler.on_llm_new_token{s er, serializedDict[str, Any]messagesList[List[BaseMessage]]c dS)z%Run when a chat model starts running.Nr4)r)rlrnr[s r*on_chat_model_startz*ChuanhuCallbackHandler.on_chat_model_start r,rUrVr.)rCrrYrZr[r rUr )NNN) r_r`rYrZrarZrbrZr[r rUrV)r=rrYrZr[r rUrV)rir`r[r rUrV)rlrmrnror[r rUr ) r>r?r@r+r^rfrhrkrqr4r,r*rTrTVs!!!! ;?::::: $,0$( %%%%%*;?!!!!!       r,rTcneZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZeddZdS) ModelTyperrBr  model_namer`cd}|}d|vr2d|vrtj}n"d|vrtj}ntj}nd|vr tj}nd|vsd|vr tj}nd|vr tj}nd|vr tj}nd |vr tj }nd |vr tj }nd |vr tj }nd |vr tj }nvd |vr tj }ned|vr tj}nTd|vsd|vr tj}n?d|vr tj}n.d|vr tj}nd|vr tj}n tj}|S)Ngptinstructvisionchatglmllamaalpacaxmchatstablelmmossyuanaiminimaxu 川虎助理palm midjourneyazureapiu星火大模型claudeqwen)lowerruOpenAIInstruct OpenAIVisionOpenAIChatGLMLLaMAXMChatStableLMMOSSYuanAIMinimax ChuanhuAgent GooglePaLM Midjourney LangchainChatSparkClaudeQwen)clsr model_typemodel_name_lowers r*get_typezModelType.get_types %++-- $ $ $---&5 ---&3 &- * * *"*JJ ( ( (H8H,H,H"JJ ) ) )")JJ + + +"+JJ ' ' '"JJ ) ) )")JJ * * *"*JJ / / /"/JJ ' ' '"-JJ - - -"-JJ ( ( (E5E,E,E"0JJ "2 2 2"JJ ) ) )")JJ ' ' '"JJ"Jr,N)rr`)r>r?r@Unknownrrrrrrrrrrrrrrrrr classmethodrr4r,r*rurusG FG E FH D FGLJMJ EN F DL((([(((r,ruc :eZdZedddddddddf d5dZd Zd Zd Zd Zd6d Z d6dZ dZ dZ d7dZ d8dZ d9dZdZdZdZdZdZdZd:dZd Zd!Zd"Zd#Zd$Zd%Zd&Zd'Zd;d(Zd)Z d*Z!d BaseLLMModelg?rBNrrFrUrVc g|_g|_||_t||_ t |d|_n#t$rt|_YnwxYwd|_ ||_ d|_ d|_ d|_t| |_||_||_||_||_d|_||_| |_| |_| |_dS)N token_limitF)historyall_token_countsrrurrMODEL_METADATAtoken_upper_limitKeyErrorDEFAULT_TOKEN_LIMIT interrupted system_promptapi_key need_api_key single_turnget_first_history_namehistory_file_path temperaturetop_p n_choices stop_sequencemax_generation_tokenpresence_penaltyfrequency_penalty logit_biasuser_identifier) r)rrrrrstoprrrrusers r*r+zBaseLLMModel.__init__s "$#,,Z88 9%3J%? %ND " " 9 9 9%8D " " " 9 * ! !7!=!=& "!$(! 0!2$#sAA('A(c#hKtjd|\}}|VdS)zstream predict, need to be implemented conversations are stored in self.history, with the most recent question, in OpenAI format should return a generator, each time give the next word (str) in the answer z=stream predict not implemented, using at once predict insteadN)rdwarningget_answer_at_once)r)response_s r*get_answer_stream_iterz#BaseLLMModel.get_answer_stream_itersD  K M M M--// !r,ctjd|}d}|D]}|dz }|t|j|zfS)zpredict at once, need to be implemented conversations are stored in self.history, with the most recent question, in OpenAI format Should return: the answer (str) total token count (int) z=at once predict not implemented, using stream predict insteadrrB)rdrrsumr)r) response_itercountrs r*rzBaseLLMModel.get_answer_at_oncesi  K M M M3355 %  H QJEET233e;;;r,ctS)z+get billing infomation, inplement if needed)BILLING_NOT_APPLICABLE_MSGr(s r* billing_infozBaseLLMModel.billing_infos *)r,c t|S)z/get token count from input, implement if needed)len)r) user_inputs r* count_tokenzBaseLLMModel.count_token s:r,c# K fd}td |r|dfn|df||}|j|t jd||}|rd|z}d}d} |D]}t|tkr|\}} dd||zfd<|jdxx| z cc<| |V|j r| n|j t|dS) Nc fSr.r4)chatbot status_textsr*get_return_valuez:BaseLLMModel.stream_next_chatbot..get_return_valuesK' 'r,u开始实时传输回答……rFu输入token计数: z)
rBrvr)i18nr/rrrddebugrtypetuple token_messagerrecoverrconstruct_assistant) r)inputsr fake_inputdisplay_appendruser_token_count stream_iter partial_texttoken_incrementrs ` @r*stream_next_chatbotz BaseLLMModel.stream_next_chatbots ( ( ( ( ( (;<<  ) NNJ+ , , , , NNFB< ( ( (++F33 $$%5666 >,<>>???1133  \J^[N '  LL!!U**0<- o"2;q><.+HIGBK  !" % % % 8 % % %,,..K""$$ $ $ $    / ==>>>>>r,c|r||dfn||df|||}n||}|j||\}}|jt ||t ||jd<|dd||zf|d<|0|jdxxtt |z cc<n|t|jz |jd<|}||fS)NrFrvr) r/rrrrrconstruct_userrr) r)rrrrrai_replytotal_token_countrs r*next_chatbot_at_oncez!BaseLLMModel.next_chatbot_at_once/sk  ) NNJ+ , , , , NNFB< ( ( (  !#// ;;  #//77  $$%5666&*&=&=&?&?## /99:::  !-j99DL r{1~x.'@A  !  !" % % %#H--*/*/ / % % % %):D)**)+D !" %((**  ##r,ctj}|r%t|j|}t d}tj||fS)z?if the model accepts multi modal input, implement this functionfile_srcu索引构建完成)grMarkdownupdateconstruct_indexrrFiles)r)filesrlanguagestatusindexs r*handle_file_uploadzBaseLLMModel.handle_file_uploadGsX##%%  0#DL5AAAE.//Fx  '611r,ctj}|rLt|j|}t d}t jt d|jtj d<ddl m }ddl m }ddlm}dd lm} d |zd z} || d g } |} || dd| | } | dt%|jjdidd}t-t dd|z|t dt1t3|zdz|g||fS)Nru 总结完成u生成内容总结中……OPENAI_API_KEYr)load_summarize_chain)PromptTemplate) ChatOpenAI)StdOutCallbackHandlerzFWrite a concise summary of the following: {text} CONCISE SUMMARY IN :rM)templateinput_variables map_reduceT) chain_typereturn_intermediate_steps map_promptcombine_promptinput_documents_dict)return_only_outputs output_textu总结rEu 上传了u 个文件)rrrrrrrdreosenvironlangchain.chains.summarizerlangchain.promptsrlangchain.chat_modelsrlangchain.callbacksr listdocstore__dict__valuesprintr/r`r)r)rrrrrrrrr prompt_templatePROMPTllmchainsummarys r*summarize_indexzBaseLLMModel.summarize_indexOs##%%  U#DL5AAAE.))F L;<< = = =+/>>1 2 2 2 NND--c#e**oo=kI7S T T Tr,Tc g}d}t|tkr|dd} n|} |rddlm} ddlm} d}d} t j| t|j ||} | Jd d } t j| t5| | d d d i} | | }n7#t$r*| | ||||dcYcdddSwxYw dddn #1swxYwYd|D}t|}t|}dd|z}t|tkrnt#t$d| dd|d||dd<nt#t$d|dd|d|}n/|r*g}t)5}|| d}t-|dD]}|| dddn #1swxYwYg}t1|D]\}}t jd|dzd|t4j|dj}||d|dg|d|dd|dzd |d!d"t|}d#d|zd$z}t|tkrmt#t<d%| d&d|d||dd<nft#t<d%| d&d|d|}nd}|| |||fS)'NFrrM)HuggingFaceEmbeddings)VectorStoreRetrieverTu加载索引中……)rload_from_cache_if_possibleu获取索引失败u*索引获取成功,生成回答中…… similaritykrz) vectorstore search_type search_kwargs)r*cg|]F}|jdtj|jdgGS)u�source) page_contentstriprpathbasenamemetadata).0ds r* z/BaseLLMModel.prepare_inputs..sc!D!D!D+,#$."6"6u"="=rw?O?O 8$@&@&"'!D!D!Dr,z rFz {query_str}z {context_str}z{reply_language}lite)backendr~u 搜索结果rBu:hrefbodyz z. titlezz

z{query}z {web_results})rr langchain.embeddings.huggingfacer(langchain.vectorstores.baser)rdrerrr get_relevant_documentsAssertionErrorprepare_inputsadd_source_numbers add_detailsjoin replace_todayPROMPT_TEMPLATEreplacerrMrr/ enumeraterurllib3util parse_urlhostWEBSEARCH_PTOMPT_TEMPLATE)r) real_inputs use_websearchrreply_languagerr*rlimited_context fake_inputsr(r)msgr retrieverrelevant_documentsreference_resultssearch_resultsddgsddgs_genridxr1 domain_names r*rDzBaseLLMModel.prepare_inputsfs    $ $%a.0KK%K H N N N N N N H H H H H H"O)C L   #DL5^yzzzE$$&:$$$>C L   !! N N00UP\mprsltuuu N)2)I)I#*%*%&&%NNN..{M5R`biHM.NNNN N N N N N N N NN'  N N N N N N N N N N N N N N N!D!D0B!D!D!D  23D E E ():;;N#bggn&=&==NK  D((!/22W]K88W_fkk:K.L.LMMW/@@ Av&&"/22W]K88W_fkk:K.L.LMMW/@@  " N -499[&9AA"----A"))!,,,,- - - - - - - - - - - - - - - -!# (88   V AS1WAAAABBB%l44VF^DDI !((&.&.)IJJJ%%iiic!eiiTZ[bTciii!33D E E 7''(*23NK  D((!";<<WY 44W_fkk:K.L.LMMW/@@ Av&&"";<<WY 44W_fkk:K.L.LMMW/@@   N ^['QQsID.CD%C8)D7C88DD D AJ  J$'J$F中文c# Kd}t|tkr{tjd|jzdzt jjzdztt|dz zdz|ddzt j j znHtjd|jzdzt jjz|zt j j z|r=t|tkr||ddd fgz|fVn ||d fgz|fV|d krd }| ||||| \} } } }}|| d fgz|fV|j r|jtjjst$t&z}tj||| d ft|jdkr\|jt-| |jd |jdnt-| |jd <|| d fgz|fVdSt| dkr1t$t2z}tj||| d fgz|fVdS|jrg|_g|_t|tkr|j|n'|jt-| |r@KLQWXYQZ[aQbNdegogug@ Ld2447HH "#(.[13;>3KL    $ <F||t##6!9V#4b"9!::KGGGGG&". ;;;; @ @ @GNHLH[H[m5YgqxI\IzIzEnfg+r*++[8888    L L. !-}#> R k2.//< < < < F ""$$ % % * *,|;K L % % %k2.//< < < < F   'DL$&D ! <<4   L   ' ' ' ' L  v 6 6 7 7 7 ' + 2333//*#1 0 -1//(G[!;...../ 5666'+'@'@*#1 (A(($ {**** ' ' '   ! ! !,/?A/G/GGK;& & & & & & & & & ' t|  q T\"%5i%@K%O%O L-$%\"%i023.*+     'DL$&D !*\9 t$ % % 1 16N 1ED)**(+>>??-..22 )!,L!$ D)**(+>>??-..22 L % % %aPUaaaK;& & & & ws A4N O =O  Oc#Ktjdt|jdkrO|jdd}|jdd=t|jdkr|jnt|dkrI|dd}d|vr6|dd}|dd}nDt|jdkr|jdd}|jd=n|td fVdS||||||| }|D]}|Vtjd dS) Nu重试中……rBrrcrrvz
r?u上下文是空的)rurRrrSu 重试完毕) rdrrrrpopsplitrkrz) r)rrurRrrSrrwxs r*retryzBaseLLMModel.retry1s  '((( t|  q \"%i0F RSS!4())A--%))+++ \\A  R[^F+v55&BCCAFh//2   ! # #\"%i0F R  0DDDD D D D F||  ')     AGGGG n%%%%%r,cd|_dSr<rr(s r* interruptzBaseLLMModel.interrupthsr,cd|_dSr$rr(s r*rzBaseLLMModel.recoverks r,c8||_td|dS)Nutoken上限设置为)rr )r)new_upper_limits r*set_token_upper_limitz"BaseLLMModel.set_token_upper_limitns'!0 6_6677777r,c||_dSr.)r)r)new_temperatures r*set_temperaturezBaseLLMModel.set_temperaturer*r,c||_dSr.)r)r) new_top_ps r* set_top_pzBaseLLMModel.set_top_pus  r,c||_dSr.)r)r) new_n_choicess r* set_n_choiceszBaseLLMModel.set_n_choicesxs &r,new_stop_sequencer`c>|d}||_dS)N,)r}r)r)rs r*set_stop_sequencezBaseLLMModel.set_stop_sequence{s$-33C88.r,c||_dSr.)r)r)new_max_tokenss r*set_max_tokenszBaseLLMModel.set_max_tokenss$2!!!r,c||_dSr.)r)r)new_presence_penaltys r*set_presence_penaltyz!BaseLLMModel.set_presence_penaltys 4r,c||_dSr.)r)r)new_frequency_penaltys r*set_frequency_penaltyz"BaseLLMModel.set_frequency_penaltys!6r,c|}i}td}|D]F}|d\}}|r*||D]}t |||<G||_dS)N cl100k_baser )r}tiktoken get_encodingencodefloatr)r)rbias_mapencodinglineword bias_amountris r*set_logit_biaszBaseLLMModel.set_logit_biass%%'' ((77 9 9D $ 3 D+ 9%__T2299E&+K&8&8HUOO"r,c||_dSr.)r)r)new_user_identifiers r*set_user_identifierz BaseLLMModel.set_user_identifiers2r,c||_dSr.)r)r)new_system_prompts r*set_system_promptzBaseLLMModel.set_system_prompts.r,c"d|vrZ||_tdt|jz}t j||j|fSt t fS)NruAPI密钥更改为了)r3rrhide_middle_charsrdrerr)r)new_access_keyrVs r*set_keyzBaseLLMModel.set_keysv n $ $)//11DL.//2CDL2Q2QQC L   <$ $99;; + +r,c||_dSr.)r)r)new_single_turns r*set_single_turnzBaseLLMModel.set_single_turnrr,c4g|_g|_d|_t|j|_|jdd}|gt |jz}|r|jnd}g|dgtj |||fS)NFrFr)choicesvalue) rrrnew_auto_history_filenamerrget_history_namesrrrRadior)r)remain_system_prompt history_namerrs r*resetzBaseLLMModel.resets " !:4;O!P!P-crc2 .#4T5I#J#JJ.BJ** 4%%qc**BHOOGS_O,`,`booor,c\|jr|jdd=|jd=|S)Nrr)rrrr(s r*delete_first_conversationz&BaseLLMModel.delete_first_conversations7 < ) RaR %a(!!###r,ct|dkr*t|ddvrd}|dd}||jfSt|jdkr|jdd|_t|dkr d}|dd}t|jdkrd}|jd}||||fS) NrrvrBu1由于包含报错信息,只删除chatbot记录ru删除了一组chatbot对话u)删除了一组对话的token计数记录u删除了一组对话)rrkrrr|rt)r)rrVs r*delete_last_conversationz%BaseLLMModel.delete_last_conversations w<>(;;dCd>e>eekth}h}h}}}r,cz|dkrtS|ds|dz }||j|d}t jt||}t j |rOt jt||d|}|dz }t j |Ot j |}||_t||j |j ||t|S)NrF.jsonrrrB)rrendswithdelete_chat_historyrrr4rG HISTORY_DIRexistsr5 save_filerrinit_history_list)r)filenamer user_namerepeat_file_index full_paths r*rename_chat_historyz BaseLLMModel.rename_chat_historys r>>99;;   ))  H   !7CCCGLLiBB gnnY'' # [)@Q=^=^T\=^=^__I  " gnnY'' #7##I..!)(D. gyQQQ +++r,c<t|jdkrl|sj|jdd}t|tkr|dd}t |dddz}||||St S)NrrrcrMrr)rrrrreplace_special_symbolsrrr)r)name_chat_method user_questionrrsingle_turn_checkboxrs r*auto_name_chat_historyz#BaseLLMModel.auto_name_chat_historys t|   ! !*> ! LOI6MM""d** -a 0 8 .}==crcBWLH++HgyII I99;; r,cTt|j|j|j||jdSr.)rrrrr)r)rs r*rtzBaseLLMModel.auto_saves4$($*<,)= ? ? ? ? ?r,c|dkrdS|ds|dz }t||j|j||dS)NrF.md)rrrr)r)rrrs r*export_markdownzBaseLLMModel.export_markdownsQ r>> F  ''   H(D. gyQQQQQr,c tj|jd|t|tkr|j}t j|tj t|jtj |tj ||_ n||_ |j tj |j kr1tj t|j|j }n|j }|j ds|dz }t|dd5}t!j|}dddn #1swxYwY t|ddtkrtjdg}t'|dD]S\}}|d zdkr#|t+|1|t-|T||d<tj|n#YnxYwt/|d t/|dd zkrXtjd |dt/|d  d|d<tjd |dtj|jd |d|_tj |j |d|d fS#tjd|j |j dgfcYSxYw)Nu 加载对话历史中……rr]zutf-8)rrru0历史记录格式为旧版,正在转换……rrzTrimming corrupted history...zTrimmed history: u 加载对话历史完毕systemu没有找到对话历史记录 rF)rdrrrr`nameshutilcopyfilerr4rGrr5rropenrKloadrerKr/rrrr) r)new_history_file_pathusernamerfjson_s new_historyritems r*load_chat_historyzBaseLLMModel.load_chat_historys -KKKLLL ,)**c11(=(B% 5rw||!5rw7G7GH]7^7^8`8`aaa)+)9)9:O)P)P&&)>&! 2%)9)9$:P)Q)QQQ$&GLL!5t7M%O%O!!%)$:!)227;; -!W,!'w??? &11 & & & & & & & & & & & & & & & y)!,--44L!STTT"$K'0 1B'C'CJJ t 19>>'..~d/C/CDDDD'../B4/H/HIIII(3F9%L--- 6)$%%F9,=(>(>(AAA <===$*9$5s6);L7M7M6M6N6N$Oy! D 1BDDEEE MT1LLL M M M!),DL7##D$:;;VH=MvV_O`` ` 2 LS4;QSS T T T)2r1 1 1 1sKBL0E=1 L0=FL0FL0 B>;<$&&&&D " "&.D "+/+A+A+C+C(-CRC=//r,c4tS)z4like the last response, implement if needed rrr(s r*likezBaseLLMModel.likeByy{{r,c4tS)z7dislike the last response, implement if needed rr(s r*dislikezBaseLLMModel.dislikeGrr,rs)NrF)T)FFNr`T)FFNr`)rr`)Fr.)NN),r>r?r@INITIAL_SYSTEM_PROMPTr+rrrrrrrr&rDrzrrrrrrrrrrrrrrrrrrrrrrrtrrrrrrr4r,r*rrs, ! %$%$%$%$%$N < < <***  ????@$$$$0222.PRPRPRPRl!%w w w w x $&$&$&$&n   !!!888+++'''////333555777 # # #333///,,,+++pppp$$$ "~~~~,,,$???RRR,2,2,2,2\mmm( 0 0 0 r,rc8eZdZdfd ZdZdZdZdZxZS)Base_Chat_Langchain_ClientrFct||d|_||_dS)N)rF)superr+r setup_modelmodel)r)rr __class__s r*r+z#Base_Chat_Langchain_Client.__init__Ns? )444!%%'' r,cdSr.r4r(s r*rz&Base_Chat_Langchain_Client.setup_modelSrrr,ct|jg}|jD]m}|ddkr*|t |d8|ddkr)|t |dn|S)N)rcrolerrc assistant)rrrr/rr)r)rrs r*_get_langchain_style_historyz7Base_Chat_Langchain_Client._get_langchain_style_historyWs );<<<= @ @AyF""|AiLAAABBBB6k))y9>>>???r,ct|jts Jd|}|j|}|jt |jfS)N0model is not instance of LangChain BaseChatModel) isinstancerrr generatercr)r)rrs r*rz-Base_Chat_Langchain_Client.get_answer_at_once`sv J '' [ [(Z [ [ [3355:&&w//X%5!6!666r,c#Kttjts Jdfd}t |}|d}D] }||z }|V dS)Nr ctjgdS)N)rn callbacks)rrTr2r=)ritr)sr* thread_funczFBase_Chat_Langchain_Client.get_answer_stream_iter..thread_funcms@ JJ&r{3345J 6 6 6 IIKKKKKr,)targetrF)r"r rrr rstart)r)rtrrrrs` @@r*rz1Base_Chat_Langchain_Client.get_answer_stream_itergs  ! ! J '' [ [(Z [ [ [3355        + & & &     E E !L      r,)rF) r>r?r@r+rr rr __classcell__)rs@r*rrMsy((((((    777r,r)B __future__rtypingrrrdrK commentjsoncjsonrsysrequestsrLropathlibrrrdduckduckgo_searchr itertoolsrasyncioaiohttpenumr $langchain.callbacks.streaming_stdoutr langchain.callbacks.managerr r r rrlangchain.callbacks.baserlangchain.inputrlangchain.schemarrr threadingrr collectionsrlangchain.chat_models.baserrrrrpresets index_funcutilsrFrconfigr r"rRrTrurrr4r,r*r0s""""""&&&&&&&&   """"""OOOOOO;;;;;;33333333333333888888&&&&&&@@@@@@@@@@''''''''444444PPPPPPPPPPPP######:   + + + + + 0+ + + \========@F F F F F F F F R))))))))))r,