Spaces:
Sleeping
Sleeping
| 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( | |
| message, | |
| system_message, | |
| model, | |
| max_tokens, | |
| temperature, | |
| top_p, | |
| ): | |
| # Create InferenceClient based on model selection | |
| client = create_inference_client(model) | |
| messages = [{"role": "system", "content": system_message}] | |
| messages.append({"role": "user", "content": message}) | |
| 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 kgrammar model is a state-of-the-art language assessment model designed to evaluate Korean sentences, specifically focusing on detecting instances where a response deviates by incorporating foreign languages or mixing multiple languages within a sentence.</span></br> | |
| <span style="font-size: 23px;">Built on the Gemma-2-9B architecture, kgrammar aims to ensure language consistency and clarity in Korean text, making it a valuable tool for assessing and refining language models that generate Korean responses.</span> </br></br> | |
| """ | |
| description_text2 = """<span style="font-size: 23px;">The kgrammar-testset was created to train and validate the kgrammar model. This dataset was generated using GPT-4o, incorporating predefined prompts designed to introduce grammatical errors into responses when a question was given.</span></br> | |
| <span style="font-size: 23px;">To ensure a balanced distribution, the dataset consists of 50% general questions, 25% math-related questions, 25% coding-related questions. This structure helps prevent mathematical expressions and code from being mistakenly identified as language errors.</span> </br></br> | |
| """ | |
| description_text3 = """<span style="font-size: 23px;">kgrammar currently has the following versions available → kgrammar-2-1b, kgrammar-2-3b.</span></br></br> | |
| """ | |
| examples_list = [["우선, 성인 티켓의 가격은 $4입니다. 총 판매된 티켓 수는 59장이며, 학생 티켓은 9장입니다. 我们需要计算学生票价。성인 티켓은 50장이 판매되었으므로, 성인 티켓으로 얻은 수익은 50 * 4 = $200입니다. Total revenue是 $222.50, 所以学生票的收入为 $222.50 - $200 = $22.50。俄语로 说, 每张学生票的价格 = $22.50 ÷ 9 = $2.50。학생 티켓의 가격은 2.5ดอลล่าครับ.", "한국어 문맥상 부자연스러운 부분을 찾으시오. 오류 문장과 개수는 <incorrect grammar> </incorrect grammar> tag, 즉 <incorrect grammar> - 오류 문장과 설명 </incorrect grammar> 안에 담겨 있으며, <wrong count> </wrong count> tag, 즉 <wrong count> 오류 개수 </wrong count> 이다.", None, None, None, None], | |
| ["슈트라우스의 음악에서 모차르트의 음악 형태를 띈 악장의 끝에는 호른이 중심적으로 연주됩니다. Это инструмент, который связывает эпохи и стили, создавая неповторимую атмосферу и оставляя слушателей в восхищении.", "한국어 문맥상 부자연스러운 부분을 찾으시오. 오류 문장과 개수는 <incorrect grammar> </incorrect grammar> tag, 즉 <incorrect grammar> - 오류 문장과 설명 </incorrect grammar> 안에 담겨 있으며, <wrong count> </wrong count> tag, 즉 <wrong count> 오류 개수 </wrong count> 이다.", None, None, None, None], | |
| ["충남도가 백신 접종 안내 및 이상반응 모니터링을 위해 협정을 맺은 곳은 SK텔레콤(SKT)입니다. SKT의 AI 기술인 '누구(NUGU)'를 활용한 '누구 백신 케어콜' 서비스를 통해 이 업무를 수행할 계획입니다.", "한국어 문맥상 부자연스러운 부분을 찾으시오. 오류 문장과 개수는 <incorrect grammar> </incorrect grammar> tag, 즉 <incorrect grammar> - 오류 문장과 설명 </incorrect grammar> 안에 담겨 있으며, <wrong count> </wrong count> tag, 즉 <wrong count> 오류 개수 </wrong count> 이다.", None, None, None, None] | |
| ] | |
| with gr.Blocks() as app: | |
| gr.Markdown("# 🤖 Checking Korean Grammar Accuracy with kgrammar") | |
| 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 kgrammar?") | |
| gr.Markdown(description_text1) | |
| gr.Markdown("## kgrammar Dataset") | |
| gr.Markdown(description_text2) | |
| gr.Markdown("## Available kgrammar 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="User Message") | |
| text2 = gr.Textbox(label="System message", value="한국어 문맥상 부자연스러운 부분을 찾으시오. 오류 문장과 개수는 <incorrect grammar> </incorrect grammar> tag, 즉 <incorrect grammar> - 오류 문장과 설명 </incorrect grammar> 안에 담겨 있으며, <wrong count> </wrong count> tag, 즉 <wrong count> 오류 개수 </wrong count> 이다.") | |
| dropdown = gr.Dropdown(label="Model Selection", choices=["davidkim205/kgrammar-2-1b", "davidkim205/kgrammar-2-3b"], value="davidkim205/kgrammar-2-1b") | |
| 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, dropdown, slider1, slider2, slider3]) | |
| submit.click( | |
| fn=respond, | |
| inputs=[text1, text2, dropdown, slider1, slider2, slider3], | |
| outputs=output | |
| ) | |
| app.launch() | |
| if __name__ == "__main__": | |
| main() | |