Spaces:
Sleeping
Sleeping
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() | |