UI additions
This commit is contained in:
parent
8bb26cca49
commit
5450e8c9fa
3 changed files with 82 additions and 39 deletions
|
|
@ -0,0 +1,82 @@
|
|||
import asyncio
|
||||
import streamlit as st
|
||||
from browser_use import Agent, SystemPrompt
|
||||
from langchain_google_genai import ChatGoogleGenerativeAI
|
||||
from langchain_openai import ChatOpenAI
|
||||
from langchain_anthropic import ChatAnthropic
|
||||
import re
|
||||
|
||||
async def generate_meme(query: str, api_key: str) -> None:
|
||||
llm = ChatAnthropic(
|
||||
model="claude-3-5-sonnet-20240620",
|
||||
api_key=api_key
|
||||
)
|
||||
|
||||
task_description = (
|
||||
"You are a meme generator expert. You are given a query and you need to generate a meme for it.\n"
|
||||
"1. Go to https://imgflip.com/memetemplates \n"
|
||||
"2. Click on the Search bar in the middle and search for ONLY ONE MAIN ACTION VERB (like 'bully', 'laugh', 'cry') in this query: '{0}'\n"
|
||||
"3. Choose any meme template that metaphorically fits the meme topic: '{0}'\n"
|
||||
" by clicking on the 'Add Caption' button below it\n"
|
||||
"4. Write a Top Text (setup/context) and Bottom Text (punchline/outcome) related to '{0}'.\n"
|
||||
"5. Check the preview making sure it is funny and a meaningful meme. Adjust text directly if needed. \n"
|
||||
"6. Look at the meme and text on it, if it doesnt make sense, PLEASE retry by filling the text boxes with different text. \n"
|
||||
"7. Click on the Generate meme button to generate the meme\n"
|
||||
"8. Copy the image link and give it as the output\n"
|
||||
).format(query)
|
||||
|
||||
agent = Agent(
|
||||
task=task_description,
|
||||
llm=llm,
|
||||
max_actions_per_step=5,
|
||||
max_failures=25
|
||||
)
|
||||
|
||||
history = await agent.run()
|
||||
|
||||
# Extract final result from agent history
|
||||
final_result = history.final_result()
|
||||
|
||||
# Use regex to find the meme URL in the result
|
||||
url_match = re.search(r'https://imgflip\.com/i/(\w+)', final_result)
|
||||
if url_match:
|
||||
meme_id = url_match.group(1)
|
||||
# Convert to direct image URL format
|
||||
return f"https://i.imgflip.com/{meme_id}.jpg"
|
||||
return None
|
||||
|
||||
def main():
|
||||
st.title("AI Meme Generator - Browser Use")
|
||||
st.info("This AI browser agent does browser automation to generate memes based on your input with browser use. Please enter your API key and describe the meme you want to generate.")
|
||||
|
||||
# Configuration Settings
|
||||
with st.sidebar:
|
||||
st.header("⚙️ Configuration Settings")
|
||||
api_key = st.text_input("Enter your Claude API Key", type="password")
|
||||
|
||||
# Main content area
|
||||
st.markdown('<p style="font-size: 20px; font-weight: bold;">🎨 Describe the Meme You Want to Generate</p>', unsafe_allow_html=True)
|
||||
query = st.text_input("Enter your meme idea (e.g., 'Ilya's SSI quietly looking at the OpenAI vs Deepseek debate while diligently working on ASI')", "")
|
||||
|
||||
if st.button("Generate Meme"):
|
||||
if api_key and query:
|
||||
with st.spinner("🤖 Generating your meme... This might take a minute"):
|
||||
try:
|
||||
meme_url = asyncio.run(generate_meme(query, api_key))
|
||||
|
||||
if meme_url:
|
||||
st.success("🎉 Meme Generated Successfully!")
|
||||
st.image(meme_url, caption="Your Generated Meme", use_container_width=True)
|
||||
|
||||
# Display clickable link
|
||||
st.markdown(f"**Meme Link:** [Open in ImgFlip]({meme_url})")
|
||||
else:
|
||||
st.error("Could not retrieve meme URL. Please try again.")
|
||||
|
||||
except Exception as e:
|
||||
st.error(f"Error generating meme: {str(e)}")
|
||||
else:
|
||||
st.warning("⚠️ Please provide both API key and meme idea")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
import asyncio
|
||||
from browser_use import Agent, SystemPrompt
|
||||
from langchain_google_genai import ChatGoogleGenerativeAI
|
||||
from langchain_openai import ChatOpenAI
|
||||
from langchain_anthropic import ChatAnthropic
|
||||
|
||||
async def generate_meme(query: str) -> None:
|
||||
api_key = "sk-A" # Replace with your actual DeepSeek API key
|
||||
llm = ChatAnthropic(
|
||||
model="claude-3-5-sonnet-20240620",
|
||||
api_key=api_key
|
||||
)
|
||||
|
||||
task_description = (
|
||||
"You are a meme generator expert. You are given a query and you need to generate a meme for it.\n"
|
||||
"1. Go to https://imgflip.com/memetemplates \n"
|
||||
"2. Click on the Search bar in the middle and search for ONLY ONE MAIN ACTION VERB (like 'bully', 'laugh', 'cry') in this query: '{0}'\n"
|
||||
"3. Choose any meme template that metaphorically fits the meme topic: '{0}'\n"
|
||||
" by clicking on the 'Add Caption' button below it\n"
|
||||
"4. Write a Top Text (setup/context) and Bottom Text (punchline/outcome) related to '{0}'.\n"
|
||||
"5. Check the preview making sure it is funny and a meaningful meme. Adjust text directly if needed. \n"
|
||||
"6. Look at the meme and text on it, if it doesnt make sense, PLEASE retry by filling the text boxes with different text. \n"
|
||||
"7. Click on the Generate meme button to generate the meme\n"
|
||||
"8. Copy the image link and give it as the output\n"
|
||||
).format(query)
|
||||
|
||||
agent = Agent(
|
||||
task=task_description,
|
||||
llm=llm,
|
||||
max_actions_per_step=5,
|
||||
max_failures=25
|
||||
)
|
||||
|
||||
history = await agent.run()
|
||||
history.final_result()
|
||||
|
||||
if __name__ == '__main__':
|
||||
query = "Elon Musk bullying sam altman about trump winning the election"
|
||||
asyncio.run(generate_meme(query))
|
||||
Loading…
Reference in a new issue