Twitter_Wrapped / app.py
BroBro87's picture
Update app.py
58d2388 verified
raw
history blame
2.33 kB
import gradio as gr
from composio_llamaindex import ComposioToolSet, App, Action
from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.llms import ChatMessage
from llama_index.llms.openai import OpenAI
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Initialize ComposioToolSet and OpenAI LLM
toolset = ComposioToolSet(api_key=os.getenv('COMPOSIO_API_KEY'))
tools = toolset.get_tools(apps=[App.TWITTER])
llm = OpenAI(model="gpt-4o", api_key=os.getenv('OPENAI_API_KEY'))
# Set up prefix messages for the agent
prefix_messages = [
ChatMessage(
role="system",
content=(
f"""
You are a Twitter wrapped generator. Based on the Twitter username provided, analyze the user's profile, recent tweets, and engagement data.
Create a personalized "Twitter Wrapped" summary highlighting their top tweets, most engaging content, follower growth, and other key insights.
Generate the output in a structured JSON format that can be easily parsed programmatically. Include fields like "top_tweets", "engagement_stats", "follower_growth", and "summary_sheet_link".
"""
),
)
]
# Initialize the agent
agent = FunctionCallingAgentWorker(
tools=tools,
llm=llm,
prefix_messages=prefix_messages,
max_function_calls=10,
allow_parallel_tool_calls=False,
verbose=True,
).as_agent()
def generate_wrapped(username):
"""
Function to generate a "Twitter Wrapped" summary based on the Twitter username provided by the user.
"""
user_input = f"Create a Twitter Wrapped summary for the username: {username}"
response = agent.chat(user_input)
return response
# Create Gradio interface
with gr.Blocks() as demo:
gr.Markdown("""### Twitter Wrapped Generator
Enter a Twitter username below to generate your personalized Twitter Wrapped summary.
""")
username_input = gr.Textbox(label="Twitter Username", placeholder="e.g., @elonmusk")
output = gr.Textbox(label="Output", placeholder="Your Twitter Wrapped summary and Google Sheet link will appear here.", lines=10)
generate_button = gr.Button("Generate Wrapped")
generate_button.click(fn=generate_wrapped, inputs=username_input, outputs=output)
# Launch the Gradio app
demo.launch()