roqaia123's picture
Upload app.py
b06f5f8 verified
# -*- coding: utf-8 -*-
"""Untitled2.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1Ny-gFLQxbToObZpy6sKVjXlw0UcQZdZU
"""
# -*- coding: utf-8 -*-
"""storyboard generator.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1m1JY_a-mgo6wXWmuLVOiSv61hojaoFjK
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
"""
import os
GROQ_API_KEY='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'
from groq import Groq
api_key = os.getenv("GROQ_API_KEY", GROQ_API_KEY)
client = Groq(api_key=api_key)
print("Groq client initialized successfully.")
"""### Generate Content with Groq
YouYou can now use the `client` object to interact with the Groq API. Here's an example of how to generate a text completion using the `chat.completions.create` method.
"""
models = client.models.list()
for model in models.data:
print(model.id)
# Function to generate a storyboard
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. For each scene you provide:
1) A scenario text describing what problem a persona is trying to resolve and by using what product or feature.
2) Storyline text for each scene, descriptive visual information and the purpose of the scene.
You must provide the output in structured format like table.
"""
},
{
"role": "user",
"content": f"Generate a 6-scene storyboard for: {scenario}"
}
]
completion = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=messages,
temperature=1,
max_tokens=1024,
top_p=1,
stream=False,
stop=None,
)
return completion.choices[0].message.content
def chat_with_bot_stream(user_input):
global conversation_history
# Initialize conversation_history if it doesn't exist
if 'conversation_history' not in globals():
conversation_history = []
# Defensive check: Ensure conversation_history only contains valid message dictionaries
# If any item is not a dictionary or lacks 'role'/'content', reset it to prevent errors
clean_history_needed = False
for item in conversation_history:
if not isinstance(item, dict) or 'role' not in item or 'content' not in item:
clean_history_needed = True
break
if clean_history_needed:
conversation_history = [] # Reset if malformed entries are found
# Append the new user message
conversation_history.append({"role": "user", "content": user_input})
# Insert the system message only if it's the very first message in a new conversation
if len(conversation_history) == 1: # This means only the user's message is present now
conversation_history.insert(0, {
"role": "system",
"content": "You are an expert in storyboarding. Provide structured and insightful responses to queries about creating and refining storyboards."
})
completion = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=conversation_history,
temperature=1,
max_tokens=1024,
top_p=1,
stream=True,
stop=None,
)
response_content = ""
for chunk in completion:
response_content += chunk.choices[0].delta.content or ""
# Append the assistant's response
conversation_history.append({"role": "assistant", "content": response_content})
# The gr.Chatbot with type='messages' expects a list of dictionaries
# directly representing the conversation history. Return the cleaned history.
return conversation_history
import gradio as gr
TITLE = ""
CSS = """
h1 { text-align: center; font-size: 24px; margin-bottom: 10px; }
"""
with gr.Blocks(theme=gr.themes.Glass(primary_hue="violet", secondary_hue="violet", neutral_hue="stone"), css=CSS) as demo:
with gr.Tabs():
with gr.TabItem("Chat"):
gr.HTML(TITLE)
chatbot = gr.Chatbot(label="Storyboard Chatbot", type='messages', allow_tags=False)
with gr.Row():
user_input = gr.Textbox(
label="Your Message",
placeholder="Type your question here...",
lines=1
)
send_button = gr.Button("Ask Question")
# Chatbot functionality
send_button.click(
fn=chat_with_bot_stream,
inputs=user_input,
outputs=chatbot,
queue=True
).then(
fn=lambda: "",
inputs=None,
outputs=user_input
)
with gr.TabItem("Generate Storyboard"):
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)
demo.launch()
get_ipython().system('pip install groq')