WeTalk / app.py
duwa656's picture
Update app.py
5d4a472 verified
import gradio as gr
import requests
import os
# api
API_URL = "https://api-inference.huggingface.co/models/tiiuae/falcon-rw-1b"
headers = {"Authorization": f"Bearer {os.environ.get('HF_TOKEN_GRADIO')}"}
# api-based generation function (no need for PyTorch )
def generate_text(category, theme, tone, length):
# defensive check: provide fallback like defaults
category = category or "story"
tone = tone or "neutral"
length = length or "short"
theme = theme.strip() or "an interesting idea"
#Build prompt
prompt = f"Write a {length.lower()} {tone.lower()} {category.lower()} about {theme}."
payload = {"inputs": prompt}
try:
response = requests.post(API_URL, headers=headers, json=payload)
# debug line to inspect
print("Status Code:", response.status_code)
print("Raw response text:", response.text)
print("Using token:", os.environ.get("HF_TOKEN"))
try:
data = response.json()
except ValueError:
return f"❌ Invalid JSON response: {response.text}"
if response.status_code != 200:
return f"❌ API Error: {data.get('error', 'Unknown error')}"
if isinstance(data, list) and "generated_text" in data[0]:
return data[0]["generated_text"]
else:
return f"❌ Unexpected API response: {data}"
except Exception as e:
return f"❌ Exception: {str(e)}"
#if response.status_code != 200:
# return f"❌ API Error: {data.get('error', 'Unknown error')}"
#data = response.json()
# data can be a list of dicts with 'generated_text'
#if isinstance(data, list) and "generated_text" in data[0]:
# return data[0]["generated_text"]
#else:
# return f"❌ Unexpected API response: {data}"
#except Exception as e:
# return f"❌ Exception: {str(e)}"
# Create Gradio UI
with gr.Blocks() as demo:
gr.Markdown("## πŸ“ Creative Writing Generator")
category = gr.Dropdown(["Story", "Poem"], label="Category")
theme = gr.Textbox(label="Theme", placeholder="e.g. friendship, time travel, lost love")
tone = gr.Dropdown(["Happy", "Sad", "Funny", "Dark", "Inspiring"], label="Tone")
length = gr.Dropdown(["Short", "Medium", "Long"], label="Length")
generate_button = gr.Button("Generate")
output = gr.Textbox(label="Generated Content", lines=10)
generate_button.click(fn=generate_text,
inputs=[category, theme, tone, length],
outputs=output)
demo.launch()