|
|
""" |
|
|
To use it, you'll need to install streamlit, and run with: |
|
|
|
|
|
python -m streamlit run streamlit_demo.py |
|
|
|
|
|
""" |
|
|
|
|
|
import os |
|
|
import sys |
|
|
import asyncio |
|
|
import streamlit as st |
|
|
from dotenv import load_dotenv |
|
|
|
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
|
|
|
|
|
from browser_use import Agent |
|
|
from browser_use.browser.browser import Browser, BrowserConfig |
|
|
from browser_use.controller.service import Controller |
|
|
|
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
|
|
|
def get_llm(provider: str): |
|
|
if provider == 'anthropic': |
|
|
from langchain_anthropic import ChatAnthropic |
|
|
api_key = os.getenv("ANTHROPIC_API_KEY") |
|
|
if not api_key: |
|
|
st.error("Error: ANTHROPIC_API_KEY is not set. Please provide a valid API key.") |
|
|
st.stop() |
|
|
|
|
|
return ChatAnthropic( |
|
|
model_name='claude-3-5-sonnet-20240620', timeout=25, stop=None, temperature=0.0 |
|
|
) |
|
|
elif provider == 'openai': |
|
|
from langchain_openai import ChatOpenAI |
|
|
api_key = os.getenv("OPENAI_API_KEY") |
|
|
if not api_key: |
|
|
st.error("Error: OPENAI_API_KEY is not set. Please provide a valid API key.") |
|
|
st.stop() |
|
|
|
|
|
return ChatOpenAI(model='gpt-4o', temperature=0.0) |
|
|
else: |
|
|
st.error(f'Unsupported provider: {provider}') |
|
|
st.stop() |
|
|
|
|
|
|
|
|
def initialize_agent(query: str, provider: str): |
|
|
llm = get_llm(provider) |
|
|
controller = Controller() |
|
|
browser = Browser(config=BrowserConfig()) |
|
|
|
|
|
return Agent( |
|
|
task=query, |
|
|
llm=llm, |
|
|
controller=controller, |
|
|
browser=browser, |
|
|
use_vision=True, |
|
|
max_actions_per_step=1, |
|
|
), browser |
|
|
|
|
|
|
|
|
st.title("Automated Browser Agent with LLMs π€") |
|
|
|
|
|
query = st.text_input("Enter your query:", "go to reddit and search for posts about browser-use") |
|
|
provider = st.radio("Select LLM Provider:", ["openai", "anthropic"], index=0) |
|
|
|
|
|
if st.button("Run Agent"): |
|
|
st.write("Initializing agent...") |
|
|
agent, browser = initialize_agent(query, provider) |
|
|
|
|
|
async def run_agent(): |
|
|
with st.spinner("Running automation..."): |
|
|
await agent.run(max_steps=25) |
|
|
st.success("Task completed! π") |
|
|
|
|
|
asyncio.run(run_agent()) |
|
|
|
|
|
st.button("Close Browser", on_click=lambda: asyncio.run(browser.close())) |
|
|
|