KorWoody commited on
Commit
27e25ed
ยท
1 Parent(s): c96a9c5

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +135 -0
app.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pymssql
3
+ import pandas as pd
4
+
5
+
6
+
7
+ from langchain.vectorstores import Chroma
8
+ from langchain.embeddings import OpenAIEmbeddings
9
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
10
+ from langchain.llms import OpenAI
11
+ from langchain.chat_models import ChatOpenAI
12
+ from langchain.chains import RetrievalQA
13
+ from langchain.document_loaders import TextLoader
14
+ from langchain.document_loaders import DirectoryLoader
15
+ from langchain.document_loaders import CSVLoader
16
+ from langchain.memory import ConversationBufferMemory
17
+
18
+ def Loading():
19
+ return "๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘..."
20
+
21
+ def LoadData(openai_key):
22
+
23
+ if openai_key is not None:
24
+
25
+ persist_directory = 'realdb_LLM'
26
+
27
+ embedding = OpenAIEmbeddings()
28
+
29
+ vectordb = Chroma(
30
+ persist_directory=persist_directory,
31
+ embedding_function=embedding
32
+ )
33
+
34
+ global retriever
35
+ retriever = vectordb.as_retriever(search_kwargs={"k": 1})
36
+
37
+ return "์ค€๋น„ ์™„๋ฃŒ"
38
+ else:
39
+ return "์‚ฌ์šฉํ•˜์‹œ๋Š” API Key๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค."
40
+
41
+ def process_llm_response(llm_response):
42
+ print(llm_response['result'])
43
+ print('\n\nSources:')
44
+ for source in llm_response["source_documents"]:
45
+ print(source.metadata['source'])
46
+
47
+
48
+ # ์ฑ—๋ด‡์˜ ๋‹ต๋ณ€์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
49
+ def respond(message, chat_history, temperature):
50
+ try:
51
+ qa_chain = RetrievalQA.from_chain_type(
52
+ llm=OpenAI(temperature=0.4),
53
+ # llm=OpenAI(temperature=0.4),
54
+ # llm=ChatOpenAI(temperature=0),
55
+ chain_type="stuff",
56
+ retriever=retriever
57
+ )
58
+
59
+ result = qa_chain(message)
60
+
61
+ bot_message = result['result']
62
+
63
+ # bot_message += '\n\n' + ' [์ถœ์ฒ˜]'
64
+
65
+ # # ๋‹ต๋ณ€์˜ ์ถœ์ฒ˜๋ฅผ ํ‘œ๊ธฐ
66
+ # for i, doc in enumerate(result['source_documents']):
67
+ # bot_message += str(i+1) + '. ' + doc.metadata['source'] + ' '
68
+
69
+ # ์ฑ„ํŒ… ๊ธฐ๋ก์— ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€์™€ ๋ด‡์˜ ์‘๋‹ต์„ ์ถ”๊ฐ€.
70
+ chat_history.append((message, bot_message))
71
+
72
+ return "", chat_history
73
+ except:
74
+ chat_history.append(("", "API Key ์ž…๋ ฅ ์š”๋ง"))
75
+
76
+ return " ", chat_history
77
+
78
+ # return "", chat_history
79
+
80
+
81
+ import gradio as gr
82
+
83
+ # ์ฑ—๋ด‡ ์„ค๋ช…
84
+ title = """
85
+ <div style="text-align: center; max-width: 500px; margin: 0 auto;">
86
+ <div>
87
+ <h1>Pretraining Chatbot V2 Real</h1>
88
+ </div>
89
+ <p style="margin-bottom: 10px; font-size: 94%">
90
+ OpenAI LLM๋ฅผ ์ด์šฉํ•œ Chatbot (Similarity)
91
+ </p>
92
+ </div>
93
+ """
94
+
95
+ # ๊พธ๋ฏธ๊ธฐ
96
+ css="""
97
+ #col-container {max-width: 700px; margin-left: auto; margin-right: auto;}
98
+ """
99
+ with gr.Blocks(css=css) as UnivChatbot:
100
+ with gr.Column(elem_id="col-container"):
101
+ gr.HTML(title)
102
+
103
+ with gr.Row():
104
+ with gr.Column(scale=3):
105
+ openai_key = gr.Textbox(label="You OpenAI API key", type="password", placeholder="OpenAI Key Type", elem_id="InputKey", show_label=False, container=False)
106
+ with gr.Column(scale=1):
107
+ langchain_status = gr.Textbox(placeholder="Status", interactive=False, show_label=False, container=False)
108
+ with gr.Column(scale=1):
109
+ chk_key = gr.Button("ํ™•์ธ", variant="primary")
110
+
111
+ chatbot = gr.Chatbot(label="๋Œ€ํ•™ ์ฑ—๋ด‡์‹œ์Šคํ…œ(OpenAI LLM)", elem_id="chatbot") # ์ƒ๋‹จ ์ขŒ์ธก
112
+
113
+ with gr.Row():
114
+ with gr.Column(scale=9):
115
+ msg = gr.Textbox(label="์ž…๋ ฅ", placeholder="๊ถ๊ธˆํ•˜์‹  ๋‚ด์—ญ์„ ์ž…๋ ฅํ•˜์—ฌ ์ฃผ์„ธ์š”.", elem_id="InputQuery", show_label=False, container=False)
116
+
117
+ with gr.Row():
118
+ with gr.Column(scale=1):
119
+ submit = gr.Button("์ „์†ก", variant="primary")
120
+ with gr.Column(scale=1):
121
+ clear = gr.Button("์ดˆ๊ธฐํ™”", variant="stop")
122
+
123
+ #chk_key.click(Loading, None, langchain_status, queue=False)
124
+ chk_key.click(LoadData, openai_key, outputs=[langchain_status], queue=False)
125
+
126
+ # ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ œ์ถœ(submit)ํ•˜๋ฉด respond ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ.
127
+ msg.submit(respond, [msg, chatbot], [msg, chatbot])
128
+
129
+ submit.click(respond, [msg, chatbot], [msg, chatbot])
130
+
131
+ # '์ดˆ๊ธฐํ™”' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ฑ„ํŒ… ๊ธฐ๋ก์„ ์ดˆ๊ธฐํ™”.
132
+ clear.click(lambda: None, None, chatbot, queue=False)
133
+
134
+
135
+ UnivChatbot.launch()