import gradio as gr from huggingface_hub import InferenceClient import os # Cohere Command R+ 모델 ID 정의 COHERE_MODEL = "CohereForAI/c4ai-command-r-plus-08-2024" def get_client(): """ Cohere Command R+ 모델을 위한 InferenceClient 생성. HuggingFace Secrets에서 토큰을 가져옴. """ hf_token = os.getenv("HUGGINGFACE_TOKEN") # Secrets에서 토큰 가져오기 if not hf_token: raise ValueError("HuggingFace API 토큰이 설정되지 않았습니다.") return InferenceClient(COHERE_MODEL, token=hf_token) def respond_cohere_qna( question: str, system_message: str, max_tokens: int, temperature: float, top_p: float ): """ Cohere Command R+ 모델을 이용해 한 번의 질문(question)에 대한 답변을 반환하는 함수. """ try: client = get_client() except ValueError as e: return f"오류: {str(e)}" messages = [ {"role": "system", "content": system_message}, {"role": "user", "content": question} ] try: response_full = client.chat_completion( messages, max_tokens=max_tokens, temperature=temperature, top_p=top_p, ) assistant_message = response_full.choices[0].message.content return assistant_message except Exception as e: return f"오류가 발생했습니다: {str(e)}" ############################# # [UI 부분] - 수정된 부분 ############################# with gr.Blocks() as demo: gr.Markdown("# 블로그 생성기") # 말투 선택 라디오 버튼 tone_radio = gr.Radio( choices=["친근한", "전문적인", "일반", "상품후기"], label="말투바꾸기", value="일반" ) # 참조글 입력 reference1 = gr.Textbox(label="참조글1", lines=2) reference2 = gr.Textbox(label="참조글2", lines=2) reference3 = gr.Textbox(label="참조글3", lines=2) # 생성된 블로그 글 출력 generated_blog = gr.Textbox(label="생성된 블로그 글", lines=10, interactive=False) # 전송 버튼 submit_button = gr.Button("생성") def generate_blog(tone, ref1, ref2, ref3): # 참조글을 합쳐서 질문 구성 question = f"말투: {tone}\n참조글1: {ref1}\n참조글2: {ref2}\n참조글3: {ref3}" system_message = "블로그 글을 생성해주세요. 주어진 참조글을 바탕으로 요청된 말투에 맞게 작성하세요." return respond_cohere_qna( question=question, system_message=system_message, max_tokens=1000, temperature=0.7, top_p=0.95 ) submit_button.click( fn=generate_blog, inputs=[tone_radio, reference1, reference2, reference3], outputs=generated_blog ) ############################# # 메인 실행부 ############################# if __name__ == "__main__": demo.launch()