Spaces:
Sleeping
Sleeping
File size: 12,730 Bytes
276eea4 9b70eb1 5c085a0 276eea4 1080e1f 5c085a0 276eea4 1080e1f 276eea4 5c085a0 1080e1f 276eea4 1080e1f 276eea4 5c085a0 276eea4 1080e1f 97263c7 1080e1f 97263c7 3865332 97263c7 1080e1f 97263c7 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 |
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_text = """
</br><span style="font-size: 22px;">Use <strong>Keval</strong>, an offline-ready evaluation framework for Korean AI models, to assess whether an LLM-generated response is relevant and appropriate for a given question. Submit the inputs to generate the evaluation results.</span></br></br>
<span style="font-size: 22px;">1οΈβ£ <strong>Question</strong>: Provide a question from the ko-bench dataset.</span> </br>
<span style="font-size: 22px;">2οΈβ£ <strong>Answer</strong>: Input the LLM-generated response to the Question.</span> </br>
<span style="font-size: 22px;">3οΈβ£ <strong>System Message</strong>: Define the prompt used for evaluation.</span> </br>
<span style="font-size: 22px;">4οΈβ£ <strong>Model Selection</strong>: Choose a Keval model for assessment.</span> </br>
<span style="font-size: 22px;">5οΈβ£ <strong>Max New Tokens</strong>: Set the maximum number of tokens for the evaluation output.</span> </br>
<span style="font-size: 22px;">6οΈβ£ <strong>Temperature</strong>: Adjust the temperature to balance predictability and creativity in Kevalβs evaluation.</span> </br>
<span style="font-size: 22px;">7οΈβ£ <strong>Top-p (Nucleus Sampling)</strong>: Modify the top-p value to control fluency and diversity in the evaluation output.</span> </br></br>
<span style="font-size: 22px;"><a href="https://huggingface.co/davidkim205/keval-2-9b" target="_blank" style="text-decoration: none; color: #000080;">Keval model link << Click here!</a></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(description_text)
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()
|