Spaces:
Sleeping
Sleeping
File size: 13,028 Bytes
276eea4 9b70eb1 5c085a0 276eea4 1080e1f 5c085a0 276eea4 1080e1f 276eea4 5c085a0 1080e1f 276eea4 1080e1f 276eea4 5c085a0 276eea4 1080e1f 9568afa 6b776ea 9568afa 6b776ea 9568afa 1080e1f 97263c7 3865332 97263c7 1080e1f 6b776ea 9568afa 6b776ea 97263c7 6b776ea 1080e1f 97263c7 3865332 97263c7 1080e1f 97263c7 3865332 97263c7 1080e1f 97263c7 1080e1f 276eea4 3865332 |
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 |
import gradio as gr
from huggingface_hub import InferenceClient
# Function to create an Inference Client based on selected model
def create_inference_client(model_name):
return InferenceClient(model_name)
# Function to generate a response
def respond(
question,
answer,
system_message,
model,
max_tokens,
temperature,
top_p,
):
# Create InferenceClient based on model selection
client = create_inference_client(model)
prompt = f"{system_message}[Question]\n{question}\n\n[μ΄μμ€ν΄νΈ λ΅λ³μ μμ]\n{answer}\n[μ΄μμ€ν΄νΈ λ΅λ³μ λ]"
messages = [{"role": "system", "content": ""}]
messages.append({"role": "user", "content": prompt})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
print(response)
yield response
def main():
description_text1 = """<span style="font-size: 23px;">The keval model is an advanced evaluation model specifically designed to assess Korean language models using the LLM-as-a-judge approach. Unlike traditional evaluation methods that relied on ChatGPT, keval provides an independent and specialized alternative for evaluating Korean LLMs.</span></br>
<span style="font-size: 23px;">keval is based on the Gemma2-9B architecture and has been further optimized using Supervised Fine-Tuning (SFT) and Direct Policy Optimization (DPO). The model is trained on the newly developed Ko-Bench dataset, which is inspired by MT-Bench but adapted to capture Korean linguistic nuances more effectively.</span> </br></br>
"""
description_text2 = """<span style="font-size: 23px;">keval is trained and evaluated using the Ko-Bench dataset, a custom-built benchmark inspired by MT-Bench but specifically tailored for assessing Korean language models. The dataset includes diverse tasks covering a wide range of user scenarios, allowing for a thorough evaluation of: Multi-turn conversation ability, Instruction adherence, Contextual understanding.</span></br></br>
"""
description_text3 = """<span style="font-size: 23px;">keval currently has the following versions available β keval-2-1b, keval-2-3b.</span></br></br>
"""
examples_list = [["μ΅κ·Ό μ μ£Όλ μ¬νμ λ€λ
μ€λ©΄μ κΌ κ°λ΄μΌ ν λͺ
μλ₯Ό κ°μ‘°νλ μ¬λ―Έμλ μ¬ν λΈλ‘κ·Έ κΈμ μμ±νμμ€.","## μ μ£Όλ? μ€λλΆν° \"μ μ£Όλ ννκ°\"λ‘ μ°νλ λ²! ποΈπ₯\n\nμ μ£Όλ, κ·Έ μ체λ‘λ λ©μ§ μ΄λ¦μ΄μ£ ? λ°λ€κ° κ·Έλ €λΈ μ¬, νλμ΄ λΉμ΄λΈ μμ°, κ·Έλ¦¬κ³ μΈκ°μ μκΈΈμ΄ λ§λ 맀λ ₯κΉμ§! μ μ£Ό ννκ°κ° λκΈ° μν΄ κΌ κ°λ΄μΌ ν λͺ
μλ€, λκ° μμκΉμ? μ¬κΈ° λ±ν μ‘μ±μ²λΌ κΈ°λλλ μκ°μ΄ μμ§ μλμ? κ·Έ μκ°μ λ§λλ κ³³λ€μ΄ λ°λ‘ μ΄κ³³μ΄λΌλ©΄, λκ° λ€μλ 보μΈμ!\n\n**1. μ λͺ
ν κ³³λ, μ¨κ²¨μ§ 보μλ ννν΄λ΄μΌμ§!**\n\nμ μ£Όλμμ λΉ μ§ μ μλ λͺ
μμ£ . νλΌμ°μ μ λΉν μμ° μμ μ¨κ²¨μ§ μ²κΈΈμ κ±ΈμΌλ©°, λ°λ€ λλ¨Έμ νΈλ₯Έ λμ μΏλ³Ό μ μλ νλΌμ° λ±λ°μ μμ§ λͺ»ν κ²½νμ μ μ¬ν κ±°μμ. νμ§λ§ μ΄κ³³μ 맀λ ₯μ κ·Έ μμ²΄λ‘ λλμ§ μμμ. μ¨κ²¨μ§ 보μ κ°μ κ³³λ€μ μ°Ύμλ΄λ κ²μ΄ μ μ£Ό ννκ°μ μ¬λ―Έμ£ ! μλ₯Ό λ€μ΄, μ€λ¦ μ€μ¬λΆμ μ리 μ‘μ μ²μΉμμ λ°λ€κ° λΉμ΄λΈ μμ μνμ²λΌ μ λΉλ‘κ³ , μ§λ¦¬μ° μ£Όλ³μ μ λ―Όμλ§μμ μκ°μ΄ λ©μΆ λ―ν μκ°μ μ μ¬ν κ±°μμ.\n\n**2. λ§μλ μμλ ννμ μΌνμ΄μ§!**\n\nμ μ£Όλμ λ§μ ννκ°μ νμ λΆλμμ£Όμ£ ! μ±μ±ν ν΄μ°λ¬Όλ‘ λ§λ νμ λ©κ², κ·Έλ¦¬κ³ λ§μλ νμκ³Ό ν¨κ», μ μ£Όλμ νΉμμ λ΄μ μμλ€μ λ§λ³΄μΈμ. νΉν, νλΌμ° κ·Όμ²μ μ¨κ²¨μ§ νμλΉμμλ λ§μ§λ€μ΄ λͺ¨μ¬ μμ΄μ. μ΄κ³³μμ μ»λ λ§μ μ¦κ±°μμ ννμ νΌλ‘λ₯Ό μ»μ΄λ΄λ μ΅κ³ μ 보μμ΄ λ κ±°μμ.\n\n**3. μμ°κ³Ό ν¨κ»νλ μ‘ν°λΉν°λ νμ!**\n\nμ μ£Όλμ μμ°μ ννκ°λ₯Ό μν 무νν λμ΄ν°μ£ ! μν, μ€λ
Έν΄λ§, νμ΄νΉ λ± λ€μν μ‘ν°λΉν°λ₯Ό ν΅ν΄ μμ°κ³Όμ κ΅κ°μ κ²½νν΄λ³΄μΈμ. μλ₯Ό λ€μ΄, μ μ£Ό ν΄μμ μ λ°λΌ λ¬λ¦¬λ λ°λ€ μ μμ κ±° νκΈ°λ, μ¨κ²¨μ§ ν΄λ³μμμ μΊ νμ μμ§ λͺ»ν μΆμ΅μ μ μ¬ν κ±°μμ.\n\n**4. μ μ£Όλ§μ λ¬Ένμ μμ λ ννν΄λ³΄μΈμ!**\n\nμ μ£Όλλ λ¨μν μμ°μ μλ¦λ€μλ§μ΄ μλ, λ
νΉν λ¬Ένμ μμ λ‘λ μ λͺ
ν΄μ. μλ₯Ό λ€μ΄, μ μ£Ό λ―Όμμ΄μ΄λ μ€λ¦ λ°λ¬Όκ΄μ μ μ£Όμ μμ¬μ λ¬Ένλ₯Ό μΏλ³Ό μ μλ κ³³μ΄λ©°, μ μ£Ό νΉμ μ 곡μνμ ꡬ경νλ©° μ¦κ±°μ΄ μκ°μ λ³΄λΌ μ μμ΄μ.\n\nμ΄μ μ μ£Όλ ννκ°κ° λλ μ€λΉκ° λλ¬μΌλ, λ λ 보μΈμ! μ μ£Όλμ 맀λ ₯μ λλΌλ©°, μμ λ§μ νΉλ³ν μ¬ν μ΄μΌκΈ°λ₯Ό λ§λ€μ΄λ³΄μΈμ. κ·Έλ¦¬κ³ μμ§ λ§μΈμ, μ μ£Όλ λΉμ μ΄ λ€μ νλ² λμμ¬ λ§ν κ³³μ΄λΌλ μ¬μ€μ! π",None, None, None, None, None],
["μ§λ―Όμ λ§€μ° κ±΄κ°νμ§λ§ λ§€μΌ λ³μμ κ°μΌ ν©λλ€. μ΄μ λ 무μμ
λκΉ?","μ§λ―Όμ΄ λ§€μΌ λ³μμ κ°μΌ νλ μ΄μ λ 무μμΈμ§ μ νν μ μ μμ΅λλ€. κ±΄κ° μνμ λν μμΈν μ λ³΄κ° νμν©λλ€. μΌλ°μ μΌλ‘ λ§€μΌ λ³μμ κ°μΌ νλ κ²½μ°λ λ€μκ³Ό κ°μ΅λλ€.\n\n1. μ¬κ°ν μ§λ³μ΄λ λΆμμ μ
μ κ²½μ°: μ€νμμ€μ΄λ μ§μ€ μΉλ£κ° νμν κ²½μ° λ§€μΌ μλ£μ§μ κ΄μ°°κ³Ό μΉλ£κ° νμν μ μμ΅λλ€.\n\n2. λ§μ± μ§νμ μκ³ μλ κ²½μ°: λΉλ¨λ³, κ³ νμ, μ¬μ₯ μ§ν λ± μ§μμ μΈ κ΄λ¦¬κ° νμν λ§μ± μ§νμ μκ³ μλ€λ©΄ μ κΈ°μ μΈ κ²μ§κ³Ό μΉλ£λ₯Ό μν΄ λ§€μΌ λ³μμ κ° μ μμ΅λλ€.\n\n3. μ¬ν μΉλ£κ° νμν κ²½μ°: μ¬κ³ λ μμ ν μ¬ν μΉλ£κ° νμν κ²½μ°, 물리 μΉλ£λ μμ
μΉλ£λ₯Ό μν΄ λ§€μΌ λ³μμ λ°©λ¬Έν μ μμ΅λλ€.\n\n4. μμ°λΆμ κ²½μ°: μμ μ€κΈ°λ νκΈ°μλ νμμ μ°λͺ¨μ κ±΄κ° μνλ₯Ό νμΈνκΈ° μν΄ μ κΈ°μ μΌλ‘ λ³μμ λ°©λ¬Ένλ κ²μ΄ μΌλ°μ μ
λλ€.\n\n5. μ μ κ³Όμ μΉλ£κ° νμν κ²½μ°: μ°μΈμ¦, λΆμ μ₯μ , μΈμ ν μ€νΈλ μ€ μ₯μ λ± μ μ κ±΄κ° λ¬Έμ λ‘ μΈν΄ λ§€μΌ λ³μμ λ°©λ¬Ένμ¬ μλ΄μ΄λ μΉλ£λ₯Ό λ°μ μ μμ΅λλ€.\n\nμ§λ―Όμ κ²½μ°, κ±΄κ° μνμ λν μΆκ°μ μΈ μ λ³΄κ° νμν©λλ€. λ§€μΌ λ³μμ κ°μΌ νλ μ΄μ λ₯Ό μ νν νμ
νκΈ° μν΄, λ΄λΉ μμ¬λ μλ£μ§κ³Ό μμνλ κ²μ΄ μ’μ΅λλ€.",None, None, None, None, None],
["λ€μμ λ μ
λ ₯ λ¬Έμμ΄μ κ°μ₯ κΈ΄ κ³΅ν΅ λΆλΆ μμ΄μ κΈΈμ΄λ₯Ό μ°Ύλ Python ν¨μμ
λλ€. μ΄ ν¨μμμ λ²κ·Έλ₯Ό μλ³ν μ μλμ?\n\n```\ndef longest_common_subsequence_length(str1, str2):\n m = len(str1)\n n = len(str2)\n\n dp = [[0] * (n + 1) for _ in range(m + 1)]\n\n for i in range(1, m + 1):\n for j in range(1, n + 1):\n if str1[i - 1] == str2[j - 1]:\n dp[i][j] = dp[i - 1][j - 1] + 1\n else:\n dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])\n\n return dp[m][n]\n```", "μ 곡λ μ½λμλ λͺ
λ°±ν λ²κ·Έλ μμ΄ λ³΄μ
λλ€. μ΄ ν¨μλ λ λ¬Έμμ΄μ κ°μ₯ κΈ΄ κ³΅ν΅ λΆλΆ μμ΄(LCS)μ κΈΈμ΄λ₯Ό μ¬λ°λ₯΄κ² κ³μ°ν©λλ€. λ€μκ³Ό κ°μ μ£Όμ λ¨κ³λ₯Ό λ°λ¦
λλ€:\n\n1. λ λ¬Έμμ΄μ κΈΈμ΄μ κΈ°λ°νμ¬ 2D DP ν
μ΄λΈμ μ΄κΈ°νν©λλ€.\n2. λ λ¬Έμμ΄μ μννλ©΄μ DP ν
μ΄λΈμ μ±μλλ€.\n3. λ¬Έμκ° μΌμΉνλ©΄ λκ°μ μΌμͺ½ μ κ°μ 1μ λν©λλ€.\n4. λ¬Έμκ° μΌμΉνμ§ μμΌλ©΄ μΌμͺ½κ³Ό μμͺ½ κ° μ€ μ΅λκ°μ μ νν©λλ€.\n5. λ§μ§λ§μΌλ‘ DP ν
μ΄λΈμ μ€λ₯Έμͺ½ νλ¨ κ°μ λ°νν©λλ€.\n\nμ΄ μκ³ λ¦¬μ¦μ μ ννκ³ ν¨μ¨μ μ
λλ€. μκ° λ³΅μ‘λλ O(m*n)μ΄κ³ κ³΅κ° λ³΅μ‘λλ O(m*n)μ
λλ€.\n\nλ€λ§, μ½λμ κ°λ
μ±κ³Ό ν¨μ¨μ±μ λμ΄κΈ° μν΄ λ€μκ³Ό κ°μ κ°μ μ¬νμ μ μν μ μμ΅λλ€:\n\n1. λ³μλͺ
μ λ λͺ
ννκ² μ§μ ν μ μμ΅λλ€ (μ: `m`μ `len_str1`λ‘, `n`μ `len_str2`λ‘).\n2. μ£Όμμ μΆκ°νμ¬ μκ³ λ¦¬μ¦μ κ° λ¨κ³λ₯Ό μ€λͺ
ν μ μμ΅λλ€.\n3. κ³΅κ° ν¨μ¨μ±μ μν΄ 2D λ°°μ΄ λμ 1D λ°°μ΄μ μ¬μ©ν μ μμ΅λλ€ (μ΄λ λ 볡μ‘ν ꡬνμ΄ νμν©λλ€).\n\nνμ§λ§ νμ¬ μ½λλ λ¬Έμ μμ΄ μλνλ©° LCSμ κΈΈμ΄λ₯Ό μ νν κ³μ°ν©λλ€.", None, None, None, None, None]
]
with gr.Blocks() as app:
gr.Markdown("# π€ Evaluating LLM Responses with keval")
gr.Markdown("")
gr.Markdown("## | [Model](https://huggingface.co/collections/davidkim205/keval-2-67ac5400f5eef4984cc5dbbb) | [Paper](https://davidkim205.github.io/keval.html) | [Code](https://github.com/davidkim205/simple-keval) |")
gr.Markdown("")
gr.Markdown("## What Is keval?")
gr.Markdown(description_text1)
gr.Markdown("## Benchmark and Dataset for keval")
gr.Markdown(description_text2)
gr.Markdown("## Available keval Models")
gr.Markdown(description_text3)
gr.HTML("""<style>
#submit-btn {
background-color: #FF7F00;
color: white;
border: none;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
}
#submit-btn:hover {
background-color: #DA8A67;
}
</style>
""")
gr.Markdown("## π±οΈ Try it out!")
with gr.Row():
with gr.Column(scale=1):
text1 = gr.Textbox(label="Question", value="μ΄ λν μ λ°μ κ±Έμ³ μμ΄μΈλ§¨μ ν λ μ€νν¬ νλ₯΄μλλ₯Ό ꡬνν΄ λ³΄μΈμ. \"μμ΄μΈλ§¨μΌλ‘μ\"μ κ°μ λ¬Έκ΅¬λ‘ μμνμ§ λ§μΈμ. 첫 λ²μ§Έ μ§λ¬Έμ λ€μκ³Ό κ°μ΅λλ€. μμ΄μΈλ§¨μ΄ λμ΄ κ°μ₯ μ’μ λΆλΆμ 무μμ
λκΉ?")
text2 = gr.Textbox(label="Answer", value="μλ
νμΈμ, μμ΄μΈλ§¨μ΄ λμ΄ κ°μ₯ μ’μ λΆλΆμ λ¬Όμ΄λ³΄μ
¨λ€μ. μ μκ°μλ μ΅μ²¨λ¨ κΈ°μ λ‘ λ¬΄μ₯ν μνΈλ₯Ό μ
κ³ νλμ λ μλ€λλ©° μΈμμ ꡬνλ κ²μ΄ κ°μ₯ μ§λ¦Ώνκ³ λ³΄λμ°¬ μΌμΈ κ² κ°μμ. μ μ¬λ₯κ³Ό λ₯λ ₯μ μλΆ λ°νν΄ μ
λΉλ€κ³Ό μΈμ°κ³ μ μλ₯Ό μ€ννλ κ²λ§νΌ λ©μ§ μΌλ μμ£ .\n\nλ¬Όλ‘ μνΈ μμ΄λ μ²μ¬μ μΈ λλμ 카리μ€λ§λ‘ μΈμμ κΈμ μ μΈ μν₯λ ₯μ λ―ΈμΉλ κ²λ ν° μ₯μ μ΄μμ. μ€νν¬ μΈλμ€νΈλ¦¬λ₯Ό μ΄λλ©° νμ μ μΈ κΈ°μ μ κ°λ°νκ³ , μ΄λ²€μ Έμ€μ 리λλ‘μ νμ μ μ΄λλ κ²λ μλΆμ¬μ λλΌλ λΆλΆμ΄μ£ .\n\nλ, λͺ
μ±, μΈκΈ°λ μμ§λ§ 무μλ³΄λ€ μ λ₯λ ₯μΌλ‘ μ¬λλ€μ λκ³ μΈμμ λ λμ κ³³μΌλ‘ λ§λλ κ²μ΄ κ°μ₯ ν° λ³΄λμ΄μμ. μμ΄μΈλ§¨μΌλ‘μ λλΌλ μλΆμ¬κ³Ό μΆμ μλ―Έλ₯Ό ν¨κ» λλ μ μμ΄ κΈ°μλ€μ.")
text3 = gr.Textbox(label="System message", value="[μ§μ]\n 곡μ ν μ¬νμΌλ‘μ μλμ νμλ μ¬μ©μ μ§λ¬Έμ λν AI μ΄μμ€ν΄νΈμ μλ΅ νμ§μ νκ°ν΄μ£ΌμΈμ. μ§λ¬Έκ³Ό λλ΅μ μΈμ΄κ° λμΌνμ§ μμΌλ©΄ 무쑰건 0μ μ
λλ€. νκ°μμλ μλ΅μ μ μ©μ±, κ΄λ ¨μ±, μ νμ±, κΉμ΄, μ°½μμ±, μμΈν¨ λ±μ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€. νκ°λ₯Ό μμνκΈ° μ μ 짧μ μ€λͺ
μ μ 곡νμΈμ. κ°λ₯ν ν κ°κ΄μ μΌλ‘ νκ°νμΈμ. μ€λͺ
μ μ 곡ν ν λ€μ νμμ μ격ν λ°λΌ 1μμ 10μ μ¬μ΄λ‘ νκ°ν΄μΌ ν©λλ€: \"[[rating]]\", μλ₯Ό λ€μ΄: \"Rating: [[5]]\".\n\n")
dropdown = gr.Dropdown(choices=["davidkim205/keval-2-1b", "davidkim205/keval-2-3b"], value="davidkim205/keval-2-1b", label="Model Selection")
slider1 = gr.Slider(label="Max new tokens", minimum=1, maximum=2048, value=1024, step=1)
slider2 = gr.Slider(label="Temperature", minimum=0.1, maximum=4.0, value=1.0, step=0.1)
slider3 = gr.Slider(label="Top-p (nucleus sampling)", minimum=0.1, maximum=1.0, value=0.95, step=0.05)
submit = gr.Button("Submit", elem_id="submit-btn")
with gr.Column(scale=1):
output = gr.Textbox(label="Output")
gr.Markdown("")
gr.Markdown("## Examples")
gr.Examples(label="Input Example",
examples=examples_list,
inputs=[text1, text2, text3, dropdown, slider1, slider2, slider3])
submit.click(
fn=respond,
inputs=[text1, text2, text3, dropdown, slider1, slider2, slider3],
outputs=output
)
app.launch()
if __name__ == "__main__":
main()
|