File size: 3,167 Bytes
42fa16e e8fef7f 05f0041 e8fef7f 9700948 e8fef7f 42fa16e 05f0041 e8fef7f 42fa16e e8fef7f 42fa16e 05f0041 a8a31d7 05f0041 9700948 05f0041 42fa16e e8fef7f 9db46db e8fef7f 05f0041 e8fef7f 9f87737 e8fef7f 9f87737 e8fef7f 05f0041 e8fef7f 42fa16e 9700948 42fa16e e8fef7f 42fa16e e8fef7f 42fa16e e8fef7f 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 | 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():
# fill_height=True растягивает интерфейс на всю высоту экрана
with gr.Blocks(theme=gr.themes.Base(), css=CSS, fill_height=True) as demo:
gr.HTML("<script>document.title = 'AI Agent';</script>")
with gr.Sidebar(width=280):
use_search = gr.Checkbox(label="🌐 Интернет-поиск", value=False)
uploaded_file = gr.File(
label="📎 Файл контекста",
file_types=[".txt", ".pdf", ".py", ".md", ".json"],
)
# Аккордеон скроет страшные ползунки, пока юзер сам их не откроет
with gr.Accordion("⚙️ Настройки модели", open=False):
sys_pt = gr.Textbox(
label="System Prompt",
value="Вы AI-агент. Если нужно узнать свежую информацию, используйте поиск.",
lines=3,
)
temp = gr.Slider(0, 1, value=settings.DEFAULT_TEMP, label="Температура")
tokens = gr.Slider(
512,
settings.CONTEXT_SIZE,
value=settings.DEFAULT_MAX_TOKENS,
label="Max Tokens",
step=128,
)
clear = gr.Button("🗑️ Очистить чат")
# Чат
chatbot = gr.Chatbot(
elem_id="chatbot",
show_label=False,
scale=1,
)
# Плашка ввода в самом низу
with gr.Row():
msg = gr.Textbox(
show_label=False,
placeholder="Напиши сообщение...",
scale=10,
autofocus=True,
container=False,
)
submit = gr.Button("➤", variant="primary", scale=1, min_width=50)
# События интерфейса (обработчики)
input_args = [msg, chatbot]
output_args = [msg, chatbot]
gen_args = [chatbot, sys_pt, temp, tokens, use_search, uploaded_file]
# Обработка 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]
)
# Обработка клика по кнопке отправки
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
|