text-playground / app.py
jonathanagustin's picture
Upload folder using huggingface_hub
c498eed verified
import os
import logging
import gradio as gr
from huggingface_hub import InferenceClient
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s | %(levelname)s | %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
logger = logging.getLogger(__name__)
# Environment variables for configuration
HF_TOKEN = os.environ.get("HF_TOKEN", "")
MODEL_ID = os.environ.get("MODEL_ID", "Qwen/Qwen2.5-72B-Instruct")
DEFAULT_MAX_TOKENS = int(os.environ.get("DEFAULT_MAX_TOKENS", "100"))
DEFAULT_TEMPERATURE = float(os.environ.get("DEFAULT_TEMPERATURE", "0.7"))
logger.info(f"HF_TOKEN configured: {bool(HF_TOKEN)}")
logger.info(f"MODEL_ID: {MODEL_ID}")
logger.info(f"DEFAULT_MAX_TOKENS: {DEFAULT_MAX_TOKENS}")
logger.info(f"DEFAULT_TEMPERATURE: {DEFAULT_TEMPERATURE}")
client = InferenceClient(token=HF_TOKEN) if HF_TOKEN else InferenceClient()
logger.info("InferenceClient initialized")
def generate(prompt: str, max_tokens: int, temperature: float) -> str:
"""Generate text from prompt."""
logger.info(f"generate() called | prompt_len={len(prompt)} | max_tokens={max_tokens} | temp={temperature}")
if not prompt.strip():
logger.warning("Empty prompt received")
return "✏️ Enter a prompt!"
try:
logger.info(f"Calling chat.completions | model={MODEL_ID}")
response = client.chat.completions.create(
model=MODEL_ID,
messages=[{"role": "user", "content": prompt}],
max_tokens=max_tokens,
temperature=temperature,
)
output = response.choices[0].message.content
logger.info(f"Generated {len(output)} chars")
return output
except Exception as e:
logger.error(f"API error: {e}")
return f"❌ Error: {e}"
logger.info("Building Gradio interface...")
with gr.Blocks(title="Text Playground") as demo:
gr.Markdown("# ✍️ Text Playground\nGenerate creative text with powerful language models!")
prompt = gr.Textbox(
label="Your prompt",
placeholder="Write a haiku about coding...",
lines=3,
autofocus=True,
)
with gr.Row(equal_height=True):
max_tokens = gr.Slider(
minimum=10, maximum=500, value=DEFAULT_MAX_TOKENS, step=10,
label="Max tokens"
)
temperature = gr.Slider(
minimum=0.1, maximum=1.5, value=DEFAULT_TEMPERATURE, step=0.1,
label="Temperature (creativity)"
)
output = gr.Textbox(label="Generated text", lines=6, interactive=False)
btn = gr.Button("Generate ✨", variant="primary")
btn.click(generate, inputs=[prompt, max_tokens, temperature], outputs=output)
prompt.submit(generate, inputs=[prompt, max_tokens, temperature], outputs=output)
gr.Examples(
examples=[
["Write a haiku about machine learning", 50, 0.8],
["Explain quantum computing to a 5-year-old", 150, 0.5],
["Give me 3 creative startup ideas", 150, 0.9],
],
inputs=[prompt, max_tokens, temperature],
)
demo.queue()
logger.info("Starting Gradio server...")
demo.launch()