Update app.py
Browse files
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 |
-
#
|
9 |
-
|
10 |
-
|
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
|
22 |
)
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
# Интерфейс Gradio
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
gr.
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
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()
|