Spaces:
Sleeping
Sleeping
File size: 4,215 Bytes
b30b7a6 6d48a2b b30b7a6 9cf97c7 b30b7a6 82250dd 827a174 b30b7a6 9cf97c7 82250dd b30b7a6 82250dd b30b7a6 82250dd 9cf97c7 b30b7a6 82250dd b30b7a6 9cf97c7 82250dd b30b7a6 9cf97c7 b30b7a6 9cf97c7 b30b7a6 9cf97c7 b30b7a6 82250dd f5a179e b30b7a6 f5a179e b30b7a6 82250dd b30b7a6 82250dd b30b7a6 9cf97c7 6d48a2b 2a5caa0 6d48a2b b30b7a6 82250dd | 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | import gradio as gr
from huggingface_hub import InferenceClient
import os
import fastapi
import uvicorn
# --- Конфигурация ---
# Системный промпт для настройки поведения модели
SYSTEM_PROMPT = """
You are a world-class expert in Linux system administration.
Your task is to convert a user's request in natural language into a SINGLE, executable shell command.
- Do NOT provide any explanation.
- Do NOT use markdown or any other formatting.
- Do NOT suggest multiple options.
- Just return the raw command, ready to be executed.
Example:
User: list all running docker containers
You: docker ps
"""
# Модель для генерации команд (8B версия, не требующая сторонних ключей)
MODEL = "meta-llama/Meta-Llama-3-8B-Instruct"
# --- Логика приложения ---
def generate_command(user_request):
"""
Обращается к Hugging Face Inference API для генерации команды.
Токен считывается из секрета HF_TOKEN, заданного в настройках Space.
"""
# Считываем токен из переменной окружения (секрета Hugging Face)
hf_token = os.environ.get("HF_TOKEN")
# Проверки
if not user_request:
return "Ошибка: Запрос не может быть пустым."
if not hf_token:
return "Ошибка: Секрет HF_TOKEN не найден. Пожалуйста, убедитесь, что он добавлен в настройках репозитория Hugging Face Space."
try:
# Выполняем запрос к API
client = InferenceClient(model=MODEL, token=hf_token)
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_request},
]
response = client.chat_completion(
messages=messages,
max_tokens=200,
temperature=0.1,
)
command = response.choices[0].message.content.strip()
# Очистка вывода от артефактов
if command.startswith("`") and command.endswith("`"):
command = command[1:-1]
if command.startswith("bash\n"):
command = command.replace("bash\n", "", 1)
return command
except Exception as e:
return f"Произошла ошибка API: {str(e)}"
# --- Интерфейс Gradio ---
with gr.Blocks() as demo:
gr.Markdown(
"""
# 🤖 AI System Administrator Assistant
Введите ваш запрос на естественном языке, и ИИ преобразует его в готовую к выполнению shell-команду.
**Внимание:** Этот инструмент — ваш помощник. Всегда проверяйте предложенные команды перед выполнением в реальной системе.
"""
)
# Поле для ввода токена полностью убрано
user_input = gr.Textbox(label="Ваш запрос", placeholder="Например: 'покажи все файлы в текущей папке, отсортированные по размеру'", lines=3)
generate_button = gr.Button("Сгенерировать команду")
output_command = gr.Textbox(label="Предложенная команда", interactive=False, lines=5)
generate_button.click(
fn=generate_command,
inputs=[user_input], # В инпутах больше нет поля для токена
outputs=output_command
)
gr.Markdown(
"""
---
*Модель, используемая для генерации: `meta-llama/Meta-Llama-3-8B-Instruct`.*
"""
)
# --- Запуск приложения ---
app = fastapi.FastAPI()
@app.get("/health")
def health_check():
return {"status": "ok"}
app = gr.mount_gradio_app(app, demo, path="/")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860) |