Kims12 commited on
Commit
bcec348
·
verified ·
1 Parent(s): 010df65

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -58
app.py CHANGED
@@ -1,77 +1,53 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient
3
  import os
4
  from typing import Optional
5
 
6
  #############################
7
- # [기본코드] - Cohere 관련 부분만 남김
8
- #############################
9
-
10
- # Cohere Command R+ 모델 ID 정의
11
- COHERE_MODEL = "CohereForAI/c4ai-command-r-plus-08-2024"
12
-
13
- def get_client(model_name: str):
14
- """
15
- 모델 이름에 맞춰 InferenceClient 생성.
16
- 토큰은 환경 변수에서 가져옴.
17
- """
18
- hf_token = os.getenv("HF_TOKEN")
19
- if not hf_token:
20
- raise ValueError("HuggingFace API 토큰(HF_TOKEN)이 설정되지 않았습니다.")
21
 
22
- if model_name == "Cohere Command R+":
23
- model_id = COHERE_MODEL
24
- else:
25
- raise ValueError("유효하지 않은 모델 이름입니다.")
26
- return InferenceClient(model_id, token=hf_token)
27
 
28
- def respond_cohere_qna(
29
- question: str,
30
  system_message: str,
31
  max_tokens: int,
32
  temperature: float,
33
  top_p: float
34
- ):
35
  """
36
- Cohere Command R+ 모델을 이용해 한 번의 질문(question)에 대한 답변을 반환하는 함수.
37
  """
38
- model_name = "Cohere Command R+"
39
- try:
40
- client = get_client(model_name)
41
- except ValueError as e:
42
- return f"오류: {str(e)}"
43
-
44
- messages = [
45
- {"role": "system", "content": system_message},
46
- {"role": "user", "content": question}
47
- ]
48
-
49
  try:
50
- response_full = client.chat_completion(
51
- messages,
 
 
 
 
52
  max_tokens=max_tokens,
53
  temperature=temperature,
54
  top_p=top_p,
55
  )
56
- assistant_message = response_full.choices[0].message.content
57
  return assistant_message
58
  except Exception as e:
59
  return f"오류가 발생했습니다: {str(e)}"
60
 
61
  #############################
62
- # 고급 설정 (Cohere) - 코드에서만 정의 (UI에 노출 금지)
63
  #############################
64
 
65
- COHERE_SYSTEM_MESSAGE = """반드시 한글로 답변할 것.
66
  너는 최고의 비서이다.
67
  내가 요구하는 것들을 최대한 자세하고 정확하게 답변하라.
68
-
69
  ##[기본규칙]
70
  1. 반드시 한국어(한글)로 작성하라.
71
  2. 너는 가장 주목받는 마케터이며 블로그 마케팅 전문가이다.
72
  3. 특히 너는 '정보성(Informative)' 전문 블로그 마케팅 전문가이다.
73
  4. 정보 제공에 초점을 맞추어 작성한다.
74
-
75
  ##[텍스트 작성 규칙]
76
  1. 소주제를 5개로 구분하여 2000자 이상되도록 작성하라.
77
  2. 전체 맥락을 이해하고 문장의 일관성을 유지하라.
@@ -79,13 +55,11 @@ COHERE_SYSTEM_MESSAGE = """반드시 한글로 답변할 것.
79
  4. 주제와 상황에 맞는 적절한 어휘를 선택하라.
80
  5. 한글 어휘의 난이도는 쉽게 작성하라.
81
  6. 절대 문장의 끝에 '답니다'를 사용하지 말 것.
82
-
83
  ###[정보성 블로그 작성 규칙]
84
  1. 독자가 얻고자 하는 유용한 정보와 흥미로운 정보를 제공하도록 작성하라.
85
  2. 독자의 공감을 이끌어내고 궁금증을 해결하도록 작성하라.
86
  3. 독자의 관심사를 충족시키도록 작성하라.
87
  4. 독자에게 이득이 되는 정보를 작성하라.
88
-
89
  ##[제외 규칙]
90
  1. 반드시 비속어 및 욕설(expletive, abusive language, slang)은 제외하라.
91
  2. 반드시 참고글의 링크(URL)는 제외하라.
@@ -94,9 +68,9 @@ COHERE_SYSTEM_MESSAGE = """반드시 한글로 답변할 것.
94
  5. 반드시 문장의 끝부분이 어색한 한국어 표현은 제외하라('예요', '답니다', '해요', '해주죠', '됐죠', '됐어요', '고요' 등.)
95
  """
96
 
97
- COHERE_MAX_TOKENS = 4000
98
- COHERE_TEMPERATURE = 0.7
99
- COHERE_TOP_P = 0.95
100
 
101
  #############################
102
  # UI - 블로그 생성기
@@ -116,25 +90,24 @@ with gr.Blocks() as demo:
116
  ref2 = gr.Textbox(label="참조글 2")
117
  ref3 = gr.Textbox(label="참조글 3")
118
 
119
- output_box = gr.Textbox(label="결과", lines=8, interactive=False)
120
 
121
- def generate_blog(tone_value, ref1_value, ref2_value, ref3_value):
122
- # 프롬프트: “~~”
123
  question = (
124
- f"~~\n"
125
  f"말투: {tone_value}\n"
126
  f"참조글1: {ref1_value}\n"
127
  f"참조글2: {ref2_value}\n"
128
  f"참조글3: {ref3_value}\n"
129
  )
130
 
131
- # Cohere Command R+ 모델 호출
132
- response = respond_cohere_qna(
133
- question=question,
134
- system_message=COHERE_SYSTEM_MESSAGE,
135
- max_tokens=COHERE_MAX_TOKENS,
136
- temperature=COHERE_TEMPERATURE,
137
- top_p=COHERE_TOP_P
138
  )
139
  return response
140
 
 
1
  import gradio as gr
2
+ import openai
3
  import os
4
  from typing import Optional
5
 
6
  #############################
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
+ # OpenAI API 클라이언트 설정
9
+ openai.api_key = os.getenv("OPENAI_API_KEY")
10
+ if not openai.api_key:
11
+ raise ValueError("OpenAI API 토큰(OPENAI_API_KEY)이 설정되지 않았습니다.")
 
12
 
13
+ def call_openai_api(
14
+ content: str,
15
  system_message: str,
16
  max_tokens: int,
17
  temperature: float,
18
  top_p: float
19
+ ) -> str:
20
  """
21
+ OpenAI의 GPT-4o-mini 모델을 이용해 한 번의 질문(content)에 대한 답변을 반환하는 함수.
22
  """
 
 
 
 
 
 
 
 
 
 
 
23
  try:
24
+ response = openai.ChatCompletion.create(
25
+ model="gpt-4o-mini",
26
+ messages=[
27
+ {"role": "system", "content": system_message},
28
+ {"role": "user", "content": content},
29
+ ],
30
  max_tokens=max_tokens,
31
  temperature=temperature,
32
  top_p=top_p,
33
  )
34
+ assistant_message = response.choices[0].message['content']
35
  return assistant_message
36
  except Exception as e:
37
  return f"오류가 발생했습니다: {str(e)}"
38
 
39
  #############################
40
+ # 고급 설정 (OpenAI) - 코드에서만 정의 (UI에 노출 금지)
41
  #############################
42
 
43
+ OPENAI_SYSTEM_MESSAGE = """반드시 한글로 답변할 것.
44
  너는 최고의 비서이다.
45
  내가 요구하는 것들을 최대한 자세하고 정확하게 답변하라.
 
46
  ##[기본규칙]
47
  1. 반드시 한국어(한글)로 작성하라.
48
  2. 너는 가장 주목받는 마케터이며 블로그 마케팅 전문가이다.
49
  3. 특히 너는 '정보성(Informative)' 전문 블로그 마케팅 전문가이다.
50
  4. 정보 제공에 초점을 맞추어 작성한다.
 
51
  ##[텍스트 작성 규칙]
52
  1. 소주제를 5개로 구분하여 2000자 이상되도록 작성하라.
53
  2. 전체 맥락을 이해하고 문장의 일관성을 유지하라.
 
55
  4. 주제와 상황에 맞는 적절한 어휘를 선택하라.
56
  5. 한글 어휘의 난이도는 쉽게 작성하라.
57
  6. 절대 문장의 끝에 '답니다'를 사용하지 말 것.
 
58
  ###[정보성 블로그 작성 규칙]
59
  1. 독자가 얻고자 하는 유용한 정보와 흥미로운 정보를 제공하도록 작성하라.
60
  2. 독자의 공감을 이끌어내고 궁금증을 해결하도록 작성하라.
61
  3. 독자의 관심사를 충족시키도록 작성하라.
62
  4. 독자에게 이득이 되는 정보를 작성하라.
 
63
  ##[제외 규칙]
64
  1. 반드시 비속어 및 욕설(expletive, abusive language, slang)은 제외하라.
65
  2. 반드시 참고글의 링크(URL)는 제외하라.
 
68
  5. 반드시 문장의 끝부분이 어색한 한국어 표현은 제외하라('예요', '답니다', '해요', '해주죠', '됐죠', '됐어요', '고요' 등.)
69
  """
70
 
71
+ OPENAI_MAX_TOKENS = 4000
72
+ OPENAI_TEMPERATURE = 0.7
73
+ OPENAI_TOP_P = 0.95
74
 
75
  #############################
76
  # UI - 블로그 생성기
 
90
  ref2 = gr.Textbox(label="참조글 2")
91
  ref3 = gr.Textbox(label="참조글 3")
92
 
93
+ output_box = gr.Textbox(label="결과", lines=20, interactive=False)
94
 
95
+ def generate_blog(tone_value: str, ref1_value: str, ref2_value: str, ref3_value: str) -> str:
96
+ # 프롬프트 생성
97
  question = (
 
98
  f"말투: {tone_value}\n"
99
  f"참조글1: {ref1_value}\n"
100
  f"참조글2: {ref2_value}\n"
101
  f"참조글3: {ref3_value}\n"
102
  )
103
 
104
+ # OpenAI GPT-4o-mini 모델 호출
105
+ response = call_openai_api(
106
+ content=question,
107
+ system_message=OPENAI_SYSTEM_MESSAGE,
108
+ max_tokens=OPENAI_MAX_TOKENS,
109
+ temperature=OPENAI_TEMPERATURE,
110
+ top_p=OPENAI_TOP_P
111
  )
112
  return response
113