1Ve +ddlmZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z ddl TddlTddlTddlmZGd d eZdS) ) annotationsN)shared)retrieve_proxy sensitive_id usage_limit)*) BaseLLMModelceZdZedddfdfd ZdZdZdZd Zd Z e j j dd Z d ZdZdZfdZddZdZxZS) OpenAIClient?returnNonectt|d||||||_d|_|dS)N model_name)r temperaturetop_p system_promptuserT)super__init__MODEL_METADATAapi_key need_api_key_refresh_header)selfrrrrr user_name __class__s D/Users/treediagram/Downloads/ChuanhuChatGPT/modules/models/OpenAI.pyrzOpenAIClient.__init__sh %j1,?#'       c#K|d}|'||}d}|D] }||z }|V dSttzVdS)NT)streamr) _get_response_decode_chat_responseSTANDARD_ERROR_MSGGENERAL_ERROR_MSG)rresponseiter partial_textis r!get_answer_stream_iterz#OpenAIClient.get_answer_stream_iter's%%T%22  --h77DL # #! """"" # #%'88 8 8 8 8 8r"c|}tj|j}|dddd}|dd}||fS)Nchoicesrmessagecontentusage total_tokens)r%jsonloadstext)rr)r1total_token_counts r!get_answer_at_oncezOpenAIClient.get_answer_at_once2sY%%'':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_token9sh'z(B(BCC   )c$2G.H.HA.M.M(3 !344)) %%'@@ @  r"c tj}t|d}|dd}t jjd|d|} ||}np#t$rc}dt|vrtdcYd}~Sdt|vrtd cYd}~Std cYd}~Sd}~wwxYwt|d d z d }t|d tz d}ddlm} | dtd||tS#t"jj$rt(t*zt,z} | cYSt"jj$rt(t0zt,z} | cYSt$r]}ddl} | jt7jtdt|zt(t,zcYd}~Sd}~wwxYw)Nz%Y-%m-%dr )dayz ?start_date=z &end_date=zInvalid authorization headeruV**获取API使用情况失败**,需在填写`config.json`中正确填写sensitive_idz Incorrect API key provided: sessu@**获取API使用情况失败**,sensitive_id错误或已过期u**获取API使用情况失败** total_usagedr)get_htmlzbilling_info.htmlu本月使用金额)label usage_percent rounded_usagerru获取API使用情况失败:)datetimenowget_last_day_of_monthstrftimereplacerstate usage_api_url_get_billing_data Exceptionstri18nroundrwebuirGformatrequests exceptionsConnectTimeoutr'CONNECTION_TIMEOUT_MSGERROR_RETRIEVE_MSG ReadTimeoutREAD_TIMEOUT_MSG traceback print_excloggingerror) r curr_timelast_day_of_monthfirst_day_of_month usage_url usage_dataerJrIrG status_textr`s r! billing_infozOpenAIClient.billing_infoBs' ; )--//I 5!!#8J// !*!2!2q!2!9!9!B!B:!N!N !<5ttCUttarttI ?!33I>>  ? ? ?1SVV;; xyyyyyyyy73q66AA bcccccccc=>>>>>>>>  ?"*]";c"A1EEM!*]";k"I1MMM ( ( ( ( ( (8/0077 !566$1$1"- 8  "1   "%;;>PP    ".   ,/??BTTK    ; ; ;     I  ! ! ! M$=>>QG H H H%(:: : : : : : :  ;sBE<BE< D%DDE< D)D*E</D=D>E<DA3E<<-H?+,H? H?"AH:4H?:H?cdSN)rnew_upper_limits r!set_token_upper_limitz"OpenAIClient.set_token_upper_limitls r"Fc D|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,jjt55 t7jt,jj|||| }n&#t;jYddddSxYw dddn #1swxYwY|S) Napplication/jsonBearer  Content-Type Authorization)modelmessagesrrnr$presence_penaltyfrequency_penalty max_tokensstop logit_biasr使用自定义API URL: headersr4r$timeout)rrhistoryrbdebugcoloramaForeYELLOWRESETr>rrr n_choicesrzr{max_generation_token stop_sequencer~user_identifierTIMEOUT_STREAMING TIMEOUT_ALLrrPchat_completion_urlCHAT_COMPLETION_URLrrYpostr`ra) rr$openai_api_keyrrrpayloadrr)s r!r%zOpenAIClient._get_responseos4* , hm* l#%-]%89 : : :/7~77    $' 66AAG_+Z $ 5!%!7     $ 0$($=GL !   )"0GFO ? &$(OGL !   3"2GFO  "'GG!G < +/B B B MWV\5UWW X X X      #=L4# !#  #%%%                       s07F9(E"!F"F7FFFFc*ddtd|_dS)Nrrrsrt)rr)rs r!rzOpenAIClient._refresh_headers".5|55   r"ct5tj||jt}dddn #1swxYwY|jdkr|}|Std|jd|j)N)rrz$API request failed with status code z: ) rrYgetrr status_coder4rSr6)r billing_urlr)datas r!rRzOpenAIClient._get_billing_datas     | #H                 3 & &==??DK^x7K^^x}^^ s"=AAc#Kd}|D]}|r |}t|} tj|dd}n,#t t d|z||z }YpxYw |dkrzd|ddvrjd|ddvr|ddd}n|d}|dkrnR |dddd Vn#t$r }Yd}~d}~wwxYw#t d |Y xYw|r|d kst|dSdS) Nru"JSON解析错误,收到的内容: deltar/r finish_reasonr}r1zERROR: z data: [DONE]) iter_linesdecoder<r4r5printrUrS)rr) error_msgchunk chunk_lengthrris r!r&z"OpenAIClient._decode_chat_responses ((**  E  "5zz  JuQRRy11EE$CDD%zQRRR&IH#a''GuY7G7J,J,J*eI.>q.AAA,1),y"IIIII(%%%$HHHH%+E++,,,H1 2  'Y66I&& & ' '66s=A  'B  A DC65D6 D DD  DD%crt|}||Srm)rset_keyr)rnew_access_keyretr s r!rzOpenAIClient.set_keys/ggoon--  r"cbt}dd|j|d}|j|d}tjjt kr&tjdtjjt5tj tjj||d|}dddn #1swxYwY|S)Nrrrs)rurvr)rwrxrFr) rrrrrPrrrbrrrYr)rrrrrrr)s r!_single_query_at_oncez"OpenAIClient._single_query_at_onces.5t|55)+   _   < +/B B B MWV\5UWW X X X     } 0 H               s/)B$$B(+B(cLt|jdkrs|sptsh|jdd}|tdkr|jdd} dtddd |d |dg}||d }t j|j}|d ddd} t| dz} nH#t$r;} tj d| t|dddz} Yd} ~ nd} ~ wwxYw| | ||S|tdkr1t|dddz} | | ||StStS)Nrrr1u$模型自动总结(消耗tokens)r system)roler1rzDPlease write a title based on the following conversation: --- User: z Assistant: g)rr/r0z.jsonu自动命名失败。u第一条提问)r<rhide_history_when_not_logged_inrUSUMMARY_CHAT_SYSTEM_PROMPTrr4r5r6replace_special_symbolsrSrbinforename_chat_historygrupdate) rname_chat_method user_questionchatbotrsingle_turn_checkbox ai_answerrr)r1filenameris r!auto_name_chat_historyz#OpenAIClient.auto_name_chat_historys t|   ! !*> !Gf ! LOI6M4(N#O#OOO LOI6  U"*7QRR"(6fL6f6f[d6f6fggG $99's9SSH#z(-88H&y1!4Y? JG6w??'IHH UUUL!<! 6r"r ) __future__rr4rbr`rrYrrconfigrrr index_funcpresetsutils base_modelr r rnr"r!rs"""""" >>>>>>>>>>$$$$$$EEEEE<EEEEEr"