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