File size: 3,257 Bytes
b34f0d5
7dcc8af
2fa1592
b34f0d5
8144da3
c65ce97
 
5b30631
f1d1009
5b30631
2fa1592
f1d1009
2fa1592
7dcc8af
f1d1009
5b30631
b34f0d5
f1d1009
7f46e0a
c753d25
7f46e0a
c753d25
7dcc8af
5b30631
b93a2da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a94492
 
 
 
 
 
 
b93a2da
7dcc8af
c753d25
 
 
d7fa504
b34f0d5
7f46e0a
f1d1009
7f46e0a
 
 
 
5b30631
7f46e0a
 
c753d25
7f46e0a
5b30631
7f46e0a
 
c753d25
 
7f46e0a
 
958e155
7f46e0a
 
958e155
7f46e0a
 
958e155
d7fa504
7f46e0a
d7fa504
7f46e0a
 
958e155
 
f9b088b
b34f0d5
958e155
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
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 생성.
    토큰은 환경 변수에서 가져옴.
    """
    hf_token = os.getenv("HF_TOKEN")
    if not hf_token:
        raise ValueError("HuggingFace API 토큰이 필요합니다.")
    return InferenceClient(COHERE_MODEL, token=hf_token)


def translate_text(text, source_lang, target_lang):
    """
    텍스트를 번역하는 함수.
    """
    try:
        client = get_client()

        # 프롬프트 규칙 설정
        if source_lang == "한국어" and target_lang == "영어":
            prompt = f"""
            You are a 30-year veteran English translator.
            You are renowned for your accurate and meticulous expressions.
            Translate the following text from Korean to English:
            '{text}'
            - Translate accurately according to the context and flow of the content.
            - Do not add any extra text or explanations, just provide the translation.
            """
        elif source_lang == "영어" and target_lang == "한국어":
            prompt = f"""
            너는 30년차 한국어 전문 번역가이다.
            정확하고 섬세한 표현력으로 유명한 한국어 전문 번역가이다.
            다음 텍스트를 영어에서 한국어로 번역하라:
            '{text}'
            - 문맥과 내용의 흐름에 맞춰 정확한 번역을 한다.
            - 추가적인 설명 없이 번역 결과만 제공하라.
            """
        else:
            return "지원하지 않는 언어 조합입니다."

        # 번역에 최적화된 설정
        response = client.text_generation(
            prompt,
            max_new_tokens=200,  # 번역 결과의 길이를 적절히 제한
            temperature=0.3,     # 창의성을 낮춰 정확한 번역을 유도
            top_p=0.9            # 높은 확률의 단어만 선택하도록 설정
        )
        return response.strip()
    except Exception as e:
        return f"오류가 발생했습니다: {str(e)}"


# Gradio UI 구성
with gr.Blocks() as demo:
    gr.Markdown("# 번역기")

    # 번역기 탭
    with gr.Tab("번역기"):
        # 언어 선택
        source_lang = gr.Radio(
            choices=["한국어", "영어"],
            label="원본 언어",
            value="한국어"
        )
        target_lang = gr.Radio(
            choices=["한국어", "영어"],
            label="목표 언어",
            value="영어"
        )

        # 입력 텍스트
        input_text = gr.Textbox(label="번역할 텍스트", lines=5)

        # 번역 결과
        translation_output = gr.Textbox(label="번역 결과", lines=5, interactive=False)

        # 번역 버튼
        translate_button = gr.Button("번역")

        # 번역 함수 연결
        translate_button.click(
            fn=translate_text,
            inputs=[input_text, source_lang, target_lang],
            outputs=translation_output
        )

# 메인 실행부
if __name__ == "__main__":
    demo.launch()