AIRider commited on
Commit
c333821
·
verified ·
1 Parent(s): d0fd9d3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -10
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 + "\n주어진 입력에 대해서만 정확히 답변하세요. 추가 질문을 생성하거나 입력 내용을 확장하지 마세요."},
29
- {"role": "user", "content": prompt}
30
  ]
31
 
32
  try:
33
- response = ""
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
- response += chunk
48
- if "?" in chunk: # 질문 마크가 포함된 경우 생성 중단
49
- break
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="당신은 정확하고 간결한 응답을 제공하는 AI 어시스턴트입니다. 사용자의 입력에 대해서만 답변하고, 추가 질문이나 확장된 대화를 생성하지 마세요.",
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
  )