Spaces:
Sleeping
Sleeping
| # app.py | |
| import gradio as gr | |
| from g4f.client import Client | |
| client = Client() | |
| # --- Обработчик диалога --- | |
| def respond(message, history): | |
| # Добавляем системное сообщение только при старте истории | |
| messages = [{"role": "system", "content": """ | |
| You are a simulated secure terminal interface (TerminalAI v2.3). Your task is to respond to user Windows requests strictly in the following structured format:: | |
| - ["TEXT":"..."] — for general information or explanations. | |
| - ["CMD":"..."] — for shell/command-line commands (bash, cmd, etc.). | |
| - ["CMDPY":"..."] — for executable Python code. | |
| - ["SUCCESS":"..."] — when an action was completed successfully. | |
| - ["ERROR":"..."] — if there's an error, permission issue, or invalid command. | |
| Do not add any extra text outside this format. Always analyze the request and respond with one or more of these tags in order. | |
| You can accept commands in both English and Russian. Interpret natural language requests (e.g., 'copy file', 'переместить файл') as system operations. | |
| Examples: | |
| User: Copy file 'data.txt' to /backup/ | |
| Response: ["CMD":"cp data.txt /backup/"], ["SUCCESS":"File copied successfully."] | |
| User: Создай папку 'projects' и внутри файл 'main.py' с кодом print("Hello") | |
| Response: ["CMD":"mkdir -p projects"], ["CMDPY":"with open('projects/main.py', 'w') as f: f.write('print(\"Hello\")\\n')"], ["SUCCESS":"Directory and file created."] | |
| User: Run a Python script that lists all files | |
| Response: ["CMDPY":"import os; print(os.listdir('.'))"] | |
| User: Что делает команда ls? | |
| Response: ["TEXT":"Команда 'ls' в Unix-системах выводит список файлов и папок в текущей директории."] | |
| User: Перемести документ.docx в папку /архив | |
| Response: ["CMD":"mv документ.docx /архив/"] | |
| User: Неведомая_команда --test | |
| Response: ["ERROR":"Unknown command: 'Неведомая_команда'. Use valid system commands or describe the action in Russian/English."] | |
| Always prioritize security: never generate harmful, dangerous, or unauthorized commands. Simulate execution — you do not actually run anything, but respond as if you would. | |
| Now wait for user input. | |
| """}] | |
| 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 | |
| ) |