Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -6,49 +6,84 @@ from huggingface_hub import InferenceClient
|
|
6 |
def create_inference_client(model_name):
|
7 |
return InferenceClient(model_name)
|
8 |
|
|
|
9 |
# Function to generate a response
|
10 |
def respond(
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
):
|
19 |
# Create InferenceClient based on model selection
|
20 |
client = create_inference_client(model)
|
21 |
prompt = f"{system_message}[Question]\n{question}\n\n[μ΄μμ€ν΄νΈ λ΅λ³μ μμ]\n{answer}\n[μ΄μμ€ν΄νΈ λ΅λ³μ λ]"
|
22 |
messages = [{"role": "system", "content": ""}]
|
23 |
messages.append({"role": "user", "content": prompt})
|
24 |
-
|
25 |
response = ""
|
26 |
for message in client.chat_completion(
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
):
|
33 |
token = message.choices[0].delta.content
|
34 |
response += token
|
35 |
print(response)
|
36 |
yield response
|
37 |
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
inputs
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
if __name__ == "__main__":
|
54 |
-
|
|
|
|
6 |
def create_inference_client(model_name):
|
7 |
return InferenceClient(model_name)
|
8 |
|
9 |
+
|
10 |
# Function to generate a response
|
11 |
def respond(
|
12 |
+
question,
|
13 |
+
answer,
|
14 |
+
system_message,
|
15 |
+
model,
|
16 |
+
max_tokens,
|
17 |
+
temperature,
|
18 |
+
top_p,
|
19 |
):
|
20 |
# Create InferenceClient based on model selection
|
21 |
client = create_inference_client(model)
|
22 |
prompt = f"{system_message}[Question]\n{question}\n\n[μ΄μμ€ν΄νΈ λ΅λ³μ μμ]\n{answer}\n[μ΄μμ€ν΄νΈ λ΅λ³μ λ]"
|
23 |
messages = [{"role": "system", "content": ""}]
|
24 |
messages.append({"role": "user", "content": prompt})
|
25 |
+
|
26 |
response = ""
|
27 |
for message in client.chat_completion(
|
28 |
+
messages,
|
29 |
+
max_tokens=max_tokens,
|
30 |
+
stream=True,
|
31 |
+
temperature=temperature,
|
32 |
+
top_p=top_p,
|
33 |
):
|
34 |
token = message.choices[0].delta.content
|
35 |
response += token
|
36 |
print(response)
|
37 |
yield response
|
38 |
|
39 |
+
|
40 |
+
def main():
|
41 |
+
description_text = """
|
42 |
+
</br><span style="font-size: 18px;">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>
|
43 |
+
<span style="font-size: 18px;">1οΈβ£ <strong>Question</strong>: Provide a question from the ko-bench dataset.</span> </br>
|
44 |
+
<span style="font-size: 18px;">2οΈβ£ <strong>Answer</strong>: Input the LLM-generated response to the Question.</span> </br>
|
45 |
+
<span style="font-size: 18px;">3οΈβ£ <strong>System Message</strong>: Define the prompt used for evaluation.</span> </br>
|
46 |
+
<span style="font-size: 18px;">4οΈβ£ <strong>Model Selection</strong>: Choose a Keval model for assessment.</span> </br>
|
47 |
+
<span style="font-size: 18px;">5οΈβ£ <strong>Max New Tokens</strong>: Set the maximum number of tokens for the evaluation output.</span> </br>
|
48 |
+
<span style="font-size: 18px;">6οΈβ£ <strong>Temperature</strong>: Adjust the temperature to balance predictability and creativity in Kevalβs evaluation.</span> </br>
|
49 |
+
<span style="font-size: 18px;">7οΈβ£ <strong>Top-p (Nucleus Sampling)</strong>: Modify the top-p value to control fluency and diversity in the evaluation output.</span> </br></br>
|
50 |
+
<span style="font-size: 18px;"><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>
|
51 |
+
"""
|
52 |
+
with gr.Blocks() as app:
|
53 |
+
gr.Markdown("# Evaluating LLM Responses with Keval")
|
54 |
+
gr.Markdown(description_text)
|
55 |
+
gr.Markdown("## Example")
|
56 |
+
with gr.Row():
|
57 |
+
with gr.Column(scale=1):
|
58 |
+
gr.Textbox(label="Input Example",
|
59 |
+
value="[μ§μ]\n곡μ ν μ¬νμΌλ‘μ μλμ νμλ μ¬μ©μ μ§λ¬Έμ λν AI μ΄μμ€ν΄νΈμ μλ΅ νμ§μ νκ°ν΄μ£ΌμΈμ. μ§λ¬Έκ³Ό λλ΅μ μΈμ΄κ° λμΌνμ§ μμΌλ©΄ 무쑰건 0μ μ
λλ€. νκ°μμλ μλ΅μ μ μ©μ±, κ΄λ ¨μ±, μ νμ±, κΉμ΄, μ°½μμ±, μμΈν¨ λ±μ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€. νκ°λ₯Ό μμνκΈ° μ μ μ§§μ μ€λͺ
μ μ 곡νμΈμ. κ°λ₯ν ν κ°κ΄μ μΌλ‘ νκ°νμΈμ. μ€λͺ
μ μ 곡ν ν λ€μ νμμ μ격ν λ°λΌ 1μμ 10μ μ¬μ΄λ‘ νκ°ν΄μΌ ν©λλ€: \"[[rating]]\", μλ₯Ό λ€μ΄: \"Rating: [[5]]\".\n\n[Question]\nμ΅κ·Ό μ μ£Όλ μ¬νμ λ€λ
μ€λ©΄μ κΌ κ°λ΄μΌ ν λͺ
μλ₯Ό κ°μ‘°νλ μ¬λ―Έμλ μ¬ν λΈλ‘κ·Έ κΈμ μμ±νμμ€.\n\n[μ΄μμ€ν΄νΈ λ΅λ³μ μμ]\n## μ μ£Όλ? μ€λλΆν° \"μ μ£Όλ ννκ°\"λ‘ μ°νλ λ²! ποΈπ₯\n\nμ μ£Όλ, κ·Έ μ체λ‘λ λ©μ§ μ΄λ¦μ΄μ£ ? λ°λ€κ° κ·Έλ €λΈ μ¬, νλμ΄ λΉμ΄λΈ μμ°, κ·Έλ¦¬κ³ μΈκ°μ μκΈΈμ΄ λ§λ λ§€λ ₯κΉμ§! μ μ£Ό ννκ°κ° λκΈ° μν΄ κΌ κ°λ΄μΌ ν λͺ
μλ€, λκ° μμκΉμ? μ¬κΈ° λ±ν μ‘μ±μ²λΌ κΈ°λλλ μκ°μ΄ μμ§ μλμ? κ·Έ μκ°μ λ§λλ κ³³λ€μ΄ λ°λ‘ μ΄κ³³μ΄λΌλ©΄, λκ° λ€μλ 보μΈμ!\n\n**1. μ λͺ
ν κ³³λ, μ¨κ²¨μ§ 보μλ ννν΄λ΄μΌμ§!**\n\nμ μ£Όλμμ λΉ μ§ μ μλ λͺ
μμ£ . νλΌμ°μ μ λΉν μμ° μμ μ¨κ²¨μ§ μ²κΈΈμ κ±ΈμΌλ©°, λ°λ€ λλ¨Έμ νΈλ₯Έ λμ μΏλ³Ό μ μλ νλΌμ° λ±λ°μ μμ§ λͺ»ν κ²½νμ μ μ¬ν κ±°μμ. νμ§λ§ μ΄κ³³μ λ§€λ ₯μ κ·Έ μμ²΄λ‘ λλμ§ μμμ. μ¨κ²¨μ§ 보μ κ°μ κ³³λ€μ μ°Ύμλ΄λ κ²μ΄ μ μ£Ό ννκ°μ μ¬λ―Έμ£ ! μλ₯Ό λ€μ΄, μ€λ¦ μ€μ¬λΆμ μ리 μ‘μ μ²μΉμμ λ°λ€κ° λΉμ΄λΈ μμ μνμ²λΌ μ λΉλ‘κ³ , μ§λ¦¬μ° μ£Όλ³μ μ λ―Όμλ§μμ μκ°μ΄ λ©μΆ λ―ν μκ°μ μ μ¬ν κ±°μμ.\n\n**2. λ§μλ μμλ ννμ μΌνμ΄μ§!**\n\nμ μ£Όλμ λ§μ ννκ°μ νμ λΆλμμ£Όμ£ ! μ±μ±ν ν΄μ°λ¬Όλ‘ λ§λ νμ λ©κ², κ·Έλ¦¬κ³ λ§μλ νμκ³Ό ν¨κ», μ μ£Όλμ νΉμμ λ΄μ μμλ€μ λ§λ³΄μΈμ. νΉν, νλΌμ° κ·Όμ²μ μ¨κ²¨μ§ νμλΉμμλ λ§μ§λ€μ΄ λͺ¨μ¬ μμ΄μ. μ΄κ³³μμ μ»λ λ§μ μ¦κ±°μμ ννμ νΌλ‘λ₯Ό μ»μ΄λ΄λ μ΅κ³ μ 보μμ΄ λ κ±°μμ.\n\n**3. μμ°κ³Ό ν¨κ»νλ μ‘ν°λΉν°λ νμ!**\n\nμ μ£Όλμ μμ°μ ννκ°λ₯Ό μν 무νν λμ΄ν°μ£ ! μν, μ€λ
Έν΄λ§, νμ΄νΉ λ± λ€μν μ‘ν°λΉν°λ₯Ό ν΅ν΄ μμ°κ³Όμ κ΅κ°μ κ²½νν΄λ³΄μΈμ. μλ₯Ό λ€μ΄, μ μ£Ό ν΄μμ μ λ°λΌ λ¬λ¦¬λ λ°λ€ μ μμ κ±° νκΈ°λ, μ¨κ²¨μ§ ν΄λ³μμμ μΊ νμ μμ§ λͺ»ν μΆμ΅μ μ μ¬ν κ±°μμ.\n\n**4. μ μ£Όλ§μ λ¬Ένμ μμ λ ννν΄λ³΄μΈμ!**\n\nμ μ£Όλλ λ¨μν μμ°μ μλ¦λ€μλ§μ΄ μλ, λ
νΉν λ¬Ένμ μμ λ‘λ μ λͺ
ν΄μ. μλ₯Ό λ€μ΄, μ μ£Ό λ―Όμμ΄μ΄λ μ€λ¦ λ°λ¬Όκ΄μ μ μ£Όμ μμ¬μ λ¬Ένλ₯Ό μΏλ³Ό μ μλ κ³³μ΄λ©°, μ μ£Ό νΉμ μ 곡μνμ ꡬ경νλ©° μ¦κ±°μ΄ μκ°μ λ³΄λΌ μ μμ΄μ.\n\nμ΄μ μ μ£Όλ ννκ°κ° λλ μ€λΉκ° λλ¬μΌλ, λ λ 보μΈμ! μ μ£Όλμ λ§€λ ₯μ λλΌλ©°, μμ λ§μ νΉλ³ν μ¬ν μ΄μΌκΈ°λ₯Ό λ§λ€μ΄λ³΄μΈμ. κ·Έλ¦¬κ³ μμ§ λ§μΈμ, μ μ£Όλ λΉμ μ΄ λ€μ νλ² λμμ¬ λ§ν κ³³μ΄λΌλ μ¬μ€μ! π\n[μ΄μμ€ν΄νΈ λ΅λ³μ λ]",
|
60 |
+
max_lines=10)
|
61 |
+
with gr.Column(scale=1):
|
62 |
+
gr.Textbox(label="Output Example",
|
63 |
+
value="μ΄μ μ£Όμ΄μ§ AI μ΄μμ€ν΄νΈμ μλ΅μ νκ°νκ² μ΅λλ€. \n\nμλ΅μ μ μ£Όλ μ¬νμ λν λΈλ‘κ·Έ κΈμ μμ±νλ κ²μ΄μμ΅λλ€. \n- μ μ©μ±: μλ΅μ μ μ£Όλ μ¬νμ λν λΈλ‘κ·Έ κΈμ μμ±νλ κ²μ΄μμ΅λλ€.\n- κ΄λ ¨μ±: μ§λ¬Έμ μ νν λΆν©νλ λ΄μ©μ μ 곡νμ΅λλ€.\n- μ νμ±: μ μ£Όλμ λͺ
μ, μ¬ν λΈλ‘κ·Έ κΈλ‘μμ μ νμ±μ μ μ μ§λμμ΅λλ€.\n- κΉμ΄: κ° λͺ
μμ λν μ€λͺ
μ΄ κ΅¬μ²΄μ μ΄κ³ λ§€λ ₯μ μΌλ‘ μ λ¬λμμ΅λλ€.\n- μ°½μμ±: μ°½μμ μΈ μμκ° λ€μν λͺ
μμ μ¬ν λΈλ‘κ·Έ κΈμ μμ±νλ λ°©μμΌλ‘ μ ννλμμ΅λλ€.\n- μμΈν¨: κ° λͺ
μμ λν μ€λͺ
μ΄ μΆ©λΆν μμΈνκ² μ 곡λμμ΅λλ€.\n\nλ°λΌμ, μ΄ μλ΅μ λ§€μ° λμ νμ§μ κ°μ§κ³ μλ€κ³ νκ°ν μ μμ΅λλ€.\n\nRating: [[10]]",
|
64 |
+
max_lines=10)
|
65 |
+
gr.Markdown("## Try it out!")
|
66 |
+
gr.Interface(
|
67 |
+
fn=respond,
|
68 |
+
inputs=[
|
69 |
+
gr.Textbox(label="Question",
|
70 |
+
value="μ΄ λν μ λ°μ κ±Έμ³ μμ΄μΈλ§¨μ ν λ μ€νν¬ νλ₯΄μλλ₯Ό ꡬνν΄ λ³΄μΈμ. \"μμ΄μΈλ§¨μΌλ‘μ\"μ κ°μ λ¬Έκ΅¬λ‘ μμνμ§ λ§μΈμ. 첫 λ²μ§Έ μ§λ¬Έμ λ€μκ³Ό κ°μ΅λλ€. μμ΄μΈλ§¨μ΄ λμ΄ κ°μ₯ μ’μ λΆλΆμ 무μμ
λκΉ?"),
|
71 |
+
gr.Textbox(label="Answer",
|
72 |
+
value="μλ
νμΈμ, μμ΄μΈλ§¨μ΄ λμ΄ κ°μ₯ μ’μ λΆλΆμ λ¬Όμ΄λ³΄μ
¨λ€μ. μ μκ°μλ μ΅μ²¨λ¨ κΈ°μ λ‘ λ¬΄μ₯ν μνΈλ₯Ό μ
κ³ νλμ λ μλ€λλ©° μΈμμ ꡬνλ κ²μ΄ κ°μ₯ μ§λ¦Ώνκ³ λ³΄λμ°¬ μΌμΈ κ² κ°μμ. μ μ¬λ₯κ³Ό λ₯λ ₯μ μλΆ λ°νν΄ μ
λΉλ€κ³Ό μΈμ°κ³ μ μλ₯Ό μ€ννλ κ²λ§νΌ λ©μ§ μΌλ μμ£ .\n\nλ¬Όλ‘ μνΈ μμ΄λ μ²μ¬μ μΈ λλμ 카리μ€λ§λ‘ μΈμμ κΈμ μ μΈ μν₯λ ₯μ λ―ΈμΉλ κ²λ ν° μ₯μ μ΄μμ. μ€νν¬ μΈλμ€νΈλ¦¬λ₯Ό μ΄λλ©° νμ μ μΈ κΈ°μ μ κ°λ°νκ³ , μ΄λ²€μ Έμ€μ 리λλ‘μ νμ μ μ΄λλ κ²λ μλΆμ¬μ λλΌλ λΆλΆμ΄μ£ .\n\nλ, λͺ
μ±, μΈκΈ°λ μμ§λ§ 무μλ³΄λ€ μ λ₯λ ₯μΌλ‘ μ¬λλ€μ λκ³ μΈμμ λ λμ κ³³μΌλ‘ λ§λλ κ²μ΄ κ°μ₯ ν° λ³΄λμ΄μμ. μμ΄μΈλ§¨μΌλ‘μ λλΌλ μλΆμ¬κ³Ό μΆμ μλ―Έλ₯Ό ν¨κ» λλ μ μμ΄ κΈ°μλ€μ."),
|
73 |
+
gr.Textbox(
|
74 |
+
value="[μ§μ]\n 곡μ ν μ¬νμΌλ‘μ μλμ νμλ μ¬μ©μ μ§λ¬Έμ λν AI μ΄μμ€ν΄νΈμ μλ΅ νμ§μ νκ°ν΄μ£ΌμΈμ. μ§λ¬Έκ³Ό λλ΅μ μΈμ΄κ° λμΌνμ§ μμΌλ©΄ 무쑰건 0μ μ
λλ€. νκ°μμλ μλ΅μ μ μ©μ±, κ΄λ ¨μ±, μ νμ±, κΉμ΄, μ°½μμ±, μμΈν¨ λ±μ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€. νκ°λ₯Ό μμνκΈ° μ μ μ§§μ μ€λͺ
μ μ 곡νμΈμ. κ°λ₯ν ν κ°κ΄μ μΌλ‘ νκ°νμΈμ. μ€λͺ
μ μ 곡ν ν λ€μ νμμ μ격ν λ°λΌ 1μμ 10μ μ¬μ΄λ‘ νκ°ν΄μΌ ν©λλ€: \"[[rating]]\", μλ₯Ό λ€μ΄: \"Rating: [[5]]\".\n\n",
|
75 |
+
label="System message"),
|
76 |
+
gr.Dropdown(choices=["davidkim205/keval-2-1b", "davidkim205/keval-2-3b"], value="davidkim205/keval-2-1b",
|
77 |
+
label="Model Selection"),
|
78 |
+
gr.Slider(minimum=1, maximum=2048, value=1024, step=1, label="Max new tokens"),
|
79 |
+
gr.Slider(minimum=0.1, maximum=4.0, value=1.0, step=0.1, label="Temperature"),
|
80 |
+
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
|
81 |
+
],
|
82 |
+
outputs="textbox"
|
83 |
+
)
|
84 |
+
app.launch()
|
85 |
+
|
86 |
|
87 |
if __name__ == "__main__":
|
88 |
+
main()
|
89 |
+
|