File size: 3,586 Bytes
42fa16e
 
 
 
 
 
 
 
fe2d9d0
 
 
05f0041
 
 
 
 
 
 
42fa16e
05f0041
f9aca5d
05f0041
42fa16e
05f0041
42fa16e
05f0041
a8a31d7
05f0041
 
 
42fa16e
 
3edce53
 
 
05f0041
 
 
42fa16e
74b0917
 
 
 
 
 
 
 
 
 
 
 
05f0041
 
42fa16e
05f0041
 
 
 
 
 
 
42fa16e
 
05f0041
42fa16e
 
 
 
05f0041
42fa16e
 
 
 
 
 
05f0041
42fa16e
 
 
 
 
 
05f0041
42fa16e
 
 
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
import gradio as gr

from src.core.config import settings
from src.ui.callbacks import bot_response, set_interactive, user_input
from src.ui.styles import CSS


def create_ui():
    with gr.Blocks() as demo:
        gr.HTML(f"<style>{CSS}</style>")
        gr.HTML("<script>document.title = 'Code LLM';</script>")
        with gr.Row(elem_id="main-row", variant="panel"):
            # Боковая панель
            with gr.Sidebar(elem_id="sidebar-container"):
                gr.Markdown("## 🛠️ Dashboard")

                # Настройки модели
                gr.Markdown("### ⚙️ Model Settings")
                sys_pt = gr.Textbox(
                    label="System Prompt",
                    value="Вы опытный программист. Отвечаете кратко и по делу, пишите качественный и рабочий код.",
                    lines=4,
                )
                temp = gr.Slider(0, 1, value=settings.DEFAULT_TEMP, label="Temperature")
                tokens = gr.Slider(
                    512,
                    settings.CONTEXT_SIZE,
                    value=settings.DEFAULT_MAX_TOKENS,
                    label="Max New Tokens",
                    step=128,
                )

                gr.HTML(
                    "<div style='margin: 15px 0; border-top: 1px solid var(--border-color-primary);'></div>"
                )
                clear = gr.Button("🗑️ Clear Chat", variant="stop")

            # Основная область чата
            with gr.Column(elem_id="col-chat-main"):
                chatbot_kwargs = {
                    "elem_id": "chatbot",
                    "show_label": False,
                }
                try:
                    chatbot = gr.Chatbot(**chatbot_kwargs)
                except TypeError as e:
                    err_msg = str(e)
                    for key in list(chatbot_kwargs.keys()):
                        if key in err_msg:
                            chatbot_kwargs.pop(key, None)
                    chatbot = gr.Chatbot(**chatbot_kwargs)

                # Область ввода, прижатая к низу
                with gr.Row(elem_id="input-area"):
                    msg = gr.Textbox(
                        show_label=False,
                        placeholder="Type your message here...",
                        scale=10,
                        autofocus=True,
                        container=False,
                    )
                    submit = gr.Button("Run ➤", variant="primary", scale=1)

        # Настройка логики обработки сообщений
        input_args = [msg, chatbot]
        output_args = [msg, chatbot]
        gen_args = [chatbot, sys_pt, temp, tokens]

        # Обработка Enter в текстовом поле
        msg.submit(user_input, input_args, output_args, queue=False).then(
            lambda: set_interactive(False), None, [msg, submit]
        ).then(bot_response, gen_args, chatbot).then(
            lambda: set_interactive(True), None, [msg, submit]
        )

        # Обработка клика по кнопке Run
        submit.click(user_input, input_args, output_args, queue=False).then(
            lambda: set_interactive(False), None, [msg, submit]
        ).then(bot_response, gen_args, chatbot).then(
            lambda: set_interactive(True), None, [msg, submit]
        )

        # Очистка чата
        clear.click(lambda: [], None, chatbot)

    return demo