Skip to content

[Fix] Pin Jev on the direct TypeSafe path (jev-1.13.0), honour TYPESAFE_MODEL, record requested_model - #95

Merged
hsliuustc0106 merged 1 commit into
mainfrom
issue-93-pin-jev
Oct 24, 2026
Merged

hsliuustc0106 merged 1 commit into
mainfrom
issue-93-pin-jev

Conversation

@Birfy

@Birfy Birfy commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Required human contributor answers

Per the repo owner's standing instruction (Danyang, see #71 discussion), the intent items below are filled from issue #93 rather than waiting for a human answer.

  1. What outcome are you trying to achieve?

    Answer: (from [Deps] Pin Jev on the direct TypeSafe path (it sends jev-latest) and re-run benchmarks on jev-1.14.0 #93) Saved runs and published numbers say which Jev answered them, and two runs a week apart don't differ just because jev-latest moved.

  2. What is the highest-leverage variable for that outcome?

    Answer: The model id the direct TypeSafe path sends by default (jev-latest, a moving alias, with no override).

  3. How will this work move that variable rather than create busywork?

    Answer: It pins the default to jev-1.13.0 (the version every recorded number used), lets TYPESAFE_MODEL choose another version on that path, and records the requested id in each step.

  4. Who is the customer or user, and what do they actually need?

    Answer: Users with a direct TYPESAFE_API_KEY and anyone comparing benchmark runs; they need reproducible runs and to know which version answered.

After answering the four questions: is a PR needed at all to achieve this outcome?

Human decision and rationale (or explicit source reference): Yes, the default is a code constant in s1a/decision_models/wire.py (#93 scope items 1, 2 and 4).

For a bug fix: link actual observed failure evidence.

Evidence: Not a crash. Before this PR client_from_env("typesafe", ...) always used TYPESAFE_DEFAULT_MODEL = "jev-latest" and ignored TYPESAFE_MODEL (see the table in #93 and the old wire.py). TypeSafe's 1.14 post says jev-latest moves to jev-1.14.0 a week after 2026-10-14.

Why

Closes #93 (items 1, 2 and 4; item 3, the 1.13.0 vs 1.14.0 benchmark re-run, needs live TypeSafe keys and is left for a follow-up, see below).

The direct TypeSafe path sent the moving alias jev-latest, while the OpenRouter path and every published number use 1.13. TYPESAFE_MODEL was ignored on the direct path.

How

  • s1a/decision_models/wire.py: TYPESAFE_DEFAULT_MODEL = "jev-1.13.0"; the typesafe backend reads TYPESAFE_MODEL and falls back to the pin. An OpenRouter id (typesafe/...) there is a MODEL_SERVICE_CONFIG_ERROR that says to use a TypeSafe name or set TYPESAFE_API_URL, instead of a request TypeSafe would reject.
  • s1a/decision_models/jev.py + types.py: JevModel keeps requested_model in the reply's raw payload, and it is a provenance key, so tool-front ticks get it through decision.provenance. model stays the id the response reports, else the one sent.
  • s1a/browser/decision_model.py: browser ticks now record model and (for Jev) requested_model.

What

  • Default direct-path model: jev-latest changes to jev-1.13.0. Set TYPESAFE_MODEL=jev-1.14.0 to try 1.14.
  • New step-record fields: requested_model (tool and browser ticks), model (browser ticks).
  • Docs: docs/configuration.md (both defaults, override, 60-day deprecation notice for 1.13.0), .env.example, docs/why.md, docs/browser-front.md, a note in docs/benchmarks.md that the 2026-09-19 jev-latest run was on 1.13; CHANGELOG under Changed.
  • Kept 1.13.0 as the default for now: [Deps] Pin Jev on the direct TypeSafe path (it sends jev-latest) and re-run benchmarks on jev-1.14.0 #93 says to move to 1.14.0 only after the re-run, which this PR does not do.

Verification

  • uv run ruff format --check . && uv run ruff check . && uv run ty check: all pass
  • uv run pytest -q (996 passed, 127 skipped) and scripts/smoke.sh (exit 0)
  • CHANGELOG.md and the docs say what the code does now

New tests: no default is jev-latest/jev-preview; TYPESAFE_MODEL overrides the pin on the direct path and the empty value falls back; an OpenRouter id on the direct path is a config error (in tests/test_decision_models_jev.py and tests/test_browser_policy.py); requested_model is recorded next to a response-reported model; browser ticks carry both.

Demo / evidence

  • Video link, or exemption/blocker with follow-up: Exempt (config default and record fields, offline-tested; no behaviour change in an agent run beyond which model id is sent).
  • Application/task → agent actions → independently checked result: N/A
  • System1-Agents / System1-Omni commits, checkpoint and worker/frontend provenance: base main 5693f51. Follow-up for [Deps] Pin Jev on the direct TypeSafe path (it sends jev-latest) and re-run benchmarks on jev-1.14.0 #93 item 3: re-run public231, s1a probe and the --order reverse flip rate on jev-1.13.0 and jev-1.14.0 with a TypeSafe key, then decide whether to move the default.

@hsliuustc0106 hsliuustc0106 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maintainer review (light-impact + self-review)

Tip: 62ebc820da90b903c1456b467df8d225d40cb55f · MERGEABLE · required checks green on this head (core 3.11/3.13, full, benchmarks).

Impact

  • changed: TYPESAFE_DEFAULT_MODEL pin, client_from_env honouring TYPESAFE_MODEL, requested_model provenance
  • callers/dependents (first hop): JevModel.from_env, browser tick recording via Decision.provenance
  • related tests: tests/test_decision_models_jev.py, tests/test_browser_policy.py
  • not expanded: OpenRouter proxy path beyond existing override behaviour

Risk: low · Missing tests: none obvious · Regression: default id change for direct TypeSafe callers who relied on moving jev-latest (intentional; override documented).

Self-review readiness: Template answers traceable to #93; demo N/A appropriate for config/provenance chore. No blocking gaps.

Verdict: APPROVE — correct, scoped, CI green on tip.

@hsliuustc0106
hsliuustc0106 merged commit d78713d into main Oct 24, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Deps] Pin Jev on the direct TypeSafe path (it sends jev-latest) and re-run benchmarks on jev-1.14.0

2 participants