From 96a6f43e53b2b975d37ea49132227771c9e16ad0 Mon Sep 17 00:00:00 2001 From: yanqiangmiffy <1185918903@qq.com> Date: Tue, 18 Apr 2023 02:22:26 +0800 Subject: [PATCH] update --- cache/index.faiss | Bin 0 -> 53293 bytes cache/index.pkl | Bin 0 -> 5427 bytes clc/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 308 bytes clc/__pycache__/gpt_service.cpython-39.pyc | Bin 0 -> 1949 bytes .../langchain_application.cpython-39.pyc | Bin 0 -> 2261 bytes clc/__pycache__/source_service.cpython-39.pyc | Bin 0 -> 1914 bytes clc/gpt_service.py | 11 +-- main.py | 73 ++++++++---------- tests/test_duckduckgo_search.py | 10 +++ tests/test_duckpy.py | 15 ++++ tests/test_gradio_slient.py | 19 +++++ 11 files changed, 80 insertions(+), 48 deletions(-) create mode 100644 cache/index.faiss create mode 100644 cache/index.pkl create mode 100644 clc/__pycache__/__init__.cpython-39.pyc create mode 100644 clc/__pycache__/gpt_service.cpython-39.pyc create mode 100644 clc/__pycache__/langchain_application.cpython-39.pyc create mode 100644 clc/__pycache__/source_service.cpython-39.pyc create mode 100644 tests/test_duckduckgo_search.py create mode 100644 tests/test_duckpy.py create mode 100644 tests/test_gradio_slient.py diff --git a/cache/index.faiss b/cache/index.faiss new file mode 100644 index 0000000000000000000000000000000000000000..c2ba0aa511c95a700d5f8b3f17c81a5a615cae27 GIT binary patch literal 53293 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 literal 0 HcmV?d00001 diff --git a/cache/index.pkl b/cache/index.pkl new file mode 100644 index 0000000000000000000000000000000000000000..a081797612442b8b50707d5cf50f4fd9e7bb5231 GIT binary patch literal 5427 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 L{8v|R;qw0hRD0Oe literal 0 HcmV?d00001 diff --git a/clc/__pycache__/__init__.cpython-39.pyc b/clc/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d90ddbf04d29c451d80e5e157cd570cc5f41f381 GIT binary patch literal 308 zcmYjLv1-FG6qJ*pL6Cp&&?Q5hG%W;7TT}v_LJ4Fm1|gng`xRSqB$?uVP1pWXmJa=d zZk_s)DF=6tJ9x*b>6A0Vb@8CT>HeI|B@!}%7$zi|y)vEb*=+Rj$%X1;?R2t#x`B&`Ek>UOcbTimR<0B56un5ToX z=fW1tauAhjvB|)-Tm)Cfcjf7CH*9L9I<#BS~I^8$saZC-rMD`CLa9U{q literal 0 HcmV?d00001 diff --git a/clc/__pycache__/gpt_service.cpython-39.pyc b/clc/__pycache__/gpt_service.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed22d68fd692ddeb6f751247602f9a16b58d813f GIT binary patch literal 1949 zcmZWqOK%)S5bmDW&W_jKjURC=A+Q7p?ID{GB0yFk8yOLVY!fNTWn`%}neN@4(DQJ2 zZ(vuOlP%?da^nKZ!8!61_z&<0nj|j1o(%Fv+^Bh9hIun?=209` za+mOcH;xEz2>;NH7kGG|beq%TsGp3@s8m}A8OP&?OUN8C!{3cz;dOMjmHvFbO zPh^)`cV}l8mK9M9N|g$xO<6HhehYTP{pOvqDR)aQq+LYz0Ul&ip;CPC{P0f%{Ub1f z#1vq59s;njD?H(I=N92^90&l8d%*i~I3#hC2XQ18V6OptLENhO@D_PS29!5>bQH#m zVo9|5!VAhSsf5P$WZM$GZUSVj)N(_Jh4aeWN_iVGq z1>LuPj-aIU90bTaFkP5>35X$w(yx*JF6thKyxJW*Ga0T2Bi(fVIh3 zDif_?lf1hA<<|Z^RX!G}(fiw@tPomU-GQV67qVhMmFfPlGEC1sfdo>h@hw!1HV`^p z|F5&XQ;iVpKnd`y_@DLY!8SgD^};FG?CiyjlXuh#Y^pYrnybkwh+w#sIWv<=yaVD~ zzcamZQUB?su4{uzm3d{rb;vfg24AI!+UdYtYQU^*`5KrRc}yNtpw0}b3)6$?bNbxh zcb>XWy_v(wn5vs5n7K3O5ccpMCo^~G4Cy+&z}%Tzdj$F$BPfGXO>Bh0m!cS&k-`?z zZKxJ3)=ME%)B><-14$DJUQlRT*H<0n*O6QSVnZc#RYIv-$}Ym=vow+NUAU$%10ile zJ?g-O-#<|!q!C@F)76V`;YY7J559W%#qKqkr^@V}0y})jR_*7i>^I!iuatsteABkjYTcW@24!l)?Zj zOl5^pP;Vo7ABbH%DehEA30lr7=n`JRGEyNBWb}JLBHDr<<_N4#%XMhSC$9ku+IrpU zkT<}+slV9kwrqnjUZ&t>07VE5f36(OuqzUJ2Bc3`^q~H9?@OzJwl qZ42UAX!t+Kh0+S+S;xE9ch2;)4iMg&1N}Mb)L188)N#;*j{7f%V(GmA literal 0 HcmV?d00001 diff --git a/clc/__pycache__/langchain_application.cpython-39.pyc b/clc/__pycache__/langchain_application.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c93a0daf86aeec31c41d218a0115a599bd6abef8 GIT binary patch literal 2261 zcmah~TW{P%6!v(%UaxnPpit3L1gt8ASR}TkAb}#FTUDYwl&H`?S&>GLXLjR_*WQf1 zDVsV{Zz%zqQbB2<7n&e~%0m;>RwTX9{sH&{e(l;xBqZKZrE(c`(!jf99!3xNq_asdDZ}f2038uDfgmDUs4i+E;^UN+s!N&_k0mQzmo+&a zr>#s~(G(=?6^KkSCj^qA+2biqCCUMzm>s*Umi4ALUqjUigt$L9uB%N5fCY26{zDm7Ya*)!`f-??Mw8{2ohx&8IG)Ux5&o^E)3g_dr| z*6L=Z(kfT=x@naRr>>S=r{W#b8SLBN+B2jx5E1Gc%xrk3WA_ydhnRM?R8m(US)qu6 z+{e^oCLPtSk9Nbfdp~pP4eubWH!R(wTmojiz56~qK-nln3X-k^PLmmQRbX&KooyY@ zmqAJe4FRSi$Ml4trAUfMBwZCMQj8hWqy(*C(>?$PT$%RnMgt(ydAx?$VVI9o@a}=v zeH%I-`2rR^bXETu3 zC^bBX6~#busa0Va*zmK!^6>e)@BO|3K)nVU?!cZQ)21$cZ5@pP!!iaez{cR%V0{A| zI3t0AaqI+Y$gxg*idqv2Pl+KXSe z7cVSbI1yc*4KIGbbnWcY*{jjy0!UWQ&#nCM?Smu7)WTz0_|viI`%BUJ>FCBc?K`L2 zi`T+?=flZgz*00b39gps7nbL57Pdvxx1y=J&Nz}yiPz=%*~H(rLNs{}w6D)Zmp+TW zJk!2+arxI9;g44!qNR(A;lzz3iEUuIy*L$499^DU3@=?x{DJ#u;ZFGZ^wQmPD@UfI z$ur^PNuF;U4TRGE?LH*P)y{qT#MENU!jlu>+^xRHf^eAg5BxL;1ev3G^xvP z_;`?6H5w>uGPos*w@N@kk7+lW9v;=1sSjGzWl(V;K*KAX4&WMhxm0Jy5FQ5BtGdOM zmV&#fWm&>%lm&7lX0#yR(5n>3&TMb2`*7!UyeP7#!5-^{?qHCHNLZ`b#W>wC1-c+J zWV&#HTS1OTMw#w484c2&)4&bJL(!B9_`%?u@mr(ilN*ouE~@2q7q5q;Z3e0ygnN#O zV>Ij3_FNp_Zmnlc07f|tYnx$Hli6!5vbO9NRhHwiZQ-%yR%62!wb@oKevXUtVAI2^ zYg$iY5w8Kuo&g=LXV`WQS(I>OIKKokqi)mkVrELZE^cdUm3nwXcTjgJ!Mg1pqOmXc z6;Kk=k}M(lku1I-Do7C}Bmoo2k0eoiD5pgjsVP~^qp|J($xHw5p}&~sL>DtP4phvU zw`oy~gFMC~P2EaXSU1GLUgRC;)sBv*z&Nk*8oPWE;!{KvKM&)T{$ei3U|tZ6wWrqk zwiKh{CKcYYAx^+_OUXArCt43Mb*b6_%1{0n@jpcC<q`UA7DP=2><{9 literal 0 HcmV?d00001 diff --git a/clc/__pycache__/source_service.cpython-39.pyc b/clc/__pycache__/source_service.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e82dc2aa1a462d4b88b0ecb453d1af295f482744 GIT binary patch literal 1914 zcmZux-D_M$6rZ_Ydvmj!CZP?bie01#E4qoPAS@~yQlml$h2YB)x!m5F-M!&{Br~&V zvuvJPRM4U#_|jH44Gbvs*Sro0B@3+j5QWre0QRl_>d`FprfU z5LV*;eY-WstX)#``#%NEsHeJxXdL#EJU*@-CQ;rAnrRaAT=GVB;~v zl7dz8NW|Ux!Ew-3Nd|`Xwe_2;YwxbU^Ip)5i(EyqYE+M-+=R=LcKf*5iLxZE$3+%2 zWzkl5BLU}bA8&Re0Vc*}ERqA26nUc>7c9v;^?L9OG9^1Ts#iYCr4qeZ^#o^IaEI+8 zVqCz^l}~z|4tQ@xG5;vL!x!U8556udF(1Ajn*+20UD+*qBIdhX9049NhMEl2ZJ3)dWgWzT4oFB8$bGU8KX{01 z+pHYWV1nHR&1D3FTbN~#6^y509%a1dX%B#GCmn%d^<_TEExd5j!MRoHIab6nJcv|R zFCFn%6(W=%xG~i%?MR-sMG1mEC87eK=Qp<+d$&cg56*ILvzz2x^0&8vf8Zp^_u@3( zlP2L%jxz?rwI7B_o~SUq0wJUif>4hx(t!3?X5gt$9Ak=3X9J7ag=uh7pmfLyRb+@b zS*P?C`Mh~z4XmNf=qVM8${ASqDJ2S!+P5AN278al6GPNP>%<<|L+_Np2|6qd;5;RV zi^?C)A^Q8lsRj7XgEl`bgRI~_a{+Cyw*kKns%K;L)sxY$Uyr`|@$bjKjUNB;&(FX7 z`}-H8KYti~_x-akzdd(r2oCj^H_i=xr>^d)=X6#3JmneBm3&IIg9Po=7PM7JT}l(F zSRw?zZE(w(yqf?;?tw^hC9rI?lR`0TkKa?UEf68S&=y4&0;4?>RX{%=x;#y*4rFx1 z!?cK_RLsM6%@Ji24eLPLAhm~qxiD;x#R7UP8v@U$9mjkH>~a|daUDaZPp?v+mO<}V zXK8);@XSNN>*F*8uY;oCDd778x{z23bm21qiU&3lVsv~CuAv7XgS{h`;H1C{)jR`| zxQYh6rmjScO+oW2ZcG8ts!U)rl`pR2{%a_(=%-*PPse!^_RgxgY!dHZn@xM#d8VSV zy3Z5FTTZGOQnF12VsZ|oMR#iMnBD-1nc~jyYqG0R!{UGMx?~Pa^S_1{#{Uw!O#9bo zFZ+`BPOXG57duNB>LA1>(o0b42@33%4;2 mrn|{8pk8qY+nBk*|6N%7?~gP75WA_w$LIvURfY;L+b;n3tMiHg literal 0 HcmV?d00001 diff --git a/clc/gpt_service.py b/clc/gpt_service.py index 1bf7b69..9a99313 100644 --- a/clc/gpt_service.py +++ b/clc/gpt_service.py @@ -53,15 +53,10 @@ class ChatGLMService(LLM): model_name_or_path, trust_remote_code=True ) - self.model = ( - AutoModel.from_pretrained( - model_name_or_path, - trust_remote_code=True) - .half() - .cuda() - ) - + self.model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True).half().cuda() + self.model=self.model.eval() # if __name__ == '__main__': # config=LangChainCFG() # chatLLM = ChatGLMService() # chatLLM.load_model(model_name_or_path=config.llm_model_name) + diff --git a/main.py b/main.py index 935d77a..7460166 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,3 @@ -#!/usr/bin/env python -# -*- coding:utf-8 _*- -""" -@author:quincy qiang -@license: Apache Licence -@file: main.py -@time: 2023/04/17 -@contact: yanqiangmiffy@gamil.com -@software: PyCharm -@description: coding.. -""" - import os import shutil @@ -17,11 +5,13 @@ import gradio as gr from clc.langchain_application import LangChainApplication +os.environ["CUDA_VISIBLE_DEVICES"] = '0' + # 修改成自己的配置!!! class LangChainCFG: - llm_model_name = '../../pretrained_models/chatglm-6b' # 本地模型文件 or huggingface远程仓库 - embedding_model_name = '../../pretrained_models/text2vec-large-chinese' # 检索模型文件 or huggingface远程仓库 + llm_model_name = 'THUDM/chatglm-6b-int4-qe' # 本地模型文件 or huggingface远程仓库 + embedding_model_name = 'GanymedeNil/text2vec-large-chinese' # 检索模型文件 or huggingface远程仓库 vector_store_path = './cache' docs_path = './docs' @@ -58,22 +48,23 @@ def predict(input, large_language_model, embedding_model, history=None): - print(large_language_model, embedding_model) + # print(large_language_model, embedding_model) + print(input) if history == None: history = [] resp = application.get_knowledge_based_answer( query=input, - history_len=5, + history_len=1, temperature=0.1, top_p=0.9, chat_history=history ) - print(resp) history.append((input, resp['result'])) - search_text = '' for idx, source in enumerate(resp['source_documents'][:2]): - search_text += f'【搜索结果{idx}:】{source.page_content}\n\n' + sep = f'----------【搜索结果{idx}:】---------------\n' + search_text += f'{sep}\n{source.page_content}\n\n' + print(search_text) return '', history, history, search_text @@ -83,6 +74,8 @@ with block as demo:
""") + state = gr.State() + with gr.Row(): with gr.Column(scale=1): embedding_model = gr.Dropdown([ @@ -112,7 +105,6 @@ with block as demo: inputs=file, outputs=selectFile) with gr.Column(scale=4): - state = gr.State() with gr.Row(): with gr.Column(scale=4): chatbot = gr.Chatbot(label='Chinese-LangChain').style(height=400) @@ -122,26 +114,27 @@ with block as demo: send = gr.Button("🚀 发送") with gr.Column(scale=2): search = gr.Textbox(label='搜索结果') - # 发送按钮 提交 - send.click(predict, - inputs=[ - message, large_language_model, - embedding_model, state - ], - outputs=[message, chatbot, state, search]) - # 清空历史对话按钮 提交 - clear_history.click(fn=clear_session, - inputs=[], - outputs=[chatbot, state], - queue=False) + # 发送按钮 提交 + send.click(predict, + inputs=[ + message, large_language_model, + embedding_model, state + ], + outputs=[message, chatbot, state, search]) - # 输入框 回车 - message.submit(predict, - inputs=[ - message, large_language_model, - embedding_model, state - ], - outputs=[message, chatbot, state, search]) + # 清空历史对话按钮 提交 + clear_history.click(fn=clear_session, + inputs=[], + outputs=[chatbot, state], + queue=False) -demo.queue().launch(server_name='0.0.0.0', server_port=8008, share=False) + # 输入框 回车 + message.submit(predict, + inputs=[ + message, large_language_model, + embedding_model, state + ], + outputs=[message, chatbot, state, search]) + +demo.queue(concurrency_count=2).launch(server_name='0.0.0.0', server_port=8888, share=False,show_error=True, enable_queue=True) diff --git a/tests/test_duckduckgo_search.py b/tests/test_duckduckgo_search.py new file mode 100644 index 0000000..f0a31b7 --- /dev/null +++ b/tests/test_duckduckgo_search.py @@ -0,0 +1,10 @@ +from duckduckgo_search import ddg +from duckduckgo_search.utils import SESSION + + +SESSION.proxies = { + "http": f"socks5h://localhost:7890", + "https": f"socks5h://localhost:7890" +} +r = ddg("马保国") +print(r) \ No newline at end of file diff --git a/tests/test_duckpy.py b/tests/test_duckpy.py new file mode 100644 index 0000000..78e9e28 --- /dev/null +++ b/tests/test_duckpy.py @@ -0,0 +1,15 @@ +from duckpy import Client + +client = Client() + +results = client.search("Python Wikipedia") + +# Prints first result title +print(results[0].title) + +# Prints first result URL +print(results[0].url) + +# Prints first result description +print(results[0].description) +# https://github.com/AmanoTeam/duckpy \ No newline at end of file diff --git a/tests/test_gradio_slient.py b/tests/test_gradio_slient.py new file mode 100644 index 0000000..59b2213 --- /dev/null +++ b/tests/test_gradio_slient.py @@ -0,0 +1,19 @@ +import time + +import gradio as gra + + +def user_greeting(name): + time.sleep(10) + return "Hi! " + name + " Welcome to your first Gradio application!😎" + + +# define gradio interface and other parameters +app = gra.Interface( + fn=user_greeting, + inputs="text", + outputs="text", +) +app.launch( + server_name='0.0.0.0', server_port=8888, share=False,show_error=True, enable_queue=True +)