awesome-llm-apps/ai_movie_production_agent/movie_production_agent.py
2024-07-14 21:28:48 -05:00

83 lines
No EOL
3.7 KiB
Python

# Import the required libraries
import streamlit as st
from phi.assistant import Assistant
from phi.tools.serpapi_tools import SerpApiTools
from phi.llm.anthropic import Claude
from textwrap import dedent
# Set up the Streamlit app
st.title("AI Movie Production Agent 🎬")
st.caption("Bring your movie ideas to life with the teams of script writing and casting AI agents")
# Get Anthropic API key from user
anthropic_api_key = st.text_input("Enter Anthropic API Key to access Claude Sonnet 3.5", type="password")
# Get SerpAPI key from the user
serp_api_key = st.text_input("Enter Serp API Key for Search functionality", type="password")
if anthropic_api_key and serp_api_key:
script_writer = Assistant(
name="ScriptWriter",
llm=Claude(model="claude-3-5-sonnet-20240620", api_key=anthropic_api_key),
description=dedent(
"""\
You are an expert screenplay writer. Given a movie idea and genre,
develop a compelling script outline with character descriptions and key plot points.
"""
),
instructions=[
"Write a script outline with 3-5 main characters and key plot points.",
"Outline the three-act structure and suggest 2-3 twists.",
"Ensure the script aligns with the specified genre and target audience.",
],
)
casting_director = Assistant(
name="CastingDirector",
llm=Claude(model="claude-3-5-sonnet-20240620", api_key=anthropic_api_key),
description=dedent(
"""\
You are a talented casting director. Given a script outline and character descriptions,
suggest suitable actors for the main roles, considering their past performances and current availability.
"""
),
instructions=[
"Suggest 2-3 actors for each main role.",
"Check actors' current status using `search_google`.",
"Provide a brief explanation for each casting suggestion.",
"Consider diversity and representation in your casting choices.",
],
tools=[SerpApiTools(api_key=serp_api_key)],
)
movie_producer = Assistant(
name="MovieProducer",
llm=Claude(model="claude-3-5-sonnet-20240620", api_key=anthropic_api_key),
team=[script_writer, casting_director],
description="Experienced movie producer overseeing script and casting.",
instructions=[
"Ask ScriptWriter for a script outline based on the movie idea.",
"Pass the outline to CastingDirector for casting suggestions.",
"Summarize the script outline and casting suggestions.",
"Provide a concise movie concept overview.",
],
markdown=True,
)
# Input field for the report query
movie_idea = st.text_area("Describe your movie idea in a few sentences:")
genre = st.selectbox("Select the movie genre:",
["Action", "Comedy", "Drama", "Sci-Fi", "Horror", "Romance", "Thriller"])
target_audience = st.selectbox("Select the target audience:",
["General", "Children", "Teenagers", "Adults", "Mature"])
estimated_runtime = st.slider("Estimated runtime (in minutes):", 60, 180, 120)
# Process the movie concept
if st.button("Develop Movie Concept"):
with st.spinner("Developing movie concept..."):
input_text = (
f"Movie idea: {movie_idea}, Genre: {genre}, "
f"Target audience: {target_audience}, Estimated runtime: {estimated_runtime} minutes"
)
# Get the response from the assistant
response = movie_producer.run(input_text, stream=False)
st.write(response)