sfdbddlmZddlmZmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZddlZddlmZddlZddlZddlmZddlZd d lTd d lTd d lTd d lm Z d d l!m"Z"m#Z#dd l$m!Z!ddl%m&Z&m'Z'Gdde&Z(Gdde&Z)Gdde&Z*Gdde&Z+ d/d0dZ,e-dkre.dd5Z/ej0e/dZ1dddn #1swxYwYej2ej3 e,d!"Z4gZ5d#Z6ej7ej8j9d$zej8j:zej7e4;ej7ej8j9d%zej8j:zd&Zej7e>ej7d(e4j?ej7ej8j9d)zej8j:zd*Zej7e>ej7d+e4j?ej7ej8j9d,zej8j:ze4@e5e6-D]Z>ej7e>ej7d.e4j?dSdS)1) annotations) TYPE_CHECKINGListN)BytesIO)Image)tqdm)ddg)Enum)*)shared)retrieve_proxy usage_limit)config) BaseLLMModel ModelTypeceZdZedddfdfd ZdZdZdZd Zd Z e j j dd Z d ZdZdZfdZxZS) OpenAIClientg?returnNonect|||||||_d|_|dS)N) model_name temperaturetop_p system_promptuserT)super__init__api_key need_api_key_refresh_header)selfrr!rrr user_name __class__s >/Users/treediagram/dev/ChuanhuChatGPT/modules/models/models.pyr zOpenAIClient.__init__"s^ !#'       c#K|d}|'||}d}|D] }||z }|V dSttzVdS)NT)streamr) _get_response_decode_chat_responseSTANDARD_ERROR_MSGGENERAL_ERROR_MSG)r$responseiter partial_textis r'get_answer_stream_iterz#OpenAIClient.get_answer_stream_iter6s%%T%22  --h77DL # #! """"" # #%'88 8 8 8 8 8r(c|}tj|j}|dddd}|dd}||fS)Nchoicesrmessagecontentusage total_tokens)r+jsonloadstext)r$r/r7total_token_counts r'get_answer_at_oncezOpenAIClient.get_answer_at_onceAsY%%'':hm,,9%a(3I>$W-n=)))r(ctt|}|j>t|jdkr&tt |j}||zS|S)Nr) count_tokenconstruct_userrlenall_token_countsconstruct_system)r$ user_inputinput_token_countsystem_prompt_token_counts r'r@zOpenAIClient.count_tokenHsh'z(B(BCC   )c$2G.H.HA.M.M(3 !344)) %%'@@ @  r(c  tj}t|d}|dd}t jjd|d|} ||}nJ#t$r=}tj dt|ztdcYd}~Sd}~wwxYwt|dd z d }t|dtz d }d td zd|d|d|dtd zS#t jj$rt&t(zt*z} | cYSt jj$rt&t.zt*z} | cYSt$rb}ddl} | tj tdt|zt&t*zcYd}~Sd}~wwxYw)Nz%Y-%m-%dr)dayz ?start_date=z &end_date=u获取API使用情况失败:u**获取API使用情况失败** total_usagedr z u本月使用金额zh
z%
$z$z
r)datetimenowget_last_day_of_monthstrftimereplacer state usage_api_url_get_billing_data Exceptionloggingerrorstri18nroundrrequests exceptionsConnectTimeoutr-CONNECTION_TIMEOUT_MSGERROR_RETRIEVE_MSG ReadTimeoutREAD_TIMEOUT_MSG traceback print_exc) r$ curr_timelast_day_of_monthfirst_day_of_month usage_url usage_datae rounded_usage usage_percent status_textrbs r' billing_infozOpenAIClient.billing_infoQs$ ; )--//I 5!!#8J// !*!2!2q!2!9!9!B!B:!N!N !<5ttCUttarttI ?!33I>>  ? ? ? =AFGGG=>>>>>>>> ?"*]";c"A1EEM!*]";k"I1MMM233479F776C77 Ub 77 r} 777 "1   "%;;>PP    ".   ,/??BTTK    ; ; ;        ! ! ! M$=>>QG H H H%(:: : : : : : :  ;s\BEBE C"%2CC"EC""A E-H 2,H  H )AHH H cdSN)r$new_upper_limits r'set_token_upper_limitz"OpenAIClient.set_token_upper_limitxs r(Fc |j}|j}|j}tjt jj|zt jjzdd|d}|t|g|}|j ||j |j |j ||j|jd}|j |j|d<|j |j|d<|j |j|d<|jr |j|d<|rt(}nt*}t,jjt2kr&tjd t,jjt75 t9jt,jj|||| }n#YddddSxYw dddn #1swxYwY|S) Napplication/jsonBearer z Content-Type Authorization)modelmessagesrrnr*presence_penaltyfrequency_penalty max_tokensstop logit_biasru使用自定义API URL: )headersr:r*timeout)r!rhistoryrVdebugcoloramaForeYELLOWRESETrDrrr n_choicesr{r|max_generation_token stop_sequenceruser_identifierTIMEOUT_STREAMING TIMEOUT_ALLr rRcompletion_urlCOMPLETION_URLinforr[post) r$r*openai_api_keyrrrpayloadrr/s r'r+zOpenAIClient._get_response{s$* , hm* l#%-]%89 : : :/7~77    $' 66AAG_+Z $ 5!%!7     $ 0$($=GL !   )"0GFO ? &$(OGL !   3"2GFO  "'GG!G < &. 8 8 LQFL4OQQ R R R      #=L/# !#                         s07F9(E"!F"E2$F2FF Fc*dd|jd|_dS)Nrtrurv)r!rr$s r'r#zOpenAIClient._refresh_headers$.5t|55   r(ct5tj||jt}dddn #1swxYwY|jdkr|}|Std|jd|j)N)rrz$API request failed with status code : ) rr[getrr status_coder:rUr<)r$ billing_urlr/datas r'rTzOpenAIClient._get_billing_datas     | #H                 3 & &==??DK^x7K^^x}^^ s"=AAc#"Kd}|D]}|r|}t|} tj|dd}n:#tj$r(t td|z||z }Y{wxYw|dkr_d|ddvrO|ddddkrn6 |dddd V#t$r }Yd}~d}~wwxYw|rt|dS) Nru"JSON解析错误,收到的内容: deltar5r finish_reasonr~r7) iter_linesdecoderBr:r;JSONDecodeErrorprintrYrU)r$r/ error_msgchunk chunk_lengthris r'r,z"OpenAIClient._decode_chat_responsesd ((** ! !E ! "5zz  JuQRRy11EE+$CDD%zQRRR&IH !##53CA3F(F(FY'*?;vEE!#I.q1':9EEEEE$!!! !  'I&& & ' 's$A4BB C&& C:5C:crt|}||Sro)rset_keyr#)r$new_access_keyretr&s r'rzOpenAIClient.set_keys/ggoon--  r(rr)F)__name__ __module__ __qualname__INITIAL_SYSTEM_PROMPTr r3r>r@rmrrr rRswitching_api_keyr+r#rTr,r __classcell__r&s@r'rr!s  ,( 9 9 9***!!!%;%;%;N    \#666$#6p    '''.r(rc4eZdZdd fd ZdZdZdZxZS) ChatGLM_ClientrrrcZt||ddlm}m}ddl}t tktj }d}tj drtj d}||vrd|}||} nd|} || dad } d |vrd} || d} |jr;t#jd | } nn|d kr@|>| s!! J##! --.Ez&&(( & <=== ))++((Z-CJ-C :;;; .. >??? JJLLE!MMMC)>(=r(cbd|jD}tjtjjztjjztdzdks JdfdtdtdD|fS)Ncg|] }|d S)r7rp).0xs r' z7ChatGLM_Client._get_glm_style_input..s666A1Y<666r(r rz3History should be even length. current history is: c6g|]}||dzgS)rrp)rr2rs r'rz7ChatGLM_Client._get_glm_style_input..s:777AJA/777r() rpoprVrrrrrrBrange)r$queryrs @r'_get_glm_style_inputz#ChatGLM_Client._get_glm_style_inputs66666  hm* l#%-]%89 : : : LL1  ! ! ! J J J " ! !7777!!S\\155777~r(c|\}}tt||\}}|t |fS)N)r)rrchatrrB)r$rrr/_s r'r>z!ChatGLM_Client.get_answer_at_oncesM2244#(( ug)77 !X&&r(c#K|\}}tt|||j|j|jD] \}}|V dS)N) max_lengthrr)rr stream_chatrtoken_upper_limitrr)r$rrr/s r'r3z%ChatGLM_Client.get_answer_stream_iter"su2244!.!:!:   -*( ";" "    HgNNNN  r(rr)rrrr rr>r3rrs@r'rrsp&"&"&"&"&"&"&"P   '''       r(rc8eZdZ d d fd ZdZdZdZxZS) LLaMA_ClientNrrrct||ddlm}ddlm}ddlm}ddlm }m }m } d|_ d|_ |d } || |_d |_t t"d} t$jd rt%jd } || vrd |} | | } nd |} |d|}|d.id| d|ddddddddddddddddddddddd d!d"d#d$d}| dd%d&d'(}t-|jd)5}t1j|}dddn #1swxYwY||d*|+a|d,|| |-adSdS)/Nrr)Dataset) AutoPipeline)r)ModelArgumentsDatasetArgumentsInferencerArgumentsi ) dataset_pathrrrzdecapoda-research/zlora/model_name_or_pathlora_model_path model_typeconfig_overrides config_nametokenizer_name cache_diruse_fast_tokenizerTmodel_revisionmainuse_auth_tokenF torch_dtypeuse_loralora_r lora_alpha lora_dropoutg?use_ram_optimized_loadrzconfigs/ds_config_chatbot.jsonbf16) local_rank random_seed deepspeedmixed_precisionrnone) tune_strategy ds_config inferencer) pipeline_name model_args data_args pipeline_argsrp)rr lmflow.datasets.datasetrlmflow.pipeline.auto_pipelinerlmflow.models.auto_modelr lmflow.argsrrrr end_stringdatasetr LLAMA_MODELLLAMA_INFERENCERrrrropenrr:load get_model get_pipeline)r$r lora_pathr%rrrrrrrrrrrrfr r&s r'r zLLaMA_Client.__init__0s? JY???333333>>>>>>666666UUUUUUUUUU$(! $$$777 wy))   "2":Jw~~h'' 8Z11 ++!7:!7!7J%) @J@@ $/I// 'XXX<<XYbYbXososXGKGKXY]Y]XnrnrX~B~BX;?4XPVPVXglglXz~z~XJOJOXXYXYXfhfhXwzwzXSWSWXJ//!7WioqqqMm-s33 )q IaLL  ) ) ) ) ) ) ) ) ) ) ) ) ) ) )#--$#.K ,88*%#+ 9     3#;":s*E  EEcg}d}|jr d|jd}|jD]M}|ddkr!||d|d/|d|dNd |}|d z }|S) Nrz Instruction:  rolerzInput: r7zOutput: rz Output: )rrappendjoin)r$r instructionrcontexts r'_get_llama_style_inputz#LLaMA_Client._get_llama_style_inputds   CA4+=AAAK : :AyF""+DDa lDDEEEE8!I,889999++g&&>!r(c2|}|jdd|igd}tt ||j|j}|ddd}|t|fS)N text_onlyr<type instancesrxrmax_new_tokensrr-r) r(r from_dictr inferencerrrto_dictrB)r$r' input_datasetoutput_datasetr/s r'r>zLLaMA_Client.get_answer_at_oncers--// .. 0A/B C C  *33!4( 4  "))++K8;FCX&&r(c#K|}d}d}td|j|D]}|jdd||zigd}t t|||j}| ddd}|dks ||j krdS||z }|VdS) Nrrrr*r<r+r.r-) r(rrrr0rr1rrr2r)r$r'r1steprr3r4r/s r'r3z#LLaMA_Client.get_answer_stream_iters--// q$3T::  A L22$W|344677M.77!%# , 8N &--// r3rrs@r'rr/sx 2222222h   '''"r(rcPeZdZd fd ZdZdZdZdZdZdZ d Z d Z xZ S) XMChatrctd|||_d|_|d|_d|_g|_d|_d|_ dS)Nxmchatrzhttps://xmbot.net/web) rr r! session_idreset image_bytes image_path xm_historyurl last_conv_id)r$r!r%r&s r'r zXMChat.__init__sf H9===  * r(cbttj|_d|_gdfS)Nu 已重置)rXuuiduuid4r;rArs r'r<z XMChat.resets)djll++ ;r(c tj|}|j\}}d}t||z ||z }|dkrFt ||z}t ||z}|||ftj}t} |jdkr| d}| | d| } tj | d} | S)NirRGBARGBJPEG)formatzutf-8)rrsizeminintresize ANTIALIASrmodeconvertsavegetvaluebase64 b64encoder) r$r>imgwidthheight max_dimension scale_ratio new_width new_heightbuffer binary_image base64_images r'image_to_base64zXMChat.image_to_base64sj$$ v -%/1GHH ??EK/00IVk122J**i4eoFFC 8v  ++e$$C '''(( ' 55<.is_image_filesI&B&B&B "W--h77:@@BBN!%;; ;r(u读取图片文件: )rVrr_r=r>)r$rdrgs r'try_read_imagezXMChat.try_read_imagesr < < < = " " # L::: ; ; ;#33H==D &DOOO#D "DOOOr(cb|jdS|jdd}tj|j|dS)Nu'点赞失败,你还没发送过消息goodrCappraiser:u"👍点赞成功,感谢反馈~rAr[rr@r$rs r'likez XMChat.likesE   $<<%    dhT****33r(cb|jdS|jdd}tj|j|dS)Nu'点踩失败,你还没发送过消息badrkrmu"👎点踩成功,感谢反馈~rnros r'dislikezXMChat.dislikesE   $<<%    dhT****33r(c|}d}d}|||||fS)NrFrp) r$ real_inputs use_websearchfilesreply_languagechatbot fake_inputsdisplay_appendlimited_contexts r'prepare_inputszXMChat.prepare_inputss"!  ^['QQr(c.|r|D]?}|jr6tjd|j||j@|j||jfdfgz}|jtjd|ttj }|j |j |d|jd}tj |j|}tj|j}tjd|dd|dfS) z?if the model accepts multi modal input, implement this functionu尝试读取图像: Nu使用图片作为输入 imgbase64user_idr;rC data_typerrmu图片回复: r)namerVrrhr>r=r<rXrCrDr!r;r[rr@r:r;r<)r$rwrylanguagefileconv_idrr/s r'handle_file_uploadzXMChat.handle_file_uploads%  B 3 393L!C !C!CDDD'' 222*!t&8$%?$@@+ 7888 djll++#|"&/#!, , $====:hm44 @hv.>@@AAAWd""r(c|jdd}ttj}||_|j|j|d|d}tj|j |} tj |j }|dt|dfS#t$r%}|j t|j fcYd}~Sd}~wwxYw)Nr7r<rrmr)rrXrCrDrAr!r;r[rr@r:r;r<rBrU)r$questionrrr/ris r'r>zXMChat.get_answer_at_once s<#I.djll###|/   =555 5z(-00HF#S&)9%:%:: : 5 5 5=#hm"4"44 4 4 4 4 4 4 5s)5B C)C C Cr) rrrr r<r_rhrprsr}rr>rrs@r'r8r8s ! ! ! ! ! ! :### 444444RRR ###45555555r(r8rrrctdd|z}tj|}d} g} d} |tjkr dt_d} t j|} |tjkr.tj d|t||||||} n?|tj kr*tj d|t|| } n|tjkr\|d krVd |d }tj |d} tjd rt%d dd g} dg| z} n|tjkrL|d krFtj d|d|d} |dkrd}|dz }n|d|z }t'||| } n=|tjkrTtjdd krtjd}t)||} n|tjkrddlm}||| } n|tjkrddlm}||| } n|tjkrddlm}|||||} nk|tjkrddlm}|||| } nF|tj krddl m!}||| } n"|tj"krtGd|tj |n7#tH$r*}tj%|tLd|}Yd}~nd}~wwxYw| r| || fS| || t j'| | fS)Nu模型设置为了: FT)labelu正在加载OpenAI模型: )rr!rrrr%u正在加载ChatGLM模型: )r%ru 现在请为 u 选择LoRA模型lora)plain filetypeszNo LoRAu正在加载LLaMA模型: z + z + No LoRAXMCHAT_API_KEY)r!r%r)StableLM_Client) MOSS_Client) Yuan_Client)r!r%r)ChuanhuAgent_Client) PaLM_Clientu未知模型: r)r5visible)(rYrget_typeOpenAIrlocal_embeddinggrChatbotupdaterVrrChatGLMrLLaMArrisdirget_file_namesrr8environrStableLMrMOSSrYuanAIinspurair ChuanhuAgentrPaLMrUnknown ValueErrorrUrWr-Dropdown)rr access_keyrrrr%msgrlora_selector_visibility lora_choicesdont_change_lora_selectorrxryrrrrrris r'rrs5 & ' '*:j*:*: :C#J//J$L %Y%%%!% Ejj11G8+ ) ) ) LBjBB C C C %"+'# EE9, , , LCzCC D D D":CCCEE 9? * *"/D/D?*???C L   '+ $w}}V$$ 8-$2$ 8 8 8 %;5LL 9? * *"/D/D LUZUUOUU V V V(, %)++"&|#._... OyBBBEE 9+ + +z~~.//255Z^^,<== :CCCEE 9- - - 1 1 1 1 1 1#OJ)DDDEE 9> ) ) ) ) ) ) ) )K i@@@EE 9+ + + - - - - - -K J)cpqqqEE 91 1 1 9 9 9 9 9 9'' J)TTTEE 9> ) ) ) ) ) ) ) )K i@@@EE 9, , ,:j::;; ; S +++ a#**q**+!oc7""c7BK$6$6|Um$6$n$nnns/JL L5 L00L5__main__z config.jsonr r)levelzchatglm-6b-int4)rFu测试账单功能u 测试问答u巴黎是中国的首都吗?)inputsryr*u测试问答后history : u测试记忆力u!我刚刚问了你什么问题?u测试记忆力后history : u测试重试功能)ryr*u重试后history : )NNNNNr)rr)A __future__rtypingrrrVr: commentjsoncjsonrsysr[urllib3rrSiorPILrrrduckduckgo_searchr asyncioaiohttpenumr rCpresets index_funcutilsrr rrrmodules base_modelrrrrrr8rrrr rr basicConfigDEBUGclientryr*rBackGREENrrmrpredictr2rretryrpr(r'rs""""""&&&&&&&&   !!!!!! 00000000////////CCCCC<CCCLEEEEE\EEEPggggg<gggTB5B5B5B5B5\B5B5B5N OoOoOoOoOod z mS ! !9Q#A'78999999999999999Ggm,,,, Y"3 4 4 4FG FGL$';;hm>QQRRRGL$$&&'''GL$~5 8KKLLL/H ^^8WV^ L L QGL=V^==>>>GL$'888=;NNOOO2H ^^8WV^ L L QGL@@@AAAGL$';;hm>QQRRR \\'&\ 9 9 QGL7v~77888889sDD D