import gradio as gr from transformers import pipeline from huggingface_hub import InferenceClient # 감정 분석 모델 로드 sentiment_pipeline = pipeline("sentiment-analysis", model="beomi/KcELECTRA-base") # 생성 모델 (Zephyr) client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") # 감정 분석 + 재작성 함수 def rewrite_if_negative( message, history: list[tuple[str, str]], system_message, max_tokens, temperature, top_p, ): #감정 분석 result = sentiment_pipeline(message)[0] label = result['label'] score = result['score'] #메시지 초기화 messages = [{"role": "system", "content": system_message}] for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) #문장 재작성 여부 판단 if label == "LABEL_1" and score > 0.8: messages.append({"role": "user", "content": f"다음 문장을 공감 가는 말로 바꿔줘: {message}"}) response = "" for chunk in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = chunk.choices[0].delta.content response += token yield response else: yield "표현이 괜찮." # Gradio 인터페이스 구성 demo = gr.ChatInterface( fn=rewrite_if_negative, additional_inputs=[ gr.Textbox(value="너는 부드러운 말투로 말하는 AI야.", label="System message"), gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"), ], title="문장 어시스턴스", description="문장을 입력하면 감정을 분석하고, 너무 부정적인 말투는 공감 가는 표현으로 바꿔줌", theme="soft", ) if __name__ == "__main__": demo.launch()