Spaces:
Sleeping
Sleeping
File size: 8,151 Bytes
b34f0d5 7dcc8af f706b9e b34f0d5 8144da3 c65ce97 f706b9e f1d1009 f706b9e f1d1009 f706b9e c753d25 092cc1c c753d25 f706b9e 092cc1c f706b9e 092cc1c c753d25 092cc1c c753d25 092cc1c c753d25 092cc1c c753d25 f706b9e f9b088b f706b9e f9b088b b34f0d5 f706b9e 5d836e7 f706b9e 68e255c f706b9e c753d25 f706b9e 958e155 f9b088b b34f0d5 79d0511 |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
import gradio as gr
from huggingface_hub import InferenceClient
import openai
import anthropic
from typing import Optional
#############################
# [기본코드] - 수정/삭제 불가
#############################
# 제거할 모델들을 MODELS 사전에서 제외
MODELS = {
"Zephyr 7B Beta": "HuggingFaceH4/zephyr-7b-beta",
"Meta Llama 3.1 8B": "meta-llama/Meta-Llama-3.1-8B-Instruct",
"Meta-Llama 3.1 70B-Instruct": "meta-llama/Meta-Llama-3.1-70B-Instruct",
"Microsoft": "microsoft/Phi-3-mini-4k-instruct",
"Mixtral 8x7B": "mistralai/Mistral-7B-Instruct-v0.3",
"Mixtral Nous-Hermes": "NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO",
"Aya-23-35B": "CohereForAI/aya-23-35B"}
# Cohere Command R+ 모델 ID 정의
COHERE_MODEL = "CohereForAI/c4ai-command-r-plus-08-2024"
def get_client(model_name, hf_token):
"""
모델 이름에 맞춰 InferenceClient 생성.
hf_token을 UI에서 입력받은 값으로 사용하도록 변경.
"""
if not hf_token:
raise ValueError("HuggingFace API 토큰이 필요합니다.")
if model_name in MODELS:
model_id = MODELS[model_name]
elif model_name == "Cohere Command R+":
model_id = COHERE_MODEL
else:
raise ValueError("유효하지 않은 모델 이름입니다.")
return InferenceClient(model_id, token=hf_token)
def respond_hf_qna(
question: str,
model_name: str,
max_tokens: int,
temperature: float,
top_p: float,
system_message: str,
hf_token: str
):
"""
HuggingFace 모델(Zephyr 등)에 대해 한 번의 질문(question)에 대한 답변을 반환하는 함수.
"""
try:
client = get_client(model_name, hf_token)
except ValueError as e:
return f"오류: {str(e)}"
messages = [
{"role": "system", "content": system_message},
{"role": "user", "content": question}
]
try:
response = client.chat_completion(
messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
stream=False,
)
assistant_message = response.choices[0].message.content
return assistant_message
except Exception as e:
return f"오류가 발생했습니다: {str(e)}"
def respond_cohere_qna(
question: str,
system_message: str,
max_tokens: int,
temperature: float,
top_p: float,
hf_token: str
):
"""
Cohere Command R+ 모델을 이용해 한 번의 질문(question)에 대한 답변을 반환하는 함수.
"""
model_name = "Cohere Command R+"
try:
client = get_client(model_name, hf_token)
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)}"
def respond_chatgpt_qna(
question: str,
system_message: str,
max_tokens: int,
temperature: float,
top_p: float,
openai_token: str
):
#############################
# [기본코드] UI 부분 - 수정/삭제 불가
#############################
with gr.Blocks() as demo:
gr.Markdown("# LLM 플레이그라운드")
# 한 줄에 세 토큰 텍스트박스 배치
with gr.Row():
hf_token_box = gr.Textbox(
label="HuggingFace 토큰",
type="password",
placeholder="HuggingFace API 토큰을 입력하세요..."
)
openai_token_box = gr.Textbox(
label="OpenAI 토큰",
type="password",
placeholder="OpenAI API 토큰을 입력하세요..."
)
claude_token_box = gr.Textbox(
label="Claude 토큰",
type="password",
placeholder="Claude API 토큰을 입력하세요...",
show_copy_button=False
)
deepseek_token_box = gr.Textbox(
label="DeepSeek 토큰",
type="password",
placeholder="DeepSeek API 토큰을 입력하세요..."
)
#################
# Cohere Command R+ 탭
#################
with gr.Tab("Cohere Command R+"):
cohere_input1 = gr.Textbox(label="입력1", lines=1)
cohere_input2 = gr.Textbox(label="입력2", lines=1)
cohere_input3 = gr.Textbox(label="입력3", lines=1)
cohere_input4 = gr.Textbox(label="입력4", lines=1)
cohere_input5 = gr.Textbox(label="입력5", lines=1)
cohere_answer_output = gr.Textbox(label="결과", lines=5, interactive=False)
with gr.Accordion("고급 설정 (Cohere)", open=False):
cohere_system_message = gr.Textbox(
value="""
##[기본규칙]
1. 반드시 한국어(한글)로 작성하라.
2. 너는 가장 주목받는 마케터이며 블로그 마케팅 전문가이다.
3. 특히 너는 '정보성(Informative)' 전문 블로그 마케팅 전문가이다.
4. 정보 제공에 초점을 맞추어 작성한다.
##[텍스트 작성 규칙]
1. 소주제를 5개로 구분하여 2000자 이상되도록 작성하라.
2. 전체 맥락을 이해하고 문장의 일관성을 유지하라.
3. 절대로 참고글을 한문장 이상 그대로 출력하지 말 것.
4. 주제와 상황에 맞는 적절한 어휘를 선택하라.
5. 한글 어휘의 난이도는 쉽게 작성하라.
6. 절대 문장의 끝에 '답니다'를 사용하지 말 것.
###[정보성 블로그 작성 규칙]
1. 독자가 얻고자 하는 유용한 정보와 흥미로운 정보를 제공하도록 작성하라.
2. 독자의 공감을 이끌어내고 궁금증을 해결하도록 작성하라.
3. 독자의 관심사를 충족시키도록 작성하라.
4. 독자에게 이득이 되는 정보를 작성하라.
##[제외 규칙]
1. 반드시 비속어 및 욕설(expletive, abusive language, slang)은 제외하라.
2. 반드시 참고글의 링크(URL)는 제외하라.
3. 참고글에서 '링크를 확인해주세요'와 같은 링크 이동의 문구는 제외하라.
4. 참고글에 있는 작성자, 화자, 유튜버, 기자(Writer, speaker, YouTuber, reporter)의 이름, 애칭, 닉네임(Name, Nkickname)은 반드시 제외하라.
5. 반드시 문장의 끝부분이 어색한 한국어 표현은 제외하라('예요', '답니다', '해요', '해주죠', '됐죠', '됐어요', '고요' 등.)
""",
label="System Message",
lines=3
)
cohere_max_tokens = gr.Slider(minimum=100, maximum=10000, value=4000, step=100, label="Max Tokens")
cohere_temperature = gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.1, label="Temperature")
cohere_top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-P")
cohere_submit_button = gr.Button("전송")
def merge_and_call_cohere(i1, i2, i3, i4, i5, sys_msg, mt, temp, top_p_, hf_token):
question = " ".join([i1, i2, i3, i4, i5])
return respond_cohere_qna(
question=question,
system_message=sys_msg,
max_tokens=mt,
temperature=temp,
top_p=top_p_,
hf_token=hf_token
)
cohere_submit_button.click(
fn=merge_and_call_cohere,
inputs=[
cohere_input1, cohere_input2, cohere_input3, cohere_input4, cohere_input5,
cohere_system_message,
cohere_max_tokens,
cohere_temperature,
cohere_top_p,
hf_token_box
],
outputs=cohere_answer_output
)
#############################
# 메인 실행부
#############################
if __name__ == "__main__":
demo.launch()
|