New / app.py
THED1's picture
Update app.py
0eaa87b verified
Raw
History Blame Contribute Delete
2.89 kB
import gradio as gr
import subprocess
import threading
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
MODEL_NAME = "Qwen/Qwen2.5-1.5B-Instruct"
print("Loading model...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
torch_dtype="auto",
device_map="cpu"
)
print("Model loaded")
def ask_ai(prompt):
try:
messages = [
{
"role": "user",
"content": prompt
}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(
text,
return_tensors="pt"
)
output = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.7,
do_sample=True
)
result = tokenizer.decode(
output[0],
skip_special_tokens=True
)
return result
except Exception as e:
return str(e)
def execute_code(code):
try:
proc = subprocess.run(
["python3", "-c", code],
capture_output=True,
text=True,
timeout=30
)
if proc.returncode == 0:
return proc.stdout or "Done"
return proc.stderr
except Exception as e:
return str(e)
def ai_and_run(prompt):
ai_response = ask_ai(
prompt +
"\nReturn only executable Python code."
)
result = execute_code(ai_response)
return (
"AI RESPONSE:\n\n"
+ ai_response
+ "\n\nOUTPUT:\n\n"
+ result
)
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# Qwen AI + Sandbox")
with gr.Tab("Chat"):
prompt = gr.Textbox(
label="Message",
lines=4
)
output = gr.Textbox(
label="Response",
lines=15
)
btn = gr.Button("Send")
btn.click(
ask_ai,
prompt,
output
)
with gr.Tab("Python Sandbox"):
code = gr.Textbox(
label="Python Code",
lines=12
)
result = gr.Textbox(
label="Output",
lines=12
)
run = gr.Button("Run")
run.click(
execute_code,
code,
result
)
with gr.Tab("AI Generate & Run"):
p = gr.Textbox(
label="Instruction",
lines=4
)
r = gr.Textbox(
label="Result",
lines=20
)
b = gr.Button("Generate & Run")
b.click(
ai_and_run,
p,
r
)
demo.launch(
server_name="0.0.0.0",
server_port=7860
)