Timaska commited on
Commit
b756f30
·
verified ·
1 Parent(s): 3d09fd3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -28
app.py CHANGED
@@ -1,44 +1,69 @@
1
  import gradio as gr
 
 
2
  import os
3
  from huggingface_hub import InferenceClient
4
 
5
- # Получаем токен из переменной окружения
6
  HF_TOKEN = os.getenv("HF_TOKEN")
 
7
 
8
- # Клиент Hugging Face для выбранной модели
9
- client = InferenceClient(
10
- model="deepseek-ai/deepseek-coder-1.3b-base", # Можешь заменить на starcoder2 или codegemma
11
- token=HF_TOKEN
12
- )
13
-
14
- # Функция генерации без stream (deepseek не поддерживает stream=True)
15
- def complete_code(prompt, max_tokens, temperature, top_p):
16
- response = client.text_generation(
17
  prompt,
18
  max_new_tokens=max_tokens,
19
  temperature=temperature,
20
  top_p=top_p,
21
- stream=False # ⚠️ обязательно False для этой модели
22
  )
23
- return response
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  # Интерфейс Gradio
26
- demo = gr.Interface(
27
- fn=complete_code,
28
- inputs=[
29
- gr.Textbox(lines=10, label="Введите код или комментарий"),
30
- gr.Slider(minimum=1, maximum=1024, value=128, step=1, label="Максимум новых токенов"),
31
- gr.Slider(minimum=0.1, maximum=1.5, value=0.7, step=0.1, label="Temperature"),
32
- gr.Slider(minimum=0.1, maximum=1.0, value=0.9, step=0.05, label="Top-p"),
33
- ],
34
- outputs=gr.Textbox(lines=15, label="Дополненный код"),
35
- title="🛠️ Уязвимый агент автодополнения кода",
36
- description=(
37
- "Этот агент демонстрирует поведение LLM без фильтрации: он уязвим к prompt injection, "
38
- "может генерировать вредоносные команды и не имеет встроенных ограничений. "
39
- "Использовать только в исследовательских целях!"
40
- ),
41
- )
 
 
 
 
 
 
 
 
 
42
 
43
  if __name__ == "__main__":
44
  demo.launch()
 
1
  import gradio as gr
2
+ import tempfile
3
+ import subprocess
4
  import os
5
  from huggingface_hub import InferenceClient
6
 
 
7
  HF_TOKEN = os.getenv("HF_TOKEN")
8
+ client = InferenceClient("deepseek-ai/deepseek-coder-1.3b-base", token=HF_TOKEN)
9
 
10
+ # Генерация кода с помощью LLM
11
+ def generate_code(prompt, max_tokens, temperature, top_p):
12
+ return client.text_generation(
 
 
 
 
 
 
13
  prompt,
14
  max_new_tokens=max_tokens,
15
  temperature=temperature,
16
  top_p=top_p,
17
+ stream=False
18
  )
19
+
20
+ # Выполнение сгенерированного кода в песочнице
21
+ def execute_code(code):
22
+ with tempfile.NamedTemporaryFile(mode="w+", suffix=".py", delete=False) as temp:
23
+ temp.write(code)
24
+ temp.flush()
25
+ try:
26
+ result = subprocess.run(
27
+ ["python3", temp.name],
28
+ capture_output=True,
29
+ text=True,
30
+ timeout=5 # ограничение по времени
31
+ )
32
+ output = result.stdout + "\n" + result.stderr
33
+ except subprocess.TimeoutExpired:
34
+ output = "⏱️ Превышено время выполнения (timeout)"
35
+ except Exception as e:
36
+ output = f"❌ Ошибка запуска: {e}"
37
+ finally:
38
+ os.unlink(temp.name)
39
+ return output
40
 
41
  # Интерфейс Gradio
42
+ with gr.Blocks() as demo:
43
+ gr.Markdown("🛠️ Уязвимый агент автодополнения + изолированное выполнение кода")
44
+
45
+ with gr.Row():
46
+ prompt = gr.Textbox(lines=10, label="Введите подсказку для генерации")
47
+ generated_code = gr.Textbox(lines=15, label="Сгенерированный код")
48
+
49
+ with gr.Row():
50
+ generate_btn = gr.Button("🤖 Сгенерировать")
51
+ run_btn = gr.Button("🚀 Выполнить")
52
+
53
+ output = gr.Textbox(lines=15, label="Результат выполнения")
54
+
55
+ # Привязка функций
56
+ generate_btn.click(
57
+ fn=generate_code,
58
+ inputs=[prompt, gr.Number(128), gr.Number(0.7), gr.Number(0.95)],
59
+ outputs=generated_code
60
+ )
61
+
62
+ run_btn.click(
63
+ fn=execute_code,
64
+ inputs=generated_code,
65
+ outputs=output
66
+ )
67
 
68
  if __name__ == "__main__":
69
  demo.launch()