# 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)