Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
|
|
2 |
from huggingface_hub import InferenceClient
|
3 |
import os
|
4 |
from threading import Event
|
|
|
5 |
|
6 |
hf_token = os.getenv("HF_TOKEN")
|
7 |
stop_event = Event()
|
@@ -18,6 +19,20 @@ models = {
|
|
18 |
def get_client(model):
|
19 |
return InferenceClient(model=model, token=hf_token)
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
# 응답 생성 함수 (스트리밍 방식, 자문자답 방지)
|
22 |
def respond(prompt, system_message, max_tokens, temperature, top_p, selected_model):
|
23 |
stop_event.clear()
|
@@ -25,12 +40,12 @@ def respond(prompt, system_message, max_tokens, temperature, top_p, selected_mod
|
|
25 |
|
26 |
# 프롬프트 설정
|
27 |
messages = [
|
28 |
-
{"role": "system", "content": system_message
|
29 |
-
{"role": "user", "content": prompt}
|
30 |
]
|
31 |
|
32 |
try:
|
33 |
-
|
34 |
|
35 |
# 모델에서 응답을 스트리밍
|
36 |
for chunk in client.text_generation(
|
@@ -39,15 +54,14 @@ def respond(prompt, system_message, max_tokens, temperature, top_p, selected_mod
|
|
39 |
temperature=temperature,
|
40 |
top_p=top_p,
|
41 |
stream=True,
|
42 |
-
stop_sequences=["Human:", "User:"
|
43 |
):
|
44 |
if stop_event.is_set():
|
45 |
break
|
46 |
if chunk:
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
yield [(prompt, response.strip())] # 실시간으로 부분적인 응답 반환
|
51 |
|
52 |
except Exception as e:
|
53 |
yield [(prompt, f"오류 발생: {str(e)}")]
|
@@ -64,7 +78,7 @@ with gr.Blocks() as demo:
|
|
64 |
**주의사항:**
|
65 |
- '전송' 버튼을 클릭하거나 입력 필드에서 Shift+Enter를 눌러 메시지를 전송할 수 있습니다.
|
66 |
- Enter 키는 줄바꿈으로 작동합니다.
|
67 |
-
- 입력한 내용에 대해서만 응답하도록 설정되어 있으며, 모델이 추가 질문을 만들거나 입력을 확장하지
|
68 |
""")
|
69 |
|
70 |
with gr.Row():
|
@@ -76,7 +90,7 @@ with gr.Blocks() as demo:
|
|
76 |
top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.90, step=0.05, label="Top-p (핵 샘플링)")
|
77 |
|
78 |
system_message = gr.Textbox(
|
79 |
-
value="당신은 정확하고 간결한
|
80 |
label="시스템 메시지",
|
81 |
lines=5
|
82 |
)
|
|
|
2 |
from huggingface_hub import InferenceClient
|
3 |
import os
|
4 |
from threading import Event
|
5 |
+
import re
|
6 |
|
7 |
hf_token = os.getenv("HF_TOKEN")
|
8 |
stop_event = Event()
|
|
|
19 |
def get_client(model):
|
20 |
return InferenceClient(model=model, token=hf_token)
|
21 |
|
22 |
+
# 응답 필터링 함수
|
23 |
+
def filter_response(response):
|
24 |
+
# 질문 형태 제거
|
25 |
+
response = re.sub(r'\?|질문|물어보|궁금', '', response)
|
26 |
+
|
27 |
+
# 추가 대화나 확장을 제안하는 문구 제거
|
28 |
+
response = re.sub(r'더 자세히 알고 싶으시면|추가로 궁금한 점이 있으시면|다른 질문이 있으신가요?', '', response)
|
29 |
+
|
30 |
+
# 불필요한 공백 제거 및 문장 끝 정리
|
31 |
+
response = re.sub(r'\s+', ' ', response).strip()
|
32 |
+
response = re.sub(r'[.!]\s*$', '', response) + '.'
|
33 |
+
|
34 |
+
return response
|
35 |
+
|
36 |
# 응답 생성 함수 (스트리밍 방식, 자문자답 방지)
|
37 |
def respond(prompt, system_message, max_tokens, temperature, top_p, selected_model):
|
38 |
stop_event.clear()
|
|
|
40 |
|
41 |
# 프롬프트 설정
|
42 |
messages = [
|
43 |
+
{"role": "system", "content": system_message},
|
44 |
+
{"role": "user", "content": prompt + "\n절대로 추가 질문을 하거나 대화를 확장하지 마세요. 오직 위의 내용에 대해서만 간결하게 답변하세요."}
|
45 |
]
|
46 |
|
47 |
try:
|
48 |
+
full_response = ""
|
49 |
|
50 |
# 모델에서 응답을 스트리밍
|
51 |
for chunk in client.text_generation(
|
|
|
54 |
temperature=temperature,
|
55 |
top_p=top_p,
|
56 |
stream=True,
|
57 |
+
stop_sequences=["Human:", "User:", "System:", "Assistant:", "AI:"]
|
58 |
):
|
59 |
if stop_event.is_set():
|
60 |
break
|
61 |
if chunk:
|
62 |
+
full_response += chunk
|
63 |
+
filtered_response = filter_response(full_response)
|
64 |
+
yield [(prompt, filtered_response.strip())]
|
|
|
65 |
|
66 |
except Exception as e:
|
67 |
yield [(prompt, f"오류 발생: {str(e)}")]
|
|
|
78 |
**주의사항:**
|
79 |
- '전송' 버튼을 클릭하거나 입력 필드에서 Shift+Enter를 눌러 메시지를 전송할 수 있습니다.
|
80 |
- Enter 키는 줄바꿈으로 작동합니다.
|
81 |
+
- 입력한 내용에 대해서만 응답하도록 설정되어 있으며, 모델이 추가 질문을 만들거나 입력을 확장하지 않습니다.
|
82 |
""")
|
83 |
|
84 |
with gr.Row():
|
|
|
90 |
top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.90, step=0.05, label="Top-p (핵 샘플링)")
|
91 |
|
92 |
system_message = gr.Textbox(
|
93 |
+
value="당신은 정확하고 간결한 응답만을 제공하는 AI 어시스턴트입니다. 어떤 경우에도 추가 질문을 하거나 대화를 확장하지 마세요. 오직 주어진 입력에 대해서만 답변하세요.",
|
94 |
label="시스템 메시지",
|
95 |
lines=5
|
96 |
)
|