import gradio as gr from huggingface_hub import InferenceClient import os from typing import Optional ############################# # [기본코드] - Cohere 관련 부분만 남김 ############################# # Cohere Command R+ 모델 ID 정의 COHERE_MODEL = "CohereForAI/c4ai-command-r-plus-08-2024" def get_client(model_name: str): """ 모델 이름에 맞춰 InferenceClient 생성. 토큰은 환경 변수에서 가져옴. """ hf_token = os.getenv("HF_TOKEN") if not hf_token: raise ValueError("HuggingFace API 토큰(HF_TOKEN)이 설정되지 않았습니다.") if model_name == "Cohere Command R+": model_id = COHERE_MODEL else: raise ValueError("유효하지 않은 모델 이름입니다.") return InferenceClient(model_id, token=hf_token) def respond_cohere_qna( question: str, system_message: str, max_tokens: int, temperature: float, top_p: float ): """ Cohere Command R+ 모델을 이용해 한 번의 질문(question)에 대한 답변을 반환하는 함수. """ model_name = "Cohere Command R+" try: client = get_client(model_name) 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)}" ############################# # 고급 설정 (Cohere) - 코드에서만 정의 (UI에 노출 금지) ############################# COHERE_SYSTEM_MESSAGE = """반드시 한글로 답변할 것. 너는 최고의 비서이다. 내가 요구하는 것들을 최대한 자세하고 정확하게 답변하라. """ COHERE_MAX_TOKENS = 4000 COHERE_TEMPERATURE = 0.7 COHERE_TOP_P = 0.95 ############################# # UI - 블로그 생성기 ############################# with gr.Blocks() as demo: gr.Markdown("# 블로그 생성기") # 말투바꾸기 (라디오 버튼) tone_radio = gr.Radio( label="말투바꾸기", choices=["친근하게", "일반적인", "전문적인"], value="일반적인" # 기본 선택 ) # 참조글 입력 (3개) ref1 = gr.Textbox(label="참조글 1") ref2 = gr.Textbox(label="참조글 2") ref3 = gr.Textbox(label="참조글 3") output_box = gr.Textbox(label="결과", lines=8, interactive=False) def generate_blog(tone_value, ref1_value, ref2_value, ref3_value): # 프롬프트: “~~” # 말투와 참조글들을 하나로 합쳐 질문(프롬프트) 형식으로 구성 question = ( f"~~\n" f"말투: {tone_value}\n" f"참조글1: {ref1_value}\n" f"참조글2: {ref2_value}\n" f"참조글3: {ref3_value}\n" ) # Cohere Command R+ 모델 호출 response = respond_cohere_qna( question=question, system_message=COHERE_SYSTEM_MESSAGE, max_tokens=COHERE_MAX_TOKENS, temperature=COHERE_TEMPERATURE, top_p=COHERE_TOP_P ) return response generate_button = gr.Button("생성하기") generate_button.click( fn=generate_blog, inputs=[tone_radio, ref1, ref2, ref3], outputs=output_box ) if __name__ == "__main__": demo.launch()