File size: 2,324 Bytes
14305c6
a2e1896
14305c6
a2e1896
14305c6
a2e1896
14305c6
 
 
 
 
 
 
 
 
 
a2e1896
 
14305c6
 
 
a2e1896
14305c6
a2e1896
14305c6
a2e1896
14305c6
 
a2e1896
14305c6
 
 
a2e1896
14305c6
 
 
a2e1896
 
14305c6
 
 
 
 
 
a2e1896
14305c6
 
 
 
a2e1896
14305c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2e1896
14305c6
a2e1896
14305c6
 
 
 
 
 
 
 
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
# app.py
import gradio as gr
from g4f.client import Client

client = Client()

# --- Обработчик диалога ---
def respond(message, history):
    # Добавляем системное сообщение только при старте истории
    messages = [{"role": "system", "content": ""}]
    
    for human, assistant in history:
        messages.append({"role": "user", "content": human})
        messages.append({"role": "assistant", "content": assistant})
    
    messages.append({"role": "user", "content": message})

    try:
        response = client.chat.completions.create(
            model="gpt-4",
            messages=messages
        )
        bot_message = response.choices[0].message.content
    except Exception as e:
        bot_message = f"Ошибка: {str(e)}"

    # Возвращаем обновлённую историю + новый ответ
    return history + [[message, bot_message]]

# --- Интерфейс ---
with gr.Blocks(title="ESP Brain") as demo:
    gr.Markdown("## For api")

    chatbot = gr.Chatbot(
        height=600,
    )

    with gr.Row():
        txt = gr.Textbox(
            placeholder="Напиши сообщение...",
            show_label=False,
            scale=8
        )
        submit_btn = gr.Button("Отправить", scale=2)

    with gr.Row():
        retry_btn = gr.Button("🔄 Повторить")
        undo_btn = gr.Button("↩️ Отменить")
        clear_btn = gr.Button("🗑️ Очистить")

    # Логика
    txt.submit(fn=respond, inputs=[txt, chatbot], outputs=chatbot)
    submit_btn.click(fn=respond, inputs=[txt, chatbot], outputs=chatbot)

    def retry_last(history):
        if history:
            last_user_msg = history[-1][0]
            return history[:-1] + [[last_user_msg, None]]  # очищаем ответ
        return history

    retry_btn.click(fn=retry_last, inputs=chatbot, outputs=chatbot, queue=False)

    def undo_last(history):
        return history[:-1]

    undo_btn.click(fn=undo_last, inputs=chatbot, outputs=chatbot, queue=False)

    clear_btn.click(lambda: [], outputs=chatbot, queue=False)

# --- Запуск ---
if __name__ == "__main__":
    demo.queue()
    demo.launch(
        share=True,
        ssr_mode=False,
        debug=True
    )