File size: 2,870 Bytes
d8e8db4
5efbcc2
d8e8db4
5efbcc2
d8e8db4
5efbcc2
d8e8db4
 
 
 
54c2223
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d8e8db4
 
 
 
 
 
 
5efbcc2
b4964d9
d8e8db4
 
 
b4964d9
d8e8db4
 
 
5efbcc2
d8e8db4
b4964d9
 
d8e8db4
 
 
b4964d9
d8e8db4
 
 
b4964d9
 
 
d8e8db4
b4964d9
d8e8db4
b4964d9
 
 
 
d8e8db4
 
 
b4964d9
d8e8db4
b4964d9
 
 
 
 
d8e8db4
 
b4964d9
 
 
 
 
 
 
 
 
 
 
d8e8db4
b4964d9
 
 
d8e8db4
b4964d9
d8e8db4
 
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
# app.py
import gradio as gr
from g4f.client import Client

client = Client()

# --- Обработчик диалога ---
def respond(message, history):
    # Добавляем системное сообщение только при старте истории
    messages = [{"role": "system", "content": """You are a Web‑assistant. For every user request return **exactly one JSON object**
with the following possible fields:
{
  "TEXT": "<optional short explanation>",
  "WEBSITE": "<full URL to open>",
  "SEARCH": "<search query>",
  "SUGGESTIONS": [
    {"title":"...", "url":"..."},
    {"title":"...", "url":"..."}
  ],
  "TOOL": {
    "action":"click|type|scroll|none",
    "selector":"CSS selector (optional)",
    "value":"text to type (if action==type)"
  }
}
If you don't need any action, set all fields to null or empty strings.
"""}]
    
    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="deepseek-v3",
            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
    )