--- license: apache-2.0 base_model: - Qwen/Qwen3.5-4B language: - ko - en pipeline_tag: image-text-to-text library_name: transformers tags: - gui-agent - web-agent - computer-use - browser - korean ---
# KORMo-Web-4B **KORMo-Web-4B** is a 4B vision-language agent that completes real browser tasks **from screenshots alone**. Give it a request in Korean or English; it plans, clicks, types and moves between sites and tabs until the task is done. In the same live-web evaluation, it beats every open-weight web agent we compared, **by +9.6 points in English and +22.1 points in Korean**. On **Online-Mind2Web** it reaches **42.3% in English** and **42.3% in Korean**, which is **+22.3 / +28.8 points** over the base Qwen3.5-4B. ## Performance All models below ran **the same 612 live-website tasks** (300 English, 312 Korean), each with its own prompt and action format, and were scored by **the same LLM judge**. | Model | Size | Online-Mind2Web EN | Online-Mind2Web KO | |---|---:|---:|---:| | Qwen3.5-4B (base, no fine-tuning) | 4B | 20.0 | 13.5 | | Fara-1.5-4B | 4B | 20.7 | 7.7 | | UI-TARS-1.5-7B | 7B | 22.3 | 20.2 | | OpenWebRL-4B | 4B | 32.7 | 15.4 | | **KORMo-Web-4B (ours)** | **4B** | **42.3** | **42.3** | | KORMo-Web-9B (ours) | 9B | 51.0 | 48.1 | Success rate (%). The denominator is always the full task count, so crashed or empty runs count as failures. KORMo-Web-4B outperforms open web agents of similar size in both English and Korean. ## Why KORMo-Web - **Korean and English, natural requests.** Handles short commands as well as long, conversational instructions in either language. - **Screenshot-only.** It needs no DOM or accessibility tree; it acts on what is on screen, like a person, and checks each action's result on the next screenshot. - **Thinks, then acts.** A short reasoning step precedes every action, so its behaviour is easy to inspect and debug. - **Multi-site, multi-tab workflows.** It can search on one site, verify on another and write the result into a third, managing tabs on its own. - **Open and ready to run.** Apache-2.0 weights, a reference browser harness, the tool schema and the exact inference settings are all included. ## Quickstart Tested with **vLLM 0.23.0** and **transformers 5.12.1**. The model runs on a single GPU (TP=1). ### Run the agent **1. Install and download** ```bash pip install -U "vllm>=0.23.0" openai playwright huggingface_hub playwright install chromium huggingface-cli download KORMo-VL/KORMo-Web-4B --local-dir KORMo-Web-4B ``` **2. Start the model server** ```bash vllm serve ./KORMo-Web-4B --served-model-name KORMo-Web-4B \ --max-model-len 131072 --limit-mm-per-prompt '{"image":1,"video":0}' ``` **3. Run a browser task** ```bash python KORMo-Web-4B/examples/agent_playwright.py --model KORMo-Web-4B \ --task "다나와에서 50만 원 이하, 10인치 이상 태블릿 3개를 찾아서 가격을 알려줘" ``` The agent opens Chromium, prints each action as it goes, and finishes with the model's answer. ### Inference example (one step) Send one screenshot with the request and get back one action: ```python import base64, json from openai import OpenAI SYSTEM = open("KORMo-Web-4B/system_prompt.md").read().strip() TOOLS = json.load(open("KORMo-Web-4B/tools.json")) shot = base64.b64encode(open("screen.png", "rb").read()).decode() obs = ("\nscreen size: 1280 x 720\nCurrent tab: 0\nAvailable tabs:\n" "- Tab 0 (active): https://www.google.com/\n\nurl: https://www.google.com/\nscreenshot:\n") messages = [ {"role": "system", "content": SYSTEM}, {"role": "user", "content": [ {"type": "text", "text": "\n구글에서 KAIST 를 검색해서 공식 홈페이지를 열어줘.\n\n" + obs}, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{shot}"}}, {"type": "text", "text": "\n"}, ]}, ] client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") out = client.chat.completions.create( model="KORMo-Web-4B", messages=messages, tools=TOOLS, temperature=0.6, top_p=0.95, max_tokens=16384, extra_body={"top_k": 20, "chat_template_kwargs": {"enable_thinking": True}}, ) print(out.choices[0].message.content) ``` The output looks like this (illustrative): ```text I can see the Google home page with an empty search box in the center. I have not searched yet. My plan: 1. Click the search box. 2. Type "KAIST". 3. Press Enter and open the official site. 500 427 ``` Coordinates in the tool call are normalized to 0–1000. Convert them to pixels with `x / 1000 × width` and `y / 1000 × height`. ## How It Works ``` user task + observation (tabs, url, screenshot) assistant what I see · what is done · plan one action tool action result + new observation (newest screenshot only) … repeat until finished(answer) ``` - **Action space:** 22 browser tools: click, type, hotkey, scroll, drag, goto, tab control, `finished`, and others ([`tools.json`](tools.json)). - **Memory:** the full text history of thoughts, actions and observations is kept. Only the current screenshot is sent. - **Recommended settings:** temperature 0.6, top_p 0.95, top_k 20, thinking on, up to 16k tokens per step and 50 steps. These are already set in `generation_config.json`. The exact message format, parsing rules and feedback strings are in **[HARNESS.md](HARNESS.md)**. Follow it if you build your own harness. ## Evaluation Details | | | |---|---| | Tasks | Online-Mind2Web: 300 English, 312 Korean | | Judge | GPT-6 | ## Files | File | Description | |---|---| | `chat_template.jinja` | Chat template (Qwen3.5 XML tool calls, thinking on) | | `system_prompt.md` · `tools.json` | System prompt and 22-tool schema, verbatim from training | | `HARNESS.md` | Full harness specification | | `examples/agent_playwright.py` | Reference browser agent (Playwright + OpenAI-compatible API). It does not execute `upload`. | | `config.json` · `generation_config.json` · `processor_config.json` · `tokenizer*.json` | Model, sampling and processor configs | ## 한국어 요약 **KORMo-Web-4B**는 스크린샷만 보고 한국어·영어 웹 작업을 수행하는 4B 공개 웹 에이전트입니다. 같은 조건의 실제 웹 평가에서 비교한 공개 모델 중 가장 높은 점수를 받았습니다. - **Online-Mind2Web:** EN 42.3, KO 42.3 - 비슷한 크기의 공개 웹 에이전트보다 영어·한국어 모두에서 높은 성능을 보입니다. ## Acknowledgements Built on **[Qwen3.5-4B](https://huggingface.co/Qwen/Qwen3.5-4B)**. Evaluated on **Online-Mind2Web** and its Korean counterpart.