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
) |