File size: 2,988 Bytes
b34f0d5
7dcc8af
398cd15
f706b9e
8144da3
c65ce97
 
398cd15
f706b9e
e1ec564
3353e65
f706b9e
3353e65
f706b9e
3353e65
e1ec564
c753d25
 
 
 
 
 
398cd15
092cc1c
c753d25
 
 
092cc1c
398cd15
092cc1c
c753d25
092cc1c
c753d25
 
 
 
092cc1c
 
 
 
 
 
 
 
 
c753d25
092cc1c
c753d25
 
f9b088b
e1ec564
f9b088b
 
b34f0d5
e1ec564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398cd15
e1ec564
 
 
 
 
 
 
 
398cd15
660d467
 
e1ec564
 
 
 
 
958e155
f9b088b
 
 
b34f0d5
e1ec564
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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()