File size: 5,178 Bytes
5fdb69e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import gradio as gr
import requests
import json
from json_handlers import SettingsHandler, LanguagesHandler
from ollama_utils import get_ollama_response


class GradioUI:
    def __init__(self, models: list, settings: SettingsHandler, languages: LanguagesHandler):
        self.models = models
        self.settings = settings
        self.languages = languages

        self.langs = self.languages.get_supported_languages()

    def _translate_callback(self, text, model, translte_from, translte_to):
        model_options = self.settings.get_advanced_settings()

        full_response = ""
        chunck_response = get_ollama_response(model, text, translte_from, translte_to, model_options)
        for chunck in chunck_response:
            full_response += chunck
            yield full_response

    def _temp_setting_callback(self, temp_dropdown_val):
        self.settings.update_advanced_settings_param("temperature", temp_dropdown_val)

    def _top_k_setting_callback(self, top_k_dropdown_val):
        self.settings.update_advanced_settings_param("top_k", top_k_dropdown_val)

    def _top_p_setting_callback(self, top_p_dropdown_val):
        self.settings.update_advanced_settings_param("top_p", top_p_dropdown_val)

    def _reset_to_default_callback(self):
        temperature = 0.0
        top_k = 40.0
        top_p = 0.9
        default_settings = {
            "temperature": temperature,
            "top_k": top_k,
            "top_p": top_p
        }
        self.settings.update_advanced_settings(default_settings)
        return temperature, top_k, top_p

    def build_and_launch(self):
        with gr.Blocks() as gui:
            gr.Markdown("# LLM Translator")
            with gr.Tab("Translate"):
                with gr.Row():
                    model_dropdown = gr.Dropdown(
                        label="Model",
                        info="Choose LLM Model",
                        choices=self.models
                    )
                with gr.Group():
                    with gr.Row():
                        translte_from = gr.Dropdown(
                            value=self.langs[0],
                            show_label=False,
                            choices=self.langs,
                            interactive=True
                        )
                        translte_to = gr.Dropdown(
                            value=self.langs[1],
                            show_label=False,
                            choices=self.langs,
                            interactive=True
                        )
                    with gr.Row():
                        translate_input = gr.Textbox(label="Your Input", lines=15, max_lines=15)
                        translate_output = gr.Textbox(label="Translated", lines=15, max_lines=15)
                    
                btn = gr.Button("Translate", variant="primary")
                btn.click(
                    fn=self._translate_callback,
                    inputs=[translate_input, model_dropdown, translte_from, translte_to],
                    outputs=translate_output
                )

            with gr.Tab("Advanced Settings"):
                temp_dropdown = gr.Number(
                    value=self.settings.get_advanced_setting_param("temperature"),
                    label="Temperature",
                    info="This parameter control how creative the model is\n0 means no creativity\n1 means very creative",
                    minimum=0,
                    maximum=1,
                    step=0.1,
                    interactive=True
                )

                gr.Markdown()  # Used only for spacing

                top_k_dropdown = gr.Number(
                    value=self.settings.get_advanced_setting_param("top_k"),
                    label="Top K",
                    info="A higher value (e.g. 100) will give more diverse answers\nwhile a lower value (e.g. 10) will be more conservative.",
                    minimum=1,
                    maximum=200,
                    step=1,
                    interactive=True
                )

                gr.Markdown()  # Used only for spacing

                top_p_dropdown = gr.Number(
                    value=self.settings.get_advanced_setting_param("top_p"),
                    label="Top P",
                    info="A higher value (e.g., 0.95) will lead to more diverse answers\nwhile a lower value (e.g., 0.5) will be more conservative",
                    minimum=0.1,
                    maximum=1.0,
                    step=0.1,
                    interactive=True
                )

                gr.Markdown()  # Used only for spacing

                reset_btn = gr.Button("Reset to Default")
                reset_btn.click(
                    fn=self._reset_to_default_callback,
                    outputs=[temp_dropdown, top_k_dropdown, top_p_dropdown]
                )

                temp_dropdown.change(self._temp_setting_callback, temp_dropdown)
                top_k_dropdown.change(self._top_k_setting_callback, top_k_dropdown)
                top_p_dropdown.change(self._top_p_setting_callback, top_p_dropdown)

        gui.launch()