Rahatara's picture
Create app.py
52c4718 verified
raw
history blame
3.53 kB
import gradio as gr
import os
from groq import Groq
# Initialize Groq client
api_key = os.getenv("GROQ_API_KEY")
client = Groq(api_key=api_key)
# Function to generate a storyboard using LLM
def generate_storyboard(scenario):
if not scenario.strip():
return "Please provide a scenario to generate the storyboard."
messages = [
{"role": "system", "content": "You are an AI storyteller. Generate a storyboard in a structured table with six scenes."},
{"role": "user", "content": f"Generate a 6-scene storyboard for: {scenario}"}
]
completion = client.chat.completions.create(
model="llama3-70b-8192",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=False,
stop=None,
)
return completion.choices[0].message.content
# Interactive chatbot with streaming response
def chatbot_stream(user_input):
messages = [
{"role": "system", "content": "You are an expert in storyboarding. Answer questions interactively."},
{"role": "user", "content": user_input}
]
completion = client.chat.completions.create(
model="llama3-70b-8192",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=True,
stop=None,
)
response = ""
for chunk in completion:
text_chunk = chunk.choices[0].delta.content or ""
response += text_chunk
yield {"role": "assistant", "content": response}
# Gradio UI with enhanced chat interface
def ui():
with gr.Blocks(theme=gr.themes.Glass(primary_hue="violet", secondary_hue="emerald", neutral_hue="stone")) as app:
with gr.Tabs():
with gr.TabItem("💬Chat"):
gr.Markdown("# AI Storyboard & Chatbot")
chatbot = gr.Chatbot(label="Storyboard Chatbot", type="messages")
with gr.Row():
chat_input = gr.Textbox(
label="Your Message",
placeholder="Type your question here...",
lines=1
)
send_button = gr.Button("✋Ask Question")
# Quick question examples
quick_questions = ["How do I structure a storyboard?", "What makes a good visual scene?", "How to add depth to a story?"]
with gr.Row():
for question in quick_questions:
gr.Button(question, variant="secondary").click(lambda q=question: chatbot_stream(q), inputs=None, outputs=chatbot)
# Chatbot functionality
send_button.click(
fn=chatbot_stream,
inputs=chat_input,
outputs=chatbot,
queue=True
).then(
fn=lambda: "", # Clear the input box after sending
inputs=None,
outputs=chat_input
)
with gr.TabItem("📖 Storyboard Generator"):
gr.Markdown("## Generate a Storyboard")
scenario_input = gr.Textbox(label="Enter your scenario")
generate_btn = gr.Button("Generate Storyboard")
storyboard_output = gr.Textbox(label="Generated Storyboard", interactive=False)
generate_btn.click(generate_storyboard, inputs=scenario_input, outputs=storyboard_output)
app.launch()
ui()