TL;DR
- Bên trong Claude Code, jev-gateway không bao giờ ép dùng một tool. Một dòng duy nhất,
steer: thinking || cached ? "hint" : "tool_choice", chuyển sang hint mode ngay khi request có extended thinking hoặc một cuộc hội thoại đã cache, và một request Claude Code thật có cả hai ngay từ lượt đầu. - Hint là một
<system-reminder>hai câu gắn vào cuối tin nhắn user cuối cùng. Model được tự do bỏ qua, và khi Claude Code đã tự thêm system reminder của nó làm block cuối, hint hoàn toàn không được gắn. - Benchmark của chính gateway (120 session) cho thấy với các model Claude, routing có lợi khi debug và tốn thêm khi làm feature: Opus 5 tăng +61% input token, +47% request và +83% thời gian ở task feature, Sonnet 5 tăng +16% input và +37% thời gian.
- Codex mới là nơi Jev phát huy: gateway ép tool ở đó, Jev điều hướng 76 đến 100% request của Codex so với 34 đến 51% request của Claude Code.
- Đo trên máy của chúng tôi: một request Claude Code 2.1.280 sạch đã mang 24 tool và 47,411 token prefix; một setup bình thường có MCP server mang 40 tool và 57,277 token, và gateway gửi lại danh sách đó cho Jev ở mọi lần gọi.
- fast-jev-compaction, tool Jev được gắn sao nhiều nhất, có các issue đang mở nói hook của nó không đăng ký được trên các bản Claude Code hiện tại và toàn bộ transcript bị gửi tới một API bên thứ ba. Chưa nên dùng.
Các phép đo cho thấy gì
Jev là một model ra quyết định, không phải model sinh văn bản. Nhà cung cấp định giá input ở $0.042 / MTok, output miễn phí, nêu thời gian phản hồi đầu cuối 70ms-500ms, và ghi ngay dưới tiêu đề "193.6x faster, 444.6x cheaper" rằng các con số này "are on the higher end of real world gains" s3. Bài viết cũng thừa nhận đáp án tham chiếu là trung bình của GPT-6 Astra và Fable 5.1, khiến phép so sánh thiên về các model của OpenAI và Anthropic s3.
jev-gateway gắn vào Claude Code chỉ qua một biến môi trường: bin/clients.mjs đặt ANTHROPIC_BASE_URL trỏ tới gateway local và để nguyên đăng nhập Max s1. Trong src/adapters/messages.ts, gateway hỏi Jev tool nào phù hợp cho bước tiếp theo, rồi quyết định cách chuyển câu trả lời đi. Khi request bật thinking hoặc có các block cache_control, nó dùng hint. Nếu không, nó đặt tool_choice s1. Nội dung hint: một model định tuyến tool gợi ý tool được nêu là bước tiếp theo phù hợp nhất, hãy bỏ qua nếu nó không khớp với điều user thực sự yêu cầu. Nó được gắn vào tin nhắn user cuối cùng dưới dạng block <system-reminder> s1.
API Anthropic không cho lựa chọn nào khác. Khi bật manual extended thinking, tool_choice: any và tool_choice: tool không được hỗ trợ và trả về lỗi, còn Claude Opus 5.5, Claude Fable 5.1 và Claude Mythos 5.1 trả về 400 cho forced tool use bất kể thinking s4. Một điểm tinh tế mà comment của chính gateway bỏ sót: tài liệu nói Claude Opus 5 có hỗ trợ forced tool choice khi bật thinking s4. Về caching, thứ bậc là tools rồi system rồi messages; đổi tool_choice chỉ vô hiệu hóa cache của messages, còn sửa định nghĩa một tool vô hiệu hóa toàn bộ cache, đó là lý do gateway thêm một block thay vì viết lại mô tả tool s5.
Benchmark mà hầu như không ai trích dẫn là benchmark của chính tác giả gateway. Sáu model, hai task, năm lần chạy mỗi chế độ, 120 agent session trong ngày 2026-09-18 và 19, model GPT chạy trong Codex 0.154, model Claude chạy trong Claude Code 2.1, mọi agent đều sạch, không có MCP server, plugin hay skill s2. Ở chess-bugfix, mọi model đều dùng ít token hơn khi có routing và không có gì kém chính xác hơn. Ở chess-san, task feature, routing làm Opus 5 và Sonnet 5 tệ đi rõ rệt, và các tác giả nêu nguyên nhân: gateway chỉ dùng hint với model Claude, nên một hint không khớp gây ra một đường vòng thay vì bị bỏ qua miễn phí s2. Routing cũng làm mất độ chính xác một lần: GPT-5.6 Luna giải chess-san năm trên năm lần khi chạy một mình và ba trên năm lần khi có routing s2. Các tác giả bổ sung rằng input token phần lớn được cache (80 đến 96%), nên tiết kiệm input đáng giá tiền ít hơn cùng mức tiết kiệm ở output token, và bản thân Jev tốn từ nửa cent đến mười cent cho mỗi năm lần chạy s2. Một trong 120 lần chạy, chess-bugfix.on.3 trong series Luna, được đánh dấu contaminated sau khi agent tìm thấy script test của một lần chạy khác trong /tmp s2.
Chú thích trong README đã thúc đẩy bài test của chúng tôi: với --user-tools, một setup gửi 285 tool và khoảng 200,000 token trong mỗi request Claude Code, so với 6 tool và 7,000 token khi sạch s2. Chúng tôi đo cùng vị trí đó. Một request Claude Code 2.1.280 sạch mang 24 tool, 87,547 ký tự định nghĩa tool và 47,411 token prefix được tính phí (16,221 ghi, 31,190 đọc); setup đầy đủ mang 40 tool, 93,179 ký tự định nghĩa và 57,277 token prefix, tất cả đều là ghi. Cả hai đều mang thinking: {type: "adaptive"} và 3 block cache_control, không có tool_choice, đúng là điều kiện khóa hint mode trong messages.ts s1. Một câu trả lời "ok" tốn $0.07 tương đương API ở lần chạy Sonnet 5 sạch và $1.15 ở lần chạy Fable 5.1 đầy đủ, đọc từ các trường total_cost_usd và usage của chính Claude Code, cùng vị trí mà launcher của gateway chiếm s1.
Về fast-jev-compaction, plugin đứng sau thread "instant compaction" (điểm 495, 117 bình luận) s9, các issue đang mở quan trọng hơn số sao: #21 báo Hooks (0) sau khi cài vì session.compact và turn.complete không phải hook event được nhận diện trên Claude Code 2.1.272, #88 nói hook không thể thay thế compaction và toàn bộ transcript bị gửi tới một API bên thứ ba, #65 ghi lại 9 báo cáo "work done" bịa liên tiếp sau một lần compaction, #89 nói compaction bị hoàn tác khi --resume s7. Phàn nàn hàng đầu trong thread, 84 điểm, là về ToS và kiểm soát dữ liệu của nhà cung cấp s9. Cookbook gợi ý skill là thành quả đo được duy nhất mà nhà cung cấp công bố cho một danh sách agent: tỷ lệ load nhầm skill giảm từ 16.8% xuống 7.3%, và tỷ lệ load skill khi không có skill nào phù hợp giảm từ 9.8% xuống 4.0% s13.
Số đo
Benchmark của gateway, phần trăm so với cùng model khi tắt routing s2.
chess-bugfix: tìm và sửa năm bug được cài sẵn
| Model | Giải được, bật / tắt | Output token | Input token | Request LLM | Giây | Jev điều hướng |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 1,226 (-57%) | 96k (-7%) | 5 (0%) | 41 (-39%) | 100% |
| GPT-5.6 Sol | 5/5 · 5/5 | 3,211 (-57%) | 202k (-40%) | 9 (-36%) | 78 (-36%) | 93% |
| GPT-5.6 Luna | 1/4 · 0/5 | 10,519 (-12%) | 506k (-10%) | 19.5 (-15%) | 200 (+10%) | 86% |
| Fable 5.1 | 5/5 · 5/5 | 8,675 (-13%) | 276k (-19%) | 14 (-22%) | 148 (+6%) | 45% |
| Opus 5 | 5/5 · 5/5 | 16,693 (-7%) | 406k (-22%) | 18 (-14%) | 218 (+2%) | 38% |
| Sonnet 5 | 5/5 · 5/5 | 16,623 (-41%) | 616k (-48%) | 26 (-26%) | 243 (-25%) | 34% |
chess-san: thêm ký hiệu đại số vào một engine đang chạy tốt
| Model | Giải được, bật / tắt | Output token | Input token | Request LLM | Giây | Jev điều hướng |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 3,663 (0%) | 143k (+2%) | 7 (0%) | 88 (+8%) | 95% |
| GPT-5.6 Sol | 5/5 · 5/5 | 5,096 (-9%) | 147k (-39%) | 7 (-36%) | 78 (-16%) | 86% |
| GPT-5.6 Luna | 3/5 · 5/5 | 6,809 (-14%) | 315k (-51%) | 14 (-42%) | 121 (-14%) | 76% |
| Fable 5.1 | 5/5 · 5/5 | 13,497 (-24%) | 331k (-27%) | 13 (-19%) | 167 (-26%) | 51% |
| Opus 5 | 5/5 · 5/5 | 20,152 (+22%) | 676k (+61%) | 25 (+47%) | 390 (+83%) | 44% |
| Sonnet 5 | 5/5 · 5/5 | 23,487 (+9%) | 991k (+16%) | 32 (+3%) | 327 (+37%) | 42% |
Bản ghi request của chúng tôi, đúng vị trí mà jev-gateway chiếm s1.
| Sạch | Đầy đủ | |
|---|---|---|
| Model Claude Code đã chọn | claude-sonnet-5 | claude-fable-5-1 (user setting, 1M) |
thinking trong request |
{type: "adaptive"} |
{type: "adaptive"} |
Số block cache_control |
3 | 3 |
tool_choice |
không có (auto) | không có (auto) |
| Tool trong request | 24 | 40 (28 built-in + 12 MCP) |
| Định nghĩa tool, ký tự | 87,547 | 93,179 |
| System prompt, ký tự | 27,754 | 12,436 |
| Toàn bộ request, ký tự | 134,882 | 155,718 |
| Prefix token bị tính phí (cache write + read) | 47,411 (16,221 ghi, 31,190 đọc) | 57,277 (tất cả ghi) |
| Output token | 4 | 4 |
| Chi phí tương đương API của một "ok" | $0.07 | $1.15 |
Quy trình: một logging proxy 60 dòng trên 127.0.0.1:8790 chuyển tiếp từng request tới https://api.anthropic.com nguyên byte và ghi lại những gì nó mang, đúng vị trí mà bin/clients.mjs dành cho jev-gateway. Claude Code 2.1.280 chạy headless, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, từ một repo Expo private gồm 1,021 file được track, trên gói claude.ai subscription. Sạch: CLAUDE_CONFIG_DIR trỏ vào thư mục rỗng, --strict-mcp-config, --setting-sources project. Đầy đủ: user settings bình thường của máy, .mcp.json của project, MCP server của user và các plugin đã cài. Một request cho mỗi cấu hình, chỉ lượt đầu; không có Jev key, nên các số liệu hồi quy là bench của gateway được chạy lại, không phải tái hiện.
Làm việc này vào thứ Hai
- Trước khi thêm bất kỳ router nào, hãy đo chính setup của bạn: chạy một logging proxy, trỏ
ANTHROPIC_BASE_URLvào đó, chạyclaude -p "Reply with the single word ok." --output-format json --max-turns 1, rồi đọccache_creation_input_tokenscộngcache_read_input_tokenstrong output. - Đếm số tool trong request đó. Nếu các MCP server bạn ít dùng đẩy danh sách lên cao, hãy gỡ chúng khỏi
.mcp.jsonhoặc giới hạn theo từng project; mức cắt đó áp dụng cho mọi request, có router hay không. - Nếu bạn vẫn muốn dùng Jev trong Claude Code, mở
src/adapters/messages.tstrong bản clone jev-gateway của bạn và xác nhận dòngsteer: khi thinking hoặc caching bật, bạn mua một hint, không phải một route. - Chạy bench của gateway trên repo của bạn với
--user-toolsthay vì tin các bảng chess; chỉ giữ routing nếu một task săn bug cho thấy ít request hơn mà không đổi kết quả giải được/không giải được. - Đừng cài fast-jev-compaction cho đến khi các issue #21, #88 và #89 được đóng; kiểm tra
/hooksliệt kê nhiều hơn không hook sau khi cài. - Đọc ToS của nhà cung cấp trước khi dán key: mỗi request được route đều gửi đi danh sách tool và tin nhắn cuối của bạn, còn plugin compaction gửi toàn bộ transcript.
- Nếu bạn cũng chạy Codex, hãy thử Jev ở đó trước: forced
tool_choicelà thứ mà bench cho thấy có hiệu quả.
Đọc thêm
- Bảng forced tool use theo từng model, gồm model nào trả về 400 và chế độ thinking nào chặn
anyvàtools4. - Bảng vô hiệu hóa cache:
toolsrồisystemrồimessages, và dòngtool_choicegiải thích thiết kế của gateway s5. - Issue #24 trên jev-gateway: danh sách tool bất biến trong session được gửi lại cho Jev ở mọi request, trung tâm chi phí mà dashboard che đi s14.
- Phần data-integrity trong README của bench: 119 trên 120 lần chạy được giữ riêng biệt, một lần chạy bị đánh dấu
contaminatedtrongruns.jsonls2. - Một bài đọc độc lập về Jev như một classifier hoặc filter trên dữ liệu công khai và riêng tư, ngoài khung coding agent s12.
- Vì sao các eval của nhà cung cấp đo so với hai model thay vì ground truth, và điều đó ảnh hưởng thế nào đến các hệ số quảng cáo s11.
- Một bài review bên thứ ba về jev-gateway, đi qua cách chia "Jev chọn, LLM viết" và việc lộ localhost, đã được sửa ngay trong ngày s8.
- Thread HN ra mắt, nơi câu hỏi về giá và trợ giá được tranh luận công khai s10.
Nguồn
- jev-gateway, GitHub, vinilana. Vì sao nên đọc:
src/adapters/messages.tschứa dòng duy nhất quyết định hint hay forced tool, vàbin/clients.mjscho thấy launcher chỉ đặtANTHROPIC_BASE_URL. - jev-gateway-bench, GitHub, vinilana. Vì sao nên đọc: bảng đầy đủ 120 session và phần diễn giải của chính các tác giả, gồm cả lần chạy bị contaminated.
- Introducing System One Models & Jev, TypeSafe AI. Vì sao nên đọc: giá, độ trễ và chú thích làm rõ con số 444.6x, từ phía nhà cung cấp.
- Forcing tool use, Anthropic docs. Vì sao nên đọc: bảng theo từng model cho biết giá trị
tool_choicenào gây lỗi. - Prompt caching, Anthropic docs. Vì sao nên đọc: thứ bậc vô hiệu hóa cache buộc thiết kế hint.
- fast-jev-compaction, GitHub, tamaratran. Vì sao nên đọc: mở tab issue trước khi đọc README.
- jev-gateway Review: Jev Picks, the LLM Writes, mrjev.com. Vì sao nên đọc: một bài điểm kiến trúc gateway từ bên ngoài.
- Instant Claude Code compaction is my favorite use of Jev so far, r/ClaudeCode. Vì sao nên đọc: thread của người dùng thực tế, với phản đối về ToS ở đầu.
- HN: Introducing System One Models and Jev, Hacker News. Vì sao nên đọc: cuộc tranh luận ra mắt về giá và tính bền vững.
- The Evals: Measured Against Two Models, Not Against Truth, novcog. Vì sao nên đọc: phê bình phương pháp đánh giá đằng sau các hệ số của nhà cung cấp.
- Testing Jev on public and private data: classifier or filter, Aman Kumar. Vì sao nên đọc: một phép đo độc lập ngoài các coding agent.
- Skill suggestion cookbook, TypeSafe docs. Vì sao nên đọc: các số liệu chọn danh sách duy nhất được công bố, 16.8% xuống 7.3%.
- jev-gateway issue #24, GitHub. Vì sao nên đọc: chi phí gửi lại danh sách mà không ai tính.
- Jev + Claude Code: compaction and a Sonnet 5 source check, jevmodel.ai. Vì sao nên đọc: một cái nhìn thứ hai về tuyên bố compaction cùng phép kiểm tra với Sonnet 5.
FAQ
jev-gateway có bao giờ ép dùng tool trong Claude Code không?
Chỉ khi request không có cả extended thinking lẫn block cache_control. Các request lượt đầu chúng tôi bắt được đều có cả hai, ở cả setup sạch lẫn đầy đủ, nên trên thực tế gateway dùng hint.
Vì sao gateway không viết lại mô tả tool để điều hướng mạnh hơn?
Sửa định nghĩa tool làm vô hiệu hóa toàn bộ prompt cache, gồm tools, system và messages. Gắn thêm một block vào tin nhắn user cuối chỉ chạm tới tầng messages, là nơi rẻ nhất để đặt một hint.
Vậy Jev vô dụng cho coding à?
Không. Bench cho thấy nó có lợi trên Codex, nơi tool bị ép và 76 đến 100% request được điều hướng, và trên các task debug với mọi model. Cái mà số liệu của chính gateway không ủng hộ là cách nói "Claude Code rẻ nhất".
Tôi có nên thử fast-jev-compaction không?
Hãy đợi các issue về đăng ký hook (#21, #88) và issue --resume (#89) được đóng, và cân nhắc xem việc toàn bộ transcript bị gửi tới một API bên thứ ba có chấp nhận được trong các repo của bạn không.
AIDive