Spaces:
Sleeping
Sleeping
| """ | |
| 🤖 Fagun Browser Automation Testing Agent - Agent Settings Tab | |
| ============================================================== | |
| UI components for agent configuration and settings. | |
| Author: Mejbaur Bahar Fagun | |
| Role: Software Engineer in Test | |
| LinkedIn: https://www.linkedin.com/in/mejbaur/ | |
| """ | |
| import json | |
| import os | |
| import gradio as gr | |
| from gradio.components import Component | |
| from typing import Any, Dict, Optional | |
| from src.webui.webui_manager import WebuiManager | |
| from src.utils import config | |
| import logging | |
| from functools import partial | |
| logger = logging.getLogger(__name__) | |
| def update_model_dropdown(llm_provider): | |
| """ | |
| Update the model name dropdown with predefined models for the selected provider. | |
| """ | |
| # Use predefined models for the selected provider | |
| if llm_provider in config.model_names: | |
| return gr.Dropdown(choices=config.model_names[llm_provider], value=config.model_names[llm_provider][0], | |
| interactive=True) | |
| else: | |
| return gr.Dropdown(choices=[], value="", interactive=True, allow_custom_value=True) | |
| def create_agent_settings_tab(webui_manager: WebuiManager): | |
| """ | |
| Creates an agent settings tab. | |
| """ | |
| input_components = set(webui_manager.get_components()) | |
| tab_components = {} | |
| with gr.Group(): | |
| with gr.Row(): | |
| llm_provider = gr.Dropdown( | |
| choices=[provider for provider, model in config.model_names.items()], | |
| label="🤖 AI Service Provider", | |
| value=os.getenv("DEFAULT_LLM", "openai"), | |
| info="Choose which AI company's service to use (OpenAI, Google, etc.)", | |
| interactive=True | |
| ) | |
| llm_model_name = gr.Dropdown( | |
| label="🧠 AI Model", | |
| choices=config.model_names[os.getenv("DEFAULT_LLM", "openai")], | |
| value=config.model_names[os.getenv("DEFAULT_LLM", "openai")][0], | |
| interactive=True, | |
| allow_custom_value=True, | |
| info="Pick the specific AI model to use (like GPT-4, Claude, etc.)" | |
| ) | |
| with gr.Row(): | |
| llm_temperature = gr.Slider( | |
| minimum=0.0, | |
| maximum=2.0, | |
| value=0.6, | |
| step=0.1, | |
| label="🎲 AI Creativity Level", | |
| info="Lower = More predictable, Higher = More creative responses", | |
| interactive=True | |
| ) | |
| use_vision = gr.Checkbox( | |
| label="👁️ Enable Visual Analysis", | |
| value=True, | |
| info="Let AI see and analyze screenshots of websites", | |
| interactive=True | |
| ) | |
| ollama_num_ctx = gr.Slider( | |
| minimum=2 ** 8, | |
| maximum=2 ** 16, | |
| value=16000, | |
| step=1, | |
| label="📝 Memory Size (Ollama only)", | |
| info="How much information AI can remember at once (higher = slower but smarter)", | |
| visible=False, | |
| interactive=True | |
| ) | |
| with gr.Row(): | |
| llm_base_url = gr.Textbox( | |
| label="🌐 Custom API URL", | |
| value="", | |
| info="Only needed if using a custom AI service (leave blank for standard services)" | |
| ) | |
| llm_api_key = gr.Textbox( | |
| label="🔑 Your API Key", | |
| type="password", | |
| value="", | |
| info="Get this from your AI service provider (OpenAI, Google, etc.)" | |
| ) | |
| with gr.Group(): | |
| with gr.Row(): | |
| planner_llm_provider = gr.Dropdown( | |
| choices=[provider for provider, model in config.model_names.items()], | |
| label="🎯 Planning AI Service", | |
| info="Optional: Different AI for planning complex tasks", | |
| value=None, | |
| interactive=True | |
| ) | |
| planner_llm_model_name = gr.Dropdown( | |
| label="🧠 Planning AI Model", | |
| interactive=True, | |
| allow_custom_value=True, | |
| info="AI model for planning and organizing tasks" | |
| ) | |
| with gr.Row(): | |
| planner_llm_temperature = gr.Slider( | |
| minimum=0.0, | |
| maximum=2.0, | |
| value=0.6, | |
| step=0.1, | |
| label="🎲 Planning AI Creativity", | |
| info="How creative the planning AI should be", | |
| interactive=True | |
| ) | |
| planner_use_vision = gr.Checkbox( | |
| label="👁️ Enable Visual Planning", | |
| value=False, | |
| info="Let planning AI see website screenshots", | |
| interactive=True | |
| ) | |
| planner_ollama_num_ctx = gr.Slider( | |
| minimum=2 ** 8, | |
| maximum=2 ** 16, | |
| value=16000, | |
| step=1, | |
| label="📝 Planning Memory Size", | |
| info="How much information planning AI can remember (Ollama only)", | |
| visible=False, | |
| interactive=True | |
| ) | |
| with gr.Row(): | |
| planner_llm_base_url = gr.Textbox( | |
| label="🌐 Planning API URL", | |
| value="", | |
| info="Custom URL for planning AI service (leave blank for standard)" | |
| ) | |
| planner_llm_api_key = gr.Textbox( | |
| label="🔑 Planning API Key", | |
| type="password", | |
| value="", | |
| info="API key for planning AI service" | |
| ) | |
| with gr.Row(): | |
| max_steps = gr.Slider( | |
| minimum=1, | |
| maximum=1000, | |
| value=100, | |
| step=1, | |
| label="🔄 Maximum Testing Steps", | |
| info="How many steps AI can take to complete a task", | |
| interactive=True | |
| ) | |
| max_actions = gr.Slider( | |
| minimum=1, | |
| maximum=100, | |
| value=10, | |
| step=1, | |
| label="⚡ Actions Per Step", | |
| info="How many actions AI can do in each step", | |
| interactive=True | |
| ) | |
| with gr.Row(): | |
| max_input_tokens = gr.Number( | |
| label="📄 Maximum Text Input", | |
| value=128000, | |
| precision=0, | |
| interactive=True | |
| ) | |
| tool_calling_method = gr.Dropdown( | |
| label="🛠️ AI Communication Method", | |
| value="auto", | |
| interactive=True, | |
| allow_custom_value=True, | |
| choices=['function_calling', 'json_mode', 'raw', 'auto', 'tools', "None"], | |
| visible=True | |
| ) | |
| tab_components.update(dict( | |
| llm_provider=llm_provider, | |
| llm_model_name=llm_model_name, | |
| llm_temperature=llm_temperature, | |
| use_vision=use_vision, | |
| ollama_num_ctx=ollama_num_ctx, | |
| llm_base_url=llm_base_url, | |
| llm_api_key=llm_api_key, | |
| planner_llm_provider=planner_llm_provider, | |
| planner_llm_model_name=planner_llm_model_name, | |
| planner_llm_temperature=planner_llm_temperature, | |
| planner_use_vision=planner_use_vision, | |
| planner_ollama_num_ctx=planner_ollama_num_ctx, | |
| planner_llm_base_url=planner_llm_base_url, | |
| planner_llm_api_key=planner_llm_api_key, | |
| max_steps=max_steps, | |
| max_actions=max_actions, | |
| max_input_tokens=max_input_tokens, | |
| tool_calling_method=tool_calling_method, | |
| )) | |
| webui_manager.add_components("agent_settings", tab_components) | |
| llm_provider.change( | |
| fn=lambda x: gr.update(visible=x == "ollama"), | |
| inputs=llm_provider, | |
| outputs=ollama_num_ctx | |
| ) | |
| llm_provider.change( | |
| lambda provider: update_model_dropdown(provider), | |
| inputs=[llm_provider], | |
| outputs=[llm_model_name] | |
| ) | |
| planner_llm_provider.change( | |
| fn=lambda x: gr.update(visible=x == "ollama"), | |
| inputs=[planner_llm_provider], | |
| outputs=[planner_ollama_num_ctx] | |
| ) | |
| planner_llm_provider.change( | |
| lambda provider: update_model_dropdown(provider), | |
| inputs=[planner_llm_provider], | |
| outputs=[planner_llm_model_name] | |
| ) | |