demo-test / app.py
profplate's picture
Update app.py
45586df verified
import gradio as gr
from transformers import pipeline
TITLE = "Qwen News Assistant"
DESCRIPTION = (
"Using Qwen2.5-0.5B-Instruct to generate news drafts. "
"This model is optimized for CPU efficiency and instruction following."
)
# Load the lightweight Qwen 0.5B model
generator = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct")
def generate_text(prompt: str, temperature: float, top_p: float, max_length: int) -> str:
if not prompt or not prompt.strip():
return "Please enter a prompt."
# Instruct models perform best when prompts are formatted correctly
# For Qwen, we wrap the prompt in a simple instruction format
messages = [
{"role": "system", "content": "You are a helpful news writing assistant."},
{"role": "user", "content": prompt},
]
# Apply the chat template
formatted_prompt = generator.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
temperature = max(0.01, float(temperature))
outputs = generator(
formatted_prompt,
do_sample=True,
temperature=temperature,
top_p=float(top_p),
max_new_tokens=int(max_length), # max_new_tokens is safer for instruct models
pad_token_id=generator.tokenizer.eos_token_id,
)
# Extract only the newly generated text
generated_text = outputs[0]["generated_text"]
return generated_text.split("<|im_start|>assistant\n")[-1].strip()
# Updated examples to be more "Instruction" focused
examples = [
["Write a breaking news headline about a discovery on Mars.", 0.7, 0.9, 100],
["Write the opening paragraph for a story about local students winning a robotics competition.", 0.5, 0.9, 150],
["Summarize the importance of artificial intelligence in 2024.", 0.3, 0.9, 200],
]
with gr.Blocks(title=TITLE) as demo:
gr.Markdown(f"# {TITLE}")
gr.Markdown(DESCRIPTION)
with gr.Row():
with gr.Column():
prompt = gr.Textbox(
label="Prompt / Instruction",
placeholder="e.g., 'Write a news report about...'",
lines=4,
)
temperature = gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.1, label="Temperature")
top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.9, step=0.05, label="Top-p")
max_length = gr.Slider(minimum=20, maximum=300, value=150, step=1, label="Max New Tokens")
generate_button = gr.Button("Generate", variant="primary")
with gr.Column():
output = gr.Textbox(label="Generated News Draft", lines=16)
generate_button.click(
fn=generate_text,
inputs=[prompt, temperature, top_p, max_length],
outputs=output,
)
gr.Examples(
examples=examples,
inputs=[prompt, temperature, top_p, max_length],
outputs=output,
fn=generate_text,
cache_examples=False,
)
if __name__ == "__main__":
demo.launch()