AIRider commited on
Commit
bb9bd92
·
verified ·
1 Parent(s): b08a6f9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -29
app.py CHANGED
@@ -19,14 +19,14 @@ def get_client(model):
19
  return InferenceClient(model=model, token=hf_token)
20
 
21
  # 응답 생성 함수
22
- def respond(message, system_message, max_tokens, temperature, top_p, selected_model):
23
  stop_event.clear()
24
  client = get_client(selected_model)
25
 
26
  # 프롬프트 설정 - 시스템 메시지를 자유롭게 설정 가능
27
  messages = [
28
  {"role": "system", "content": system_message},
29
- {"role": "user", "content": message}
30
  ]
31
 
32
  try:
@@ -46,42 +46,68 @@ def respond(message, system_message, max_tokens, temperature, top_p, selected_mo
46
  if chunk:
47
  response += chunk
48
  total_tokens_used += len(chunk.split()) # 청크당 사용된 토큰 수 추산
49
- yield [(message, response, f"사용된 토큰 수: {total_tokens_used}/{max_tokens}")]
50
 
 
 
51
  except Exception as e:
52
- yield [(message, f"오류 발생: {str(e)}", "에러 처리 필요")]
53
 
54
- # 이전 응답을 확인하는 함수
55
- def get_last_response(chatbot):
56
- if chatbot and len(chatbot) > 0:
57
- return chatbot[-1][1]
58
- return None
59
 
60
- # Gradio UI 구성
61
- def gradio_interface(message, system_message, max_tokens, temperature, top_p, selected_model):
62
- result = None
63
- for output in respond(message, system_message, max_tokens, temperature, top_p, selected_model):
64
- result = output
65
- return result
66
 
 
67
  with gr.Blocks() as demo:
 
 
 
 
 
 
 
 
 
68
  with gr.Row():
69
- with gr.Column():
70
- selected_model = gr.Dropdown(choices=list(models.keys()), value="deepseek-ai/DeepSeek-Coder-V2-Instruct", label="모델 선택")
71
- system_message = gr.Textbox(label="시스템 메시지", value=" 메시지를 기준으로 대화 흐름을 설정합니다.")
72
- message = gr.Textbox(label="사용자 메시지")
 
 
73
 
74
- max_tokens = gr.Slider(minimum=10, maximum=512, value=128, label="최대 토큰 수")
75
- temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, label="Temperature")
76
- top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.9, label="Top-p")
 
 
 
 
 
 
 
 
 
 
77
 
78
- submit_button = gr.Button("응답 생성")
79
- with gr.Column():
80
- chatbot = gr.Chatbot()
81
- token_usage = gr.Textbox(label="토큰 사용량", interactive=False)
82
-
83
- # 버튼을 눌러 응답을 받는 함수 연결
84
- submit_button.click(gradio_interface, inputs=[message, system_message, max_tokens, temperature, top_p, selected_model], outputs=[chatbot, token_usage])
 
 
 
 
 
 
 
85
 
86
  # UI 실행
87
  demo.launch()
 
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()
24
  client = get_client(selected_model)
25
 
26
  # 프롬프트 설정 - 시스템 메시지를 자유롭게 설정 가능
27
  messages = [
28
  {"role": "system", "content": system_message},
29
+ {"role": "user", "content": prompt}
30
  ]
31
 
32
  try:
 
46
  if chunk:
47
  response += chunk
48
  total_tokens_used += len(chunk.split()) # 청크당 사용된 토큰 수 추산
 
49
 
50
+ return response
51
+
52
  except Exception as e:
53
+ return f"오류 발생: {str(e)}"
54
 
55
+ # 대화 계속 함수
56
+ def continue_writing(chatbot, system_message, max_tokens, temperature, top_p, selected_model):
57
+ last_message = chatbot[-1][1] if chatbot else ""
58
+ return respond(last_message, system_message, max_tokens, temperature, top_p, selected_model)
 
59
 
60
+ # 응답 중단 함수
61
+ def stop_generation():
62
+ stop_event.set()
 
 
 
63
 
64
+ # Gradio UI 구성
65
  with gr.Blocks() as demo:
66
+ gr.Markdown("# 프롬프트 최적화 Playground")
67
+
68
+ gr.Markdown("""
69
+ **주의사항:**
70
+ - '전송' 버튼을 클릭하거나 입력 필드에서 Shift+Enter를 눌러 메시지를 전송할 수 있습니다.
71
+ - Enter 키는 줄바꿈으로 작동합니다.
72
+ - 입력한 내용에 대해서만 응답하도록 설정되어 있지만, 모델이 때때로 예상치 못한 방식으로 응답할 수 있습니다.
73
+ """)
74
+
75
  with gr.Row():
76
+ with gr.Column(scale=1):
77
+ with gr.Accordion("모델 설정", open=True):
78
+ model = gr.Radio(list(models.keys()), value=list(models.keys())[0], label="언어 모델 선택", info="사용할 언어 모델을 선택하세요")
79
+ max_tokens = gr.Slider(minimum=1, maximum=2000, value=500, step=100, label="최대 새 토큰 수")
80
+ temperature = gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.05, label="온도")
81
+ top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.90, step=0.05, label="Top-p (핵 샘플링)")
82
 
83
+ system_message = gr.Textbox(
84
+ value="너는 나의 최고의 비서이다.\n내가 요구하는것들을 최대한 자세하고 정확하게 답변하라.\n반드시 한글로 답변할것.\n사용자의 입력 내용에만 직접적으로 답변하고, 추가 질문을 만들거나 입력을 확장하지 마라.",
85
+ label="시스템 메시지",
86
+ lines=5
87
+ )
88
+
89
+ with gr.Column(scale=2):
90
+ chatbot = gr.Chatbot(height=400, label="대화 결과")
91
+ prompt = gr.Textbox(
92
+ label="내용 입력",
93
+ lines=3,
94
+ placeholder="메시지를 입력하세요. 전송 버튼을 클릭하거나 Shift+Enter를 눌러 전송합니다."
95
+ )
96
 
97
+ with gr.Row():
98
+ send = gr.Button("전송")
99
+ continue_btn = gr.Button("계속 작성")
100
+ stop = gr.Button("🛑 생성 중단")
101
+ clear = gr.Button("🗑️ 대화 내역 지우기")
102
+
103
+ # Event handlers
104
+ send.click(respond, inputs=[prompt, system_message, max_tokens, temperature, top_p, model], outputs=[chatbot])
105
+ prompt.submit(respond, inputs=[prompt, system_message, max_tokens, temperature, top_p, model], outputs=[chatbot])
106
+ continue_btn.click(continue_writing,
107
+ inputs=[chatbot, system_message, max_tokens, temperature, top_p, model],
108
+ outputs=[chatbot])
109
+ stop.click(stop_generation)
110
+ clear.click(lambda: None, outputs=[chatbot])
111
 
112
  # UI 실행
113
  demo.launch()