Kyudan commited on
Commit
99909af
ยท
verified ยท
1 Parent(s): a606f7d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -22
app.py CHANGED
@@ -5,40 +5,40 @@ from openai import OpenAI
5
  from translate_utils import translate_ko_to_en
6
 
7
  YOUR_OPENAI_API_KEY = "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"
 
8
  # ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋กœ๋“œ
9
  embedding_model_name = "snunlp/KR-SBERT-V40K-klueNLI-augSTS"
10
  embedding_model = HuggingFaceEmbeddings(
11
  model_name=embedding_model_name,
12
- model_kwargs={"device": "cpu"}, # GPU ์„ค์ • ์‹œ "cuda"๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
13
  encode_kwargs={"normalize_embeddings": True},
14
  )
15
 
16
- # vector DB ๋กœ๋“œ๋“œ
17
  save_path = "./version-2024-12-22"
18
- vectorstore = FAISS.load_local(save_path, embedding_model,allow_dangerous_deserialization=True)
19
-
20
-
21
 
22
-
23
- def chatbot(input_question, eng_trans = True, num_ref = 3):
24
  retriever = vectorstore.as_retriever(search_kwargs={"k": num_ref})
25
- if eng_trans == False:
 
 
26
  basic_docs = retriever.invoke(input_question)
 
27
  else:
28
  eng = translate_ko_to_en(input_question)
29
-
30
  basic_docs = retriever.invoke(input_question)
31
  eng_docs = retriever.invoke(eng)
32
  basic_docs = basic_docs + eng_docs
33
 
34
- context = "\n".join([doc.page_content for doc in basic_docs])
35
 
36
- client = OpenAI(
37
- api_key=YOUR_OPENAI_API_KEY)
38
 
39
- # question๊ณผ context๋ฅผ message์— ์‚ฝ์ž…
40
  completion = client.chat.completions.create(
41
- model="gpt-4o-mini",
42
  messages=[
43
  {
44
  "role": "user",
@@ -54,16 +54,66 @@ def chatbot(input_question, eng_trans = True, num_ref = 3):
54
  ]
55
  )
56
 
57
-
58
-
59
  return completion.choices[0].message.content
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
-
64
- demo = gr.Interface(fn=chatbot,
65
- inputs=[gr.Textbox(label="์งˆ๋ฌธ ์ž…๋ ฅ"), # ํ…์ŠคํŠธ ์ž…๋ ฅ
66
- gr.Checkbox(label="์˜์–ด ๋ฒˆ์—ญ ์‚ฌ์šฉ ์—ฌ๋ถ€", value=True), # ์ฒดํฌ๋ฐ•์Šค ์ถ”๊ฐ€
67
- gr.Slider(1,5, value=3, step=1),
68
- ], outputs="text")
69
  demo.launch()
 
5
  from translate_utils import translate_ko_to_en
6
 
7
  YOUR_OPENAI_API_KEY = "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"
8
+
9
  # ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋กœ๋“œ
10
  embedding_model_name = "snunlp/KR-SBERT-V40K-klueNLI-augSTS"
11
  embedding_model = HuggingFaceEmbeddings(
12
  model_name=embedding_model_name,
13
+ model_kwargs={"device": "cpu"}, # GPU ์‚ฌ์šฉ ์‹œ "cuda"๋กœ ๋ณ€๊ฒฝ
14
  encode_kwargs={"normalize_embeddings": True},
15
  )
16
 
17
+ # vector DB ๋กœ๋“œ
18
  save_path = "./version-2024-12-22"
19
+ vectorstore = FAISS.load_local(save_path, embedding_model, allow_dangerous_deserialization=True)
 
 
20
 
21
+ def chatbot(input_question, eng_trans=True, num_ref=3):
22
+ """์ฑ—๋ด‡ ํ•จ์ˆ˜"""
23
  retriever = vectorstore.as_retriever(search_kwargs={"k": num_ref})
24
+
25
+ # ํ•œ๊ตญ์–ด๋กœ ์งˆ์˜
26
+ if not eng_trans:
27
  basic_docs = retriever.invoke(input_question)
28
+ # ์˜์–ด๋กœ ๋ฒˆ์—ญ ํ›„ ์งˆ์˜(์˜์–ด, ํ•œ๊ธ€ ๋‘˜ ๋‹ค ๊ฒ€์ƒ‰)
29
  else:
30
  eng = translate_ko_to_en(input_question)
 
31
  basic_docs = retriever.invoke(input_question)
32
  eng_docs = retriever.invoke(eng)
33
  basic_docs = basic_docs + eng_docs
34
 
35
+ context = "\n".join([doc.page_content for doc in basic_docs])
36
 
37
+ client = OpenAI(api_key=YOUR_OPENAI_API_KEY)
 
38
 
39
+ # GPT-4 or GPT-4o-mini ๋“ฑ ๋ชจ๋ธ ์ง€์ •
40
  completion = client.chat.completions.create(
41
+ model="gpt-4o-mini",
42
  messages=[
43
  {
44
  "role": "user",
 
54
  ]
55
  )
56
 
 
 
57
  return completion.choices[0].message.content
58
 
59
+ # Gradio Blocks ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๊พธ๋ฏผ ๋ฒ„์ „
60
+ with gr.Blocks() as demo:
61
+ # ์ƒ๋‹จ ์ด๋ฏธ์ง€
62
+ gr.Image(
63
+ value="head.png", # ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ๋˜๋Š” URL
64
+ elem_id="top-image",
65
+ label=None
66
+ )
67
+
68
+ # ์•ˆ๋‚ด ๋ฌธ๊ตฌ
69
+ gr.Markdown(
70
+ """
71
+ # ์ฐจ์„ธ๋Œ€๋ฐ˜๋„์ฒดํ•™๊ณผ ํŠนํ™” ์ฑ—๋ด‡
72
+ - ์ด ์ฑ—๋ด‡์€ ํ•œ๊ตญ์–ด ์งˆ์˜์— ๋Œ€ํ•ด ๋ฐ˜๋„์ฒด ๊ด€๋ จ ์ •๋ณด, ์ฐจ์„ธ๋Œ€๋ฐ˜๋„์ฒดํ•™๊ณผ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์นœ์ ˆํ•˜๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.<br>
73
+ - ๋ฐ˜๋„์ฒด ์ „๋ฌธ์šฉ์–ด๋Š” ์ผ๋ถ€ ์˜์–ด๋กœ ๋‹ต๋ณ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.<br>
74
+ ### ์˜์–ด ๋ฒˆ์—ญ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๊ธฐ๋Šฅ
75
+ - ์˜์–ด ๋ฒˆ์—ญ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ํ‚ค๋ฉด, ์ •ํ™•๋„๊ฐ€ ์ƒ์Šน๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ถ”๋ก  ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <br>
76
+ ### ๊ฒ€์ƒ‰ ๋ฌธ์„œ ๊ฐœ์ˆ˜ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ
77
+ ๊ฒ€์ƒ‰ํ•  ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์ •ํ™•๋„๊ฐ€ ์ƒ์Šน๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ถ”๋ก  ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <br>
78
+ """,
79
+ elem_id="description"
80
+ )
81
 
82
+ # ๋ฉ”์ธ UI
83
+ with gr.Group():
84
+ with gr.Row():
85
+ # ์ž…๋ ฅ ํŒŒํŠธ
86
+ with gr.Column():
87
+ input_question = gr.Textbox(
88
+ label="์งˆ๋ฌธ ์ž…๋ ฅ",
89
+ placeholder="๋ฐ˜๋„์ฒด์™€ ์ฐจ์„ธ๋Œ€๋ฐ˜๋„์ฒดํ•™๊ณผ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ ์ ์„ ์ž…๋ ฅํ•˜์„ธ์š”."
90
+ )
91
+ eng_trans = gr.Checkbox(
92
+ label="์˜์–ด ๋ฒˆ์—ญ ์‚ฌ์šฉ ์—ฌ๋ถ€",
93
+ value=True
94
+ )
95
+ num_ref = gr.Slider(
96
+ minimum=1,
97
+ maximum=5,
98
+ value=3,
99
+ step=1,
100
+ label="๊ฒ€์ƒ‰ํ•  ๋ฌธ์„œ ๊ฐœ์ˆ˜"
101
+ )
102
+ submit_btn = gr.Button("์งˆ๋ฌธํ•˜๊ธฐ")
103
+
104
+ # ์ถœ๋ ฅ ํŒŒํŠธ
105
+ with gr.Column():
106
+ output_answer = gr.Textbox(
107
+ label="๋‹ต๋ณ€",
108
+ placeholder="๋‹ต๋ณ€์ด ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค...",
109
+ lines=10
110
+ )
111
+
112
+ # ๋ฒ„ํŠผ๊ณผ ํ•จ์ˆ˜ ์—ฐ๊ฒฐ
113
+ submit_btn.click(
114
+ fn=chatbot,
115
+ inputs=[input_question, eng_trans, num_ref],
116
+ outputs=output_answer
117
+ )
118
 
 
 
 
 
 
 
119
  demo.launch()