diff --git a/requirements.txt b/requirements.txt index f562733..f705524 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -browser-use==0.1.47 +browser-use==0.1.48 pyperclip==1.9.0 gradio==5.27.0 json-repair diff --git a/src/utils/config.py b/src/utils/config.py index b3d55fe..509bc82 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -59,5 +59,32 @@ model_names = { "Pro/THUDM/glm-4-9b-chat", ], "ibm": ["ibm/granite-vision-3.1-2b-preview", "meta-llama/llama-4-maverick-17b-128e-instruct-fp8", - "meta-llama/llama-3-2-90b-vision-instruct"] + "meta-llama/llama-3-2-90b-vision-instruct"], + "modelscope":[ + "Qwen/Qwen2.5-Coder-32B-Instruct", + "Qwen/Qwen2.5-Coder-14B-Instruct", + "Qwen/Qwen2.5-Coder-7B-Instruct", + "Qwen/Qwen2.5-72B-Instruct", + "Qwen/Qwen2.5-32B-Instruct", + "Qwen/Qwen2.5-14B-Instruct", + "Qwen/Qwen2.5-7B-Instruct", + "Qwen/QwQ-32B-Preview", + "Qwen/Qwen2.5-VL-3B-Instruct", + "Qwen/Qwen2.5-VL-7B-Instruct", + "Qwen/Qwen2.5-VL-32B-Instruct", + "Qwen/Qwen2.5-VL-72B-Instruct", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-14B", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", + "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B", + "deepseek-ai/DeepSeek-R1", + "deepseek-ai/DeepSeek-V3", + "Qwen/Qwen3-1.7B", + "Qwen/Qwen3-4B", + "Qwen/Qwen3-8B", + "Qwen/Qwen3-14B", + "Qwen/Qwen3-30B-A3B", + "Qwen/Qwen3-32B", + "Qwen/Qwen3-235B-A22B", + ], } diff --git a/src/utils/llm_provider.py b/src/utils/llm_provider.py index c285e36..beadb1f 100644 --- a/src/utils/llm_provider.py +++ b/src/utils/llm_provider.py @@ -323,5 +323,20 @@ def get_llm_model(provider: str, **kwargs): model_name=kwargs.get("model_name", "Qwen/QwQ-32B"), temperature=kwargs.get("temperature", 0.0), ) + elif provider == "modelscope": + if not kwargs.get("api_key", ""): + api_key = os.getenv("MODELSCOPE_API_KEY", "") + else: + api_key = kwargs.get("api_key") + if not kwargs.get("base_url", ""): + base_url = os.getenv("MODELSCOPE_ENDPOINT", "") + else: + base_url = kwargs.get("base_url") + return ChatOpenAI( + api_key=api_key, + base_url=base_url, + model_name=kwargs.get("model_name", "Qwen/QwQ-32B"), + temperature=kwargs.get("temperature", 0.0), + ) else: raise ValueError(f"Unsupported provider: {provider}") diff --git a/src/webui/webui_manager.py b/src/webui/webui_manager.py index 542d387..0a9d5e1 100644 --- a/src/webui/webui_manager.py +++ b/src/webui/webui_manager.py @@ -7,6 +7,7 @@ from datetime import datetime from typing import Optional, Dict, List import uuid import asyncio +import time from gradio.components import Component from browser_use.browser.browser import Browser @@ -108,6 +109,9 @@ class WebuiManager: update_components[comp] = comp.__class__(value=comp_val, type="messages") else: update_components[comp] = comp.__class__(value=comp_val) + if comp_id == "agent_settings.planner_llm_provider": + yield update_components # yield provider, let callback run + time.sleep(0.1) # wait for Gradio UI callback config_status = self.id_to_component["load_save_config.config_status"] update_components.update(