mirror of
https://github.com/browser-use/browser-use.git
synced 2026-09-14 19:59:47 +08:00
6f8b0626b6
Browser Use Cloud does not serve `browser-use/bu-30b-a3b-preview`. The gateway still has the route (cloud `backend/llm_use/gateway/pricing.py` MODAL_MODELS, `service.py` _call_modal), but the Modal app behind it, `browser-use-llm-prod` in browser-use/deploy-llm, was last deployed on 2025-12-16 and every production call since returns upstream HTTP 503, which the gateway reports to the caller as a generic 500. The weights are public and in use: https://huggingface.co/browser-use/bu-30b-a3b-preview is a public repo with 2.34k downloads in the last month. So instead of dropping the model, say what it actually is - open weights you host yourself. - `examples/models/bu_oss.py` now starts from a vLLM server and talks to it through `ChatOpenAI`, so it needs no BROWSER_USE_API_KEY and does not depend on the dead Cloud route. - The `ChatBrowserUse` docstring says Cloud does not serve it. - The skills model table gains a self-hosting section with the vLLM command from the model card, and loses the priceless OSS row. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018oComYHNbeV4e21v22Bbdn
Codebase Structure
The code structure inspired by https://github.com/Netflix/dispatch.
Very good structure on how to make a scalable codebase is also in this repo.
Just a brief document about how we should structure our backend codebase.
Code Structure
src/
/<service name>/
models.py
services.py
prompts.py
views.py
utils.py
routers.py
/_<subservice name>/
Service.py
Always a single file, except if it becomes too long - more than ~500 lines, split it into _subservices
Views.py
Always split the views into two parts
# All
...
# Requests
...
# Responses
...
If too long → split into multiple files
Prompts.py
Single file; if too long → split into multiple files (one prompt per file or so)
Routers.py
Never split into more than one file