File size: 4,066 Bytes
1650939
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d5eccc1
 
 
 
1650939
 
 
d5eccc1
 
 
 
 
 
 
 
 
 
1650939
d5eccc1
 
 
 
1650939
d5eccc1
 
1650939
 
d5eccc1
 
1650939
 
 
 
 
d5eccc1
 
 
 
1650939
 
 
d5eccc1
 
1650939
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d5eccc1
1650939
 
 
d5eccc1
1650939
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d5eccc1
1650939
 
d5eccc1
1650939
 
d5eccc1
1650939
 
 
d5eccc1
1650939
 
d5eccc1
 
 
1650939
 
d5eccc1
 
1650939
 
d5eccc1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# import os
# import subprocess

# # Install BrowserGym dependencies before running the main application
# def install_browsergym():
#     try:
#         print("Installing BrowserGym dependencies...")
#         subprocess.run("cd BrowserGym && make install", shell=True, check=True)
#         print("BrowserGym installation completed successfully")
#     except subprocess.CalledProcessError as e:
#         print(f"Error installing BrowserGym: {e}")
#         raise

# install_browsergym()

import os
import logging
import gradio as gr
import openai
import multiprocessing

from process_run import process_run

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(),
    ]
)
logger = logging.getLogger(__name__)
logger.setLevel('INFO')

# Set your OpenAI API key
openai.api_key = os.getenv("OPENAI_API_KEY")


# Example instructions to display
EXAMPLES = [
    "When did the solar system form? Find on wikipedia.",
    "Find the rating of Monopoly (1935) on boardgamegeek.com",
]

URL_EXAMPLES = [
    "about:blank",
    "https://www.wikipedia.org",
    "https://www.boardgamegeek.com"
]

def main():
    logger.info("Starting BrowserGym web agent")
    
    with gr.Blocks(title="WebShephered Demo") as demo:
        # Add CSS for outlined groups
        gr.Markdown("# WebShephered Demo")
        with gr.Row():
            with gr.Column(scale=2):
                with gr.Column():
                    instruction = gr.Textbox(
                        label="Instruction",
                        placeholder="Enter your instruction here",
                        lines=2,
                    )
                    gr.Examples(
                        examples=[[e] for e in EXAMPLES],
                        inputs=instruction,
                        cache_examples=False,
                    )
                
                gr.Markdown("\n\n")
                
                with gr.Column():
                    start_url = gr.Textbox(
                        label="Starting URL",
                        placeholder="URL to start the browser at",
                        value="about:blank"
                    )
                    gr.Examples(
                        examples=URL_EXAMPLES,
                        inputs=start_url,
                        cache_examples=False,
                    )

                gr.Markdown("\n\n")

                model_name = gr.Dropdown(
                    label="Agent Model",
                    choices=["gpt-4o"],
                    value="gpt-4o"
                )
                run_btn = gr.Button("Run Demo")

                gr.Markdown("---")
                
                with gr.Column():
                    gr.Markdown("## Current State")
                    state_view = gr.Markdown()
                    browser_view = gr.Image(label="Browser View")

                    gr.Markdown("### Task Checklist from WebShephered")
                    checklist_view = gr.Markdown()
                    
                    gr.Markdown("### Action Selection in current step")
                    with gr.Row() as rm_row:
                        rm_cards_container = gr.HTML()
            with gr.Column(scale=2):
                gr.Markdown("## Trajectory")
                trajectory_container = gr.HTML() # Placeholder for our custom trajectory component

        
            
        run_btn.click(
            fn=process_run,
            inputs=[instruction, model_name, start_url],
            outputs=[state_view, browser_view, checklist_view, rm_cards_container, trajectory_container],
            api_name="run_agent",
            concurrency_limit=32,
            show_progress=True
        )

    logger.info("Launching Gradio interface")
    # Set max_threads to allow multiple concurrent requests
    demo.launch(share=True, max_threads=32)

if __name__ == "__main__":
    # Add support for multiprocessing on Windows
    multiprocessing.freeze_support()
    main()