WorldTUI: model 360M mô phỏng terminal bằng dự đoán thay đổi màn hình
WorldTUI không chạy shell hay filesystem thật. Model nhận từng phím bấm, rồi dự đoán phần màn hình terminal và vị trí con trỏ cần thay đổi. Demo cho thấy tiềm năng lẫn giới hạn của giao diện CLI được mô phỏng bằng model nhỏ.
Bạn gõ pythoon, terminal vẫn phản hồi. Nhưng đó không phải bằng chứng lệnh đã chạy — mà là dấu hiệu bạn đang tương tác với một mô hình dự đoán màn hình.
WorldTUI là thử nghiệm fine-tune một model 360M tham số để “đóng vai” terminal. Không có shell, filesystem hay tiến trình thật phía sau: mỗi phím bấm đi vào model, và model dự đoán những hàng nào trên màn hình cần đổi cùng vị trí con trỏ mới.
Nó có thể mô phỏng thao tác tạo file, vim, tmux hay Snake trong nhiều tình huống quen thuộc. Tuy nhiên, đây không phải terminal đáng tin cậy để build, test hay kiểm tra trạng thái hệ thống.
Terminal như một bài toán dự đoán trạng thái
Model cuối cùng được xây dựng từ Qwen2.5-Coder-0.5B. Thay vì nhận lệnh rồi chuyển cho Bash thực thi, WorldTUI nhận một biểu diễn của trạng thái terminal, gồm:
kích thước màn hình;
nội dung hiện có;
vị trí con trỏ;
byte đầu vào của phím vừa bấm;
hoặc tín hiệu chờ thời gian khi người dùng không nhập gì.
Đầu ra không phải đoạn văn bản nối tiếp như chatbot thông thường. Model trả về một “delta” cho màn hình: hàng nào cần viết lại, ghi từ cột nào, và sau đó con trỏ nằm ở đâu.
Ví dụ, nếu prompt đang kết thúc ở cột 17, người dùng gõ l, model có thể ghi l tại cột đó rồi đưa con trỏ sang cột 18.
Cách biểu diễn này phù hợp với terminal hơn việc chỉ nối thêm text ở cuối. Một phím Esc trong vim có thể đổi chế độ; clear xóa màn hình và đưa con trỏ lên đầu; còn thao tác cuộn hoặc đọc man làm thay đổi nhiều vị trí trên lưới ký tự.
Tối ưu đáng chú ý: dự đoán phần thay đổi, không sinh lại cả màn hình
Khi terminal cuộn một dòng, việc sinh lại toàn bộ màn hình sẽ rất tốn token. WorldTUI dùng thao tác COPY để sao chép một hàng từ màn hình trước sang vị trí mới.
Theo tác giả, với màn hình rộng khoảng 96 ký tự, một hàng cuộn có thể giảm từ khoảng 96 token xuống còn 3 token. Cùng cơ chế này cũng được dùng cho các tình huống như xóa màn hình, chèn hoặc xóa dòng trong vim và điều hướng trang man.
Model dùng vocabulary 333 token:
256 token tương ứng các giá trị byte;
64 token cho các hàng màn hình;
một số token dành cho thao tác đặc biệt.
Đầu ra được ràng buộc bằng grammar để mọi dự đoán đều là một cập nhật màn hình hợp lệ. Đây là một lựa chọn thiết kế đáng chú ý: thay vì bắt model tái tạo toàn bộ trạng thái sau mỗi phím, bài toán được chuyển thành dự đoán patch có cấu trúc.
Dữ liệu đến từ terminal thật trong Docker
Tác giả không tìm được bộ dữ liệu có căn chỉnh chính xác giữa phím bấm và trạng thái màn hình, nên tự tạo dữ liệu bằng cách chạy chương trình thật trong container Docker.
Các phiên được tổng hợp với nhiều biến thể:
username, hostname, kiểu prompt và kích thước terminal;
thư mục, file và ngữ cảnh sử dụng giả lập;
các hoạt động như sửa file, vim, Python và tmux;
thao tác gõ từng phím, gồm tab completion và lỗi gõ;
phiên bắt đầu giữa chừng thay vì luôn từ prompt Bash trống.
Tỷ lệ lỗi gõ được đặt là 1,2%. Khoảng 35% phiên bắt đầu từ trạng thái đang diễn ra để buộc model tiếp tục từ nhiều bối cảnh khác nhau. Kích thước terminal chủ yếu là 32×96, bên cạnh một số phiên 24×80 và 40×120.
Bộ dữ liệu cuối có 336.000 episode, tương ứng khoảng 2 tỷ token. Tác giả cho biết quá trình huấn luyện và các lần tinh chỉnh sau đó mất khoảng 75 GPU-giờ trên RTX 4090.
Cho model học cách sửa lỗi của chính mình
Lỗi nhỏ trong terminal có thể tích lũy nhanh. Nếu model viết sai tên file, các lệnh sau dễ tiếp tục dựa trên tên sai đó.
Để xử lý, tác giả áp dụng ý tưởng từ DAgger: huấn luyện trên các trạng thái mà model thực sự đi tới, thay vì chỉ học từ các phiên mẫu hoàn hảo.
Quy trình được mô tả như sau:
Chọn một thời điểm trong phiên terminal đã ghi lại.
Cho model dự đoán 1–4 sự kiện tiếp theo.
So sánh màn hình model tạo ra với màn hình thật.
Nếu sai khác đủ nhỏ, tạo một delta để sửa màn hình ở bước tiếp theo.
Tiếp tục huấn luyện từ trạng thái đã sửa và một số sự kiện thật kế tiếp.
Tác giả chỉ dùng các hiệu chỉnh mà model có đủ thông tin để suy ra: từ mới xuất hiện trong bản sửa phải từng có mặt trên màn hình thật trước đó hoặc trong phần người dùng đã gõ. Mục tiêu là tránh vô tình thưởng cho hallucination.
Theo số liệu tác giả công bố, kết hợp tự sửa lỗi và bổ sung dữ liệu đã nâng PresetBench từ 24/47 lên 38/47 ở int4.
Benchmark: tốt hơn model nền, nhưng chưa phải filesystem
Tác giả dùng ShellBench gồm 106 lệnh trong 24 phiên Bash viết tay, chấm theo đầu ra chính xác.
| Model | ShellBench /106 |
|---|---:|
| Qwen2.5-Coder-0.5B, prompted | 52 |
| Qwen3-0.6B, prompted | 60 |
| WorldTUI | 80 |
Ở phép thử đọc lại file, WorldTUI đạt 9/13, trong khi hai model được prompt đạt lần lượt 2/13 và 3/13.
Dù vậy, tác giả cũng nêu rõ model còn xa mới trở thành filesystem đáng tin cậy. Nó xử lý tương đối tốt các lệnh quen thuộc, nhưng dễ sai khi kết hợp lệnh theo cách mới. Ví dụ, sau:
text
echo green >> colors
lệnh:
text
cat colors
có thể không hiển thị đúng nội dung vừa được thêm.
Đây là ranh giới quan trọng: WorldTUI không xác nhận file có tồn tại, lệnh có thực sự chạy, hay build có thành công. Nó dự đoán một terminal có thể trông như thế nào.
Cách tự thử demo
Demo có dung lượng 208 MB, được thiết kế cho trình duyệt desktop hỗ trợ WebGPU và bàn phím vật lý. Tác giả khuyến nghị Chrome hoặc Edge; điện thoại hiện đại có thể chạy nhưng rất chậm.
Để thử:
Mở demo WorldTUI trên desktop.
Dùng bàn phím vật lý.
Gõ:
text
pythoon
Thử các luồng quen thuộc như lệnh terminal, vim, tmux hoặc Snake.
Nếu tạo màn hình khởi đầu tùy chỉnh, thay đổi số hàng và số cột để quan sát rằng kích thước terminal cũng là một phần đầu vào của model.
Bài học cho người xây coding agent
WorldTUI không thay thế shell thật, container thật hay môi trường CI. Các tác vụ như build, test, migration, đọc file, thao tác Git và kiểm tra quyền truy cập vẫn cần thực thi trong môi trường có trạng thái thật.
Nhưng thử nghiệm này gợi ra một điểm thiết kế hữu ích: terminal không chỉ là chuỗi input/output. Nó là giao diện có trạng thái — màn hình, con trỏ, chế độ ứng dụng, lịch sử thao tác và thời gian.
Với agent, có thể tách ba lớp rõ ràng:
Khám phá và lập kế hoạch: model suy luận về thao tác cần làm.
Kiểm tra chính sách và quyền hạn: hệ thống xác định thao tác nào được phép.
Thực thi có kiểm chứng: chỉ các lệnh được duyệt mới chạy trong shell hoặc container thật.
Nếu dùng mô phỏng kiểu này trong sản phẩm, cần gắn nhãn rõ ràng rằng đó là trạng thái dự đoán. Không nên xem output mô phỏng là bằng chứng một lệnh đã chạy thành công.
WorldTUI hấp dẫn nhất không phải ở lời hứa thay shell bằng LLM. Giá trị của nó nằm ở cách đóng gói một giao diện có trạng thái thành bài toán dự đoán cập nhật nhỏ, có cấu trúc — và ở việc cho thấy một model nhỏ vẫn có thể tạo ra trải nghiệm terminal khá thuyết phục, dù chưa đủ để thay thế hệ thống thật.