Skip to content

feat: default to GPT-6.1 Sol and Claude Opus 5.5 across Tiers 1-3 - #188

Merged
rng1995 merged 16 commits into
mainfrom
naren/model-defaults-gpt-6-1-sol-opus-5-5
Oct 14, 2026
Merged

rng1995 merged 16 commits into
mainfrom
naren/model-defaults-gpt-6-1-sol-opus-5-5

Conversation

@rng1995

@rng1995 rng1995 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This PR moves SkillEvaluator's default models to GPT-6.1 Sol (OpenAI / Codex) and Claude Opus 5.5 (Anthropic / Bedrock / claude-code) across Tiers 1–3. It also lands the request-shape, refusal and runtime changes those models need. Opened as a draft until the live smoke runs listed under Rollout gates pass.

Use Before After
OpenAI chat default: Tier 1 verifier and rubric, Tier 2 dedup, Tier 3 judges, native codex gpt-5.6-sol gpt-6.1-sol
Anthropic / Bedrock chat default: same roles, native claude-code claude-opus-5 / us.anthropic.claude-opus-5 claude-opus-5-5 / us.anthropic.claude-opus-5-5
Gateway codex / claude-code openai/openai/gpt-5.6-sol / aws/anthropic/bedrock-claude-opus-5 openai/openai/gpt-6.1-sol / aws/anthropic/bedrock-claude-opus-5-5
SkillSpector LLM stage Followed the chat default Own defaults. openai: gpt-6.1-sol at effort medium. anthropic / bedrock: stay on claude-opus-5 / us.anthropic.claude-opus-5 until a SkillSpector release supports Claude 5.5. Install pinned to v2.12.0.
opencode Followed the chat default Decoupled; values unchanged (GPT-6.1 Sol has no Chat Completions tool calls)
Agent CLIs @latest Claude Code 2.1.292, Codex 0.161.0; codex effort high (unchanged), claude-code medium for Claude ≥ 5.5

Changes

  • 1883751 feat(tier1): decouple the SkillSpector model from provider chat defaults and pin v2.12.0
  • 68ba452 feat(llm): gate reasoning-model request shape, detect refusals and size budgets per model family
    • One helper covers the reasoning models (gpt-5*/gpt-6*). Those requests send no temperature and use max_completion_tokens.
    • Token budgets: GPT-5/6 at least 32,768; other models 16,384 for verifier, rubric, dedup and judges (8,192 report suggestions, 16,000 dataset generation). On the Anthropic API, Claude Opus 4 and 4.1 are capped at the SDK's 8,192-token non-streaming limit.
    • Per-role effort, applied only to GPT-6 (not on Bedrock) and to Claude ≥ 5.5 on the anthropic provider (including a custom ANTHROPIC_BASE_URL); Bedrock routes keep the model default:
      • verifier high;
      • dedup, rubric and judges medium;
      • never xhigh or max.
    • Refusal and truncation errors are typed, with an Anthropic server-side fallback and, in the Tier 3 judge, a fallback to Opus 4.8. The verifier keeps the complete verdicts of a truncated reply.
    • The verifier's JSON field reasoning is renamed rationale; parsers accept both.
    • RAGAS is skipped for reasoning judges.
    • Provenance records the judge model, effort and whether a fallback was used.
    • Lift excludes mixed-judge cases, including multi-step trials where any step used a fallback judge.
  • 585940c feat(tier3): pin Claude Code 2.1.292 and Codex 0.161.0 and set Claude 5.5 effort (local-mode version preflight)
  • 6d24e34 feat(gateway): default gateway agents to GPT-6.1 Sol and Claude Opus 5.5
  • fff8311 feat(openai): default OpenAI to GPT-6.1 Sol (the last-resort judge is now keyed by provider)
  • 7b3431c feat(anthropic): default Anthropic and Bedrock to Claude Opus 5.5
  • f0d98cf ci(gitleaks): allowlist the Bedrock model ID in SkillSpector bridge tests
  • c3f75a6 docs(provider-config): drop stale default-model wording from effort comments
  • 29e2926 fix(llm): keep complete verifier verdicts from a truncated reply
  • ef1a715 fix(llm): clamp Anthropic max_tokens to the SDK limit and rebuild schema downgrades per provider
  • 402eaa7 fix(provider-config): pin SkillSpector defaults as literals and document effort scope
  • c592290 fix(tier3): carry step judge models into multi-step logical rewards
  • 749ce18 test(llm): cover medium effort for dedup verdicts and the dimension and insights judges
  • a6d3721 refactor(tier3): build the eval-core judge payload from the shared client's helpers

Tests

  • Full suite: 11,399 passed, 20 skipped. One timing-sensitive local-mode test failed under parallel load and passes when rerun alone. Two Docker sidecar tests also fail on main in this environment. The 2 failures are tests/test_harbor_secure_docker_environment.py sidecar tests; they need a protected execution state and fail identically on main locally.
  • ruff check . clean; git diff --check clean; every commit signed off (DCO); the open-source boundary scan passes.
  • New coverage:
    • the reasoning-model helper and its in-container mirror (drift test);
    • per-role effort;
    • refusal and truncation typing, and fallbacks;
    • rationale/reasoning parsing;
    • SkillSpector decoupling, forwarded knobs and the effort default;
    • CLI pins and local preflight;
    • provider-keyed last-resort judge;
    • verifier salvage of a truncated reply;
    • the Anthropic SDK non-streaming token limit (real SDK, mock transport);
    • mixed-judge lift for multi-step trials;
    • medium effort for dedup verdicts and the dimension and insights judges.

Rollout gates (before marking ready)

  1. Native OpenAI smoke run on gpt-6.1-sol: judge, SkillSpector stage (medium), verifier (high), dedup (medium).
  2. Native Anthropic and Bedrock smoke runs: the refusal surface and claude-code at medium; the Anthropic server-side fallback firing, and on Bedrock the Tier 3 judge's Opus 4.8 retry (host-side Bedrock calls have no refusal fallback).
  3. Gateway: one docker and one local trial per agent.
  4. Judge bridging on frozen trajectories, new vs previous default, within a 3-run noise band.

Follow-up: once a SkillSpector release supports Claude 5.5 structured output, move SkillSpector's anthropic and bedrock defaults to Opus 5.5 and bump the pin.

Plan: GPT-6.1 Sol and Claude Opus 5.5 defaults

Plan: GPT-6.1 Sol and Claude Opus 5.5 defaults

Model changes by tier

Tier Use Current → new Effort
T1 SkillSpector LLM scan openai gpt-5.6-sol → gpt-6.1-sol; anthropic claude-opus-5 and bedrock us.anthropic.claude-opus-5 unchanged, now decoupled from the chat default Sol medium (set by SE); Claude unset
T1 / T2 FindingVerifier; rubric-eval; dedup verdicts Follow the provider default: openai gpt-5.6-sol → gpt-6.1-sol; anthropic claude-opus-5 → claude-opus-5-5; bedrock us.anthropic.claude-opus-5 → us.anthropic.claude-opus-5-5 verifier high; rubric medium; dedup medium (Bedrock: model default)
T3 codex agent gpt-5.6-sol → gpt-6.1-sol; gateway openai/openai/gpt-5.6-sol → openai/openai/gpt-6.1-sol high (existing pin)
T3 claude-code agent claude-opus-5 → claude-opus-5-5; bedrock us.anthropic.claude-opus-5 → us.anthropic.claude-opus-5-5; gateway aws/anthropic/bedrock-claude-opus-5 → aws/anthropic/bedrock-claude-opus-5-5 medium (pinned)
T3 opencode agent Decoupled, values unchanged: gateway nvidia/nvidia/nemotron-3-super-120b-long-ctx; native openai openai/gpt-5.6-sol (GPT-6.1 Sol has no tool calls on Chat Completions) default
T3 Judges, report, dataset generation Follow the provider default; the last-resort judge becomes provider-keyed instead of gpt-5.6-sol for every provider medium (Bedrock: model default)
Prov Gateway chat default nvidia/nvidia/nemotron-3-super-120b-long-ctx, unchanged —

Why GPT-6.1 Sol or Opus 5.5

Use Pick Deciding reasons
codex agent, OpenAI defaults GPT-6.1 Sol Current OpenAI model; Codex 0.161 default; half the price of gpt-5.6-sol ($2/$10 vs $4/$20 per MTok)
claude-code agent, Anthropic and Bedrock defaults Opus 5.5 Current Opus; Claude Code default; 20% cheaper than Opus 5 per token
SkillSpector on Anthropic and Bedrock Opus 5 (unchanged) Opus 5.5 rejects the forced tool call that SkillSpector v2.12.0 sends; moves once a SkillSpector release supports Claude 5.5

Effort settings

Role Effort Why
FindingVerifier high A wrong false_positive hides a real finding; low volume
SkillSpector (GPT-6.1 Sol), rubric-eval, dedup, judges medium Stable scoring; dedup DUPLICATE blocks; many calls per scan
Any Tier 1/2 role never xhigh/max Short classification: more latency and truncation, no accuracy evidence
codex / claude-code high / medium Pinned so CLI-default changes cannot shift scores
Any Tier 1/2/3 role on Bedrock model default SkillEvaluator sends no effort on Bedrock routes

Prerequisites in this PR

Change Why
Pin Claude Code 2.1.292 and Codex 0.161.0 (local-mode version preflight) Opus 5.5 needs ≥ 2.1.280, GPT-6.1 Sol needs ≥ 0.159.1
Reasoning-model checks cover gpt-5*/gpt-6*; token budgets: GPT-5/6 at least 32,768, other models 16,384 (capped at the Anthropic SDK's non-streaming limit for Claude Opus 4/4.1) Otherwise temperature / max_tokens cause 400s and reasoning truncates small caps
Refusal and truncation detection, Opus 4.8 fallback Classifier refusals otherwise read as empty output
SkillSpector model decoupled from the chat default; install pinned to v2.12.0 A Claude 5.5 chat default would break the SkillSpector scan

Rollout gates (before merge)

  1. Native OpenAI smoke run: judge, SkillSpector stage, verifier, dedup on gpt-6.1-sol.
  2. Native Anthropic and Bedrock smoke runs: the refusal surface, claude-code at medium, the Anthropic server-side fallback, and the Tier 3 judge's Bedrock retry on Opus 4.8 (host-side Bedrock calls have no refusal fallback).
  3. Gateway: one docker and one local trial per agent.
  4. Judge bridging on frozen trajectories (new vs previous default) within a 3-run noise band.

Follow-up: SkillSpector anthropic/bedrock scans move to Opus 5.5 after a SkillSpector release supports Claude 5.5 structured output.

🤖 Generated with Claude Code

rng1995 and others added 8 commits October 8, 2026 02:25
…lts and pin v2.12.0

SkillSpector sends its own structured-output requests, so its model now
comes from SKILLSPECTOR_DEFAULT_MODELS instead of the provider chat default.
Precedence is SKILLSPECTOR_MODEL, then an explicit SKILL_EVAL_LLM_MODEL, then
the per-provider SkillSpector default. The defaults keep today's values, so a
later chat-default upgrade cannot reach SkillSpector before the pinned release
supports it.

The bridge now forwards operator-set SKILLSPECTOR_MODEL_<SLOT>,
SKILLSPECTOR_MODEL_REGISTRY and SKILLSPECTOR_REASONING_EFFORT, and keeps
SKILLSPECTOR_TEMPERATURE out. When every SkillSpector model is a GPT-6 model
and no effort is set, SkillEvaluator sends reasoning effort medium; it never
sets one for Claude models. The LLM stage records the requested
skillspector_model and skillspector_reasoning_effort next to
skillspector_version.

The install hint, docs and their tests pin SkillSpector to v2.12.0, and a new
test keeps every install reference on that one tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…ze budgets per model family

One shared helper set in provider_config decides the request shape for every
model call: GPT-5 and GPT-6 models are reasoning models (no temperature,
max_completion_tokens on native OpenAI), gateway catalog leaves such as
aws/anthropic/bedrock-claude-opus-5-5 resolve to the Claude model they name,
and Claude 5.5 or later is recognized for effort and refusal fallback. The
LLM client, the host judge module and the in-container verifier template use
it; the template keeps a mirrored copy with a drift test.

Output budgets are sized per family: OpenAI reasoning models get at least
32768 tokens, other models 16384 for verification, rubric, dedup and judges,
8192 for report suggestions and 16000 for dataset generation. Reasoning effort
goes only to GPT-6 models and native-Anthropic Claude 5.5 or later (verify
high; rubric, dedup and judges medium), so today's default models get no new
effort. RAGAS is skipped for reasoning judges.

Refusals and truncation are typed errors in the shared client (OpenAI
content_filter or refusal text, Anthropic stop_reason refusal or max_tokens,
Bedrock via LiteLLM). Claude 5.5 requests to the native Claude API use
server-side fallback to Claude Opus 4.8. In the verifier, Bedrock retries a
content_filtered Claude 5.5 reply on Opus 4.8 in the same geography, and a
refusal or empty reply moves on to the next LLM_JUDGE_FALLBACK_MODELS entry.
--llm-verify and rubric evaluation report the failure cause.

The verifier and dedup prompts ask for rationale instead of reasoning, and
every consumer accepts both. Rubric and dedup verdicts thread a response
schema. Judge details record judge_model_used, judge_reasoning_effort and
judge_fallback_used, run_config records the judge effort, and lift leaves out
cases whose arms used different judges (judge_mixed_cases). The unused
CONTENT_DEDUP_LLM_* constants and LLM_VERIFY_MODEL are removed; explicit
credentials now fall back to the provider default model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
… 5.5 effort

Harbor installs the latest agent CLI unless it is given a version, so a new
Codex or Claude Code release could change Tier 3 results between runs. Pin
the releases this integration was validated with: Codex 0.161.0 (keeping
reasoning_effort=high) and Claude Code 2.1.292.

Claude Code's default effort depends on the model. Claude 5.5 and later
models now run with reasoning_effort=medium, set explicitly in the Harbor
command; older models such as today's claude-opus-5 default keep Claude
Code's own default, so current runs are unchanged.

Local mode runs the operator's installed CLI, so it gets no version pin.
Its Claude Code and Codex wrappers record the installed version and fail
the trial before the agent starts when the CLI is too old for the model:
Claude 5.5 needs Claude Code 2.1.280 or newer, and GPT-6 needs Codex
0.159.1 or newer.

is_gpt6_model becomes public so the local wrappers can share it with the
provider helpers. A drift test keeps the documented versions in step with
the pins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Gateway Codex now defaults to openai/openai/gpt-6.1-sol and gateway Claude Code to aws/anthropic/bedrock-claude-opus-5-5. OpenCode keeps nvidia/nvidia/nemotron-3-super-120b-long-ctx as its own literal, so a later gateway chat-default change does not move it.

Claude Code on the shared gateway key runs with CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1. Gateways that forward Anthropic-format requests to another provider reject pre-release fields such as context_management with HTTP 400. A separately configured Claude route (its own ANTHROPIC_API_KEY) is unchanged. The Claude 5.5 effort pin from the previous commit now applies to the gateway default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
CHAT_DEFAULT_OPENAI moves from gpt-5.6-sol to gpt-6.1-sol. Chat, judging, the dimension and insights judges, native Codex and the SkillSpector openai default follow it, so SkillSpector now runs at SKILLSPECTOR_REASONING_EFFORT=medium and the per-role effort values (verify high; rubric, dedup and judges medium) take effect on OpenAI.

OpenCode on the native OpenAI provider keeps openai/gpt-5.6-sol (OPENCODE_OPENAI_DEFAULT_MODEL) while SKILL_EVAL_LLM_MODEL is unset. OpenCode calls tools through Chat Completions, and GPT-6.1 Sol supports tool calls only on the Responses API. An explicit SKILL_EVAL_LLM_MODEL still reaches OpenCode, and the model source is recorded as 'native OpenAI agent default'. The OpenCode namespace step now applies to every default source rather than a fixed list.

The Harbor verifier template's last-resort judge becomes the provider-keyed DEFAULT_JUDGE_MODELS. It used to send an OpenAI model ID to Anthropic, Bedrock, NVIDIA Build and gateways when no model was configured. A drift test keeps it equal to CHAT_DEFAULT_MODELS. The unused host-side llm_judge.DEFAULT_JUDGE_MODEL is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
CHAT_DEFAULT_ANTHROPIC moves from claude-opus-5 to claude-opus-5-5 and CHAT_DEFAULT_BEDROCK from us.anthropic.claude-opus-5 to us.anthropic.claude-opus-5-5. Chat, judging, native and Bedrock Claude Code, and the native Claude route for gateway Claude Code (a separate ANTHROPIC_API_KEY) follow them. On the native Claude API the per-role effort and server-side refusal fallback now apply to the defaults, and Claude Code runs them at reasoning_effort=medium.

SkillSpector keeps claude-opus-5 and us.anthropic.claude-opus-5 through SKILLSPECTOR_DEFAULT_MODELS, because SkillSpector v2.12.0 does not return structured output for Claude 5.5. The verifier template's DEFAULT_JUDGE_MODELS moves with the chat defaults, as its drift test requires.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…ests

The SkillSpector provider-default test lists "AWS_BEARER_TOKEN_BEDROCK" followed by "us.anthropic.claude-opus-5". Gitleaks' generic-api-key rule reads that model ID as a secret: it follows a token name, contains a digit, has entropy above 3.5 and matches no default stopword. The full-history scan would keep failing even if a later commit changed the line, so add an exact-value, single-path allowlist entry and pin it with the other single-value entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…omments

The effort gate's docstring and test comment described GPT-5.6 Sol and Claude Opus 5 as today's defaults. After the default moves they are just other models, so say that instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>

@rng1995 rng1995 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Automated review: 9 findings (0 P1, 2 P2, 7 P3); 8 posted inline.

Findings outside the diff or about the description:

  • PR_DESCRIPTION: [P3] Description overstates Bedrock effort and fallback coverage and mislabels token budgets

The description says per-role effort is "applied only to gpt-6.x and Claude ≥ 5.5", and the plan table gives Bedrock us.anthropic.claude-opus-5-5 the verifier high and rubric/dedup medium values. In the code, effective_reasoning_effort returns None for every bedrock route, so the new Bedrock default gets no effort in any role. The CHANGELOG states this correctly ("on the Anthropic API"). Rollout gate 2 expects "fallbacks firing" on Bedrock, but host-side Bedrock calls (verifier, rubric, dedup) have no refusal fallback; only the in-container Tier 3 judge has one. "Token ceilings: GPT 32768, Claude 16384" is also inaccurate. For GPT-5/6, 32768 is a floor (max(max_tokens, 32768)). 16384 applies to every non-reasoning model, not only Claude. Dataset generation uses 16000 and report suggestions 8192.

Suggested fix: Say effort goes to GPT-6 (non-Bedrock routes) and to Claude 5.5+ on the anthropic provider, and mark Bedrock as "model default" in the effort table. Limit gate 2's Bedrock fallback check to the Tier 3 judge. Reword the budgets to: "GPT-5/6 at least 32,768; other models 16,384 for verifier, rubric, dedup and judges (8,192 report suggestions, 16,000 dataset generation)."

Comment thread src/skillevaluator/inference/client.py
Comment thread src/skillevaluator/provider_config.py
Comment thread src/skillevaluator/provider_config.py Outdated
Comment thread src/skillevaluator/provider_config.py Outdated
Comment thread src/skillevaluator/tier3/harbor/collector.py Outdated
Comment thread src/skillevaluator/inference/client.py Outdated
Comment thread src/skillevaluator/tier3/eval_core/llm_judge.py
rng1995 and others added 6 commits October 8, 2026 10:25
FindingVerifier went through LLMClient.process, which turned a reply cut off at the output-token limit into the empty fallback, so every complete NDJSON verdict line was discarded and the llm-verification stage was reported as skipped. LLMClient.process now parses the partial text for subclasses that set salvage_truncated_response, and FindingVerifier does. last_failure still records the truncation, and the partial-verdict message names it. Corrects the llm_judge comment that claimed the verifier already salvaged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…ema downgrades per provider

The Anthropic SDK refuses non-streaming requests above a per-model limit (8,192 for Claude Opus 4 and 4.1) before sending them, so the 16,384 role default and the 16,000 dataset-generation budget broke those models. The shared client now clamps max_tokens to the SDK's MODEL_NONSTREAMING_TOKENS entry when one exists; a test drives the real SDK through a mock transport.

_call_with_schema_fallback no longer knows that Anthropic's output_config also carries the effort. It takes a build_kwargs(include_schema) callable, and each provider branch builds its own request with or without the schema, matching the Harbor template's pattern.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…ent effort scope

SKILLSPECTOR_DEFAULT_MODELS aliased the OpenAI and NVIDIA chat defaults, so the next chat-default bump would have moved SkillSpector without re-validating the pinned release. Every entry is now a literal; the test asserts the literals, and the changed-chat-default test covers every provider.

effective_reasoning_effort's docstring said only native-Anthropic endpoints get an effort, but every anthropic-provider endpoint, including a custom ANTHROPIC_BASE_URL, does (and a test pins that). The docstring and the judge comment now say so; Bedrock and OpenAI-compatible Claude routes keep the model default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
For a multi-step trial without an authoritative root row, _logical_attempt_rewards synthesized a logical reward without the steps' details, so lift never saw which judge scored it. A case where one arm's step fell back to another judge model was neither left out of lift nor counted in judge_mixed_cases. The synthesized reward now carries the union of its steps' judge models per judge metric in a private _judge_models key, which _judge_models_by_case reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…nd insights judges

Only the verifier, the rubric and the Tier 3 judge payload had request-level effort tests. A parametrized test now runs the deduplication LLM path, DimensionJudge and InsightsJudge against a mocked OpenAI SDK on gpt-6.1-sol and asserts reasoning_effort is medium, so dropping the dedup kwarg or the judges' default_reasoning_effort fails a test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
…ient's helpers

call_public_llm sends judge requests through LLMClient, so llm_judge._chat_completion_payload had no production caller and its own token-limit, temperature and URL logic only checked the Harbor template against a second copy. It now composes LLMClient's _token_limit_kwargs, _temperature_kwargs and _build_openai_response_format with effective_reasoning_effort, so the template drift test compares against what the client sends. The duplicate _is_native_openai_chat_url is removed; its canonical and deceptive URL cases now assert the payload's token key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
@rng1995

rng1995 commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator Author

Review follow-up for findings outside the diff:

  • A truncated reply now discards every verifier verdict, including the complete ones: Addressed in 29e2926. LLMClient.process now parses the partial text of a truncated reply for subclasses that set salvage_truncated_response, and FindingVerifier sets it. last_failure still records the truncation, and the partial-verdict message names the cause. Added OpenAI and Anthropic tests where a finish_reason=length/max_tokens reply with two complete lines and one cut-off line returns two verdicts, and I corrected the llm_judge comment.
  • The 16384 default trips the Anthropic SDK's per-model non-streaming guard for Opus 4/4.1: Addressed in ef1a715. The shared client now caps Anthropic max_tokens at the SDK's MODEL_NONSTREAMING_TOKENS entry when one exists (8,192 for Opus 4 and 4.1). That covers the verifier, rubric, judges and dataset generation, which all go through LLMClient. The new test sends claude-opus-4-1-20250805 and claude-opus-4-0 requests through the real SDK with a mock httpx transport, and it fails without the cap. I updated the provider_config comment and the CHANGELOG.
  • Effort docstring says native Anthropic only, but any Anthropic base URL gets effort: Addressed in 402eaa7. I kept the existing behaviour (pinned by test_anthropic_gateway_gets_effort_without_server_side_fallback) and reworded the docstring. It now says Claude 5.5+ gets effort on every anthropic endpoint, including a custom ANTHROPIC_BASE_URL, and that Bedrock and OpenAI-compatible Claude routes keep the model default. The llm_judge comment matches.
  • SkillSpector's openai and nv_build defaults still alias the chat defaults: Addressed in 402eaa7. Every SKILLSPECTOR_DEFAULT_MODELS entry is now a literal, and test_provider_config asserts the literals. test_skillspector_model_does_not_follow_a_changed_chat_default now covers all five providers.
  • Mixed-judge lift exclusion does nothing for multi-step trials without a root reward: Addressed in c592290. _logical_attempt_rewards now carries the union of its steps' judge models per judge metric in a private _judge_models key, which _judge_models_by_case reads through a new _reward_judge_models helper. Added a multi-step test to test_harbor_metrics_truth where one arm's step fell back to Opus 4.8. The case is now excluded and counted, and the test fails without the fix.
  • Description overstates Bedrock effort and fallback coverage and mislabels token budgets: Not changed. Updated the PR description. Effort is scoped to GPT-6 off Bedrock and Claude 5.5+ on the anthropic provider, and Bedrock is shown as the model default in the effort tables. Gate 2's Bedrock fallback check is limited to the Tier 3 judge. The token budgets now read 'GPT-5/6 at least 32,768; other models 16,384 ... (8,192 report suggestions, 16,000 dataset generation)'.
  • No tests cover effort wiring for dedup and the dimension and insights judges: Addressed in 749ce18. Added a parametrized test that runs the deduplication LLM path (IntraSkillValidator with mocked embeddings and clusters), DimensionJudge and InsightsJudge against a mocked OpenAI SDK on gpt-6.1-sol. It asserts reasoning_effort == 'medium' in the request kwargs.
  • Generic schema-fallback helper now special-cases Anthropic's effort key: Addressed in ef1a715. _call_with_schema_fallback now takes a build_kwargs(include_schema) callable, and the Anthropic and OpenAI branches each build their own request with or without the schema. The 'effort' in schema_option block is gone. The existing schema-downgrade effort test still passes.
  • _chat_completion_payload has no production caller, so the drift test checks a dead copy: Addressed in a6d3721. llm_judge._chat_completion_payload now composes the client's _token_limit_kwargs, _temperature_kwargs and _build_openai_response_format with effective_reasoning_effort, so the template drift test compares against what LLMClient sends. I removed the duplicate _is_native_openai_chat_url; its canonical and deceptive URL cases now assert the payload's token key.

@rng1995
rng1995 marked this pull request as ready for review October 9, 2026 06:24
rng1995 and others added 2 commits October 13, 2026 01:16
Resolve the CHANGELOG.md conflict: keep main's Added entry (SkillSpector
version in the Tier 1 card) and multiline-catalog fix alongside this
branch's Changed and Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
Resolve conflicts with #193: keep both imports in local_agents.py
(provider_config model checks and the installed-agent classes) and both
sides' Changed and Fixed entries in CHANGELOG.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
@rng1995
rng1995 enabled auto-merge October 14, 2026 03:02
@rng1995
rng1995 merged commit f7dec01 into main Oct 14, 2026
17 checks passed
@rng1995
rng1995 deleted the naren/model-defaults-gpt-6-1-sol-opus-5-5 branch October 14, 2026 03:05
rng1995 added a commit to mavericksea-ai/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with NVIDIA#188 and NVIDIA#193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with #188 and #193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to YMuskrat/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with NVIDIA#188 and NVIDIA#193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to YMuskrat/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with NVIDIA#188 and NVIDIA#193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to YMuskrat/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with NVIDIA#188 and NVIDIA#193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to Minervaowl7/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve conflicts with NVIDIA#188 in inference/client.py and rubric_eval.py.
Keep NVIDIA#188's Anthropic and OpenAI request builders (reasoning effort,
structured output, per-model SDK clamp, family token limits) and feed
them this branch's per-request budget, so RubricJudge still raises the
budget for reasoning models and caps it at 16,384 on the Anthropic
provider. RubricJudge keeps both sides' class attributes.

The rubric default is now 16,384 on main, so the CHANGELOG entry and
the constants comment no longer say 4,096, and two budget tests follow
main: an explicit endpoint now uses the provider default model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to YMuskrat/SkillEvaluator that referenced this pull request Oct 14, 2026
Resolve the CHANGELOG.md conflict with NVIDIA#188 and NVIDIA#193 by keeping both
sides' Fixed entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit that referenced this pull request Oct 14, 2026
Brings in #184, #187 (SkillSpector version in the HTML report), #188
(GPT-6.1 Sol / Claude Opus 5.5 defaults, reasoning effort, structured
output, token sizing, refusal fallback), #191 (multiline catalog
descriptions), #193 (Docker agent bootstrap) and #199 (per-step token
runtime-failure detection). Conflicts:

- .gitleaks.toml: keep every allowlist from both sides (the PR's three
  history allowlists and main's Bedrock model ID allowlist).
- CHANGELOG.md: every entry from both sides under Unreleased, one Added,
  Changed, Fixed and Security heading each; the shared docs entry once.
- deduplication/intra_skill/intra_skill_validator.py: the client keeps the
  PR's LLM_VERIFY_MAX_TOKENS and gains main's medium reasoning effort.
- deduplication/intra_skill/llm_analyzer.py: the PR's bounded prompt and
  verdict parsing, with main's structured-output schema request.
- embedding/registry.py: keep the PR's _embed_texts refactor (main only
  reformatted the old loop); main's multiline-description check merged.
- inference/__init__.py: export both sides' names.
- reporting/html.py: the PR's run-status tables plus main's SkillSpector
  version helper; is_tier2_validator_name stays in run_status.py.
- tier3/eval_core/llm_judge.py: drop _is_native_openai_chat_url (removed
  by main) and _configured_secret_values (moved by the PR).
- tier3/harbor/collector.py: keep the PR's shared-metric pass lift and
  main's judge-model helpers; _compute_lift takes main's per-trial rewards
  and the PR's keyword-only N/A lists, and its overall uses the paired
  scores with the PR's N/A-aware basket check; lift.json keeps the PR's
  _paired_lift.
- tier3/harbor/local_agents.py: the PR's SkillEvaluatorCodex (subagent
  rollouts, setup network errors) now extends main's bootstrap-aware
  installed_agents.SkillEvaluatorCodex; NVIDIA Build Claude Code keeps
  SetupNetworkErrorAgent on main's SkillEvaluatorClaudeCode.
- tier3/harbor/runner.py: imports from both sides; Docker uses main's
  DOCKER_AGENT_IMPORT_PATHS, other Harbor backends the PR's
  HARBOR_AGENT_IMPORT_PATHS; agent kwargs from main's _harbor_agent_kwargs.
- tier3/harbor/templates/eval.py: the PR's skill-metric N/A helpers and
  allow_not_applicable judges, with main's 16,384-token judge ceiling and
  judge_model_used / reasoning effort / fallback provenance.
- utils/tool_runner.py: main's pinned SkillSpector v2.12.0 hint plus the
  PR's scanner hints.
- validators/security.py: imports from both sides.
- tests/inference/test_llm_client.py: keep both sides' tests.
- tests/test_harbor_local_mode.py: main's parametrized Docker route check
  plus the PR's Codex subclass assertion.
- tests/tier3/test_judge_parse_robustness.py: the PR's partial-salvage
  assertions plus main's new provenance and refusal tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit that referenced this pull request Oct 14, 2026
…icts

Main's #188 changed the content-deduplication prompt to ask for
`rationale` instead of `reasoning` and sends medium reasoning effort for
deduplication verdicts. The PR's shared Tier 2 verdict parser read only
`reasoning`, so after the merge an intra-skill verdict lost its
explanation. parse_bounded_llm_verdict now reads `rationale` and still
accepts `reasoning`, and the plugin Check B verdict client sends the same
medium effort as the intra-skill one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit that referenced this pull request Oct 14, 2026
Main's #188 leaves a case out of a judge metric's Skill lift when its two
arms were judged by different models (a judge fallback in one arm) and
counts it in lift.json `judge_mixed_cases`, through _compute_lift's
per-trial rewards. The PR writes lift.json, integration_lift.json and
loose_parts_lift.json through _paired_lift, which pairs both arms on the
same cases first, so main's exclusion never reached those files after the
merge.

pair_metric_scores now takes the judge-mixed cases per metric and leaves
each out of that metric only, listed in `basis.excluded_cases` with reason
`judge_mixed`; _paired_lift passes them and records `judge_mixed_cases`.
_compute_lift shares the same _judge_mixed_cases helper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit to kweinmeister/SkillEvaluator that referenced this pull request Oct 16, 2026
Brings in NVIDIA#188 (GPT-6.1 Sol / Claude Opus 5.5 defaults, reasoning effort,
refusal handling, per-model token sizing), NVIDIA#193 (Docker agent Node/npm
bootstrap) and NVIDIA#199 (per-step token runtime-failure evidence).

Conflicts:
- src/skillevaluator/inference/client.py: keep main's per-provider
  _openai_kwargs builder, reasoning effort and _extract_choice_content
  refusal/truncation checks; wrap that call in the PR's one-shot ADC token
  refresh on 401 for Vertex AI OpenAPI endpoints.
- src/skillevaluator/tier3/harbor/runner.py: import both sides'
  provider_config names; docker and gke share the PR's branch, with docker
  defaulting to main's DOCKER_AGENT_IMPORT_PATHS and gke to the PR's
  CONTAINER_AGENT_IMPORT_PATHS, and the GKE secure environment kept.
- src/skillevaluator/tier3/harbor/templates/eval.py: take main's
  _call_openai_compatible refactor (refusal fallback, empty-reply fallback,
  judge-call recording) and move the PR's Vertex ADC 401 refresh into
  _call_openai_compatible.
- tests/test_provider_agent_routing.py: union of both sides' imports.
- tests/validators/test_security.py: keep the PR's Vertex ADC SkillSpector
  tests and main's SkillSpector model/effort tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
rng1995 added a commit that referenced this pull request Oct 16, 2026
Brings in main through 3d91107, including #182 (Kata), #188 (model
defaults), #193 (Docker agent bootstrap), and #77 (publication evidence).
Kata, Runta, and Mosaic are all exposed: 26 Harbor-native backends plus
local, 27 modes in total. cua-cloud, opensandbox, hf-sandbox, podman,
prime, and smol stay disabled.

Conflicts:
- src/skillevaluator/tier3_environments.py: the registry-only comment
  lists the six backends that remain unexposed.
- src/skillevaluator/tier3/harbor/runner.py: took main's Sequence import
  and staged_task_paths.extend(task_paths) for the #77 runtime-binding
  check. The Mosaic staging check from this branch stays after it.
- docs/cli-reference.mdx, docs/tier3-live-evaluation.mdx,
  docs/agents-and-sandboxes.mdx: 27 modes / 26 Harbor-native backends,
  with kata, runta, and mosaic listed. The disabled list is the six
  above. Kept main's Kata kwarg notes, and kept both main's Podman
  rationale and this branch's Prime/Smol rationale.
- tests/test_harbor_environment_contract.py: kept main's Kata tests and
  this branch's Runta/Mosaic tests.
- tests/test_harbor_local_mode.py: the unexposed-backend set is the six
  above.
- tests/test_oss_packaging.py: 27 environments, 26 native, and matching
  doc counts.
- CHANGELOG.md (auto-merged into the released 0.5.0 section): restored
  0.5.0 to main's text. Moved the Runta/Mosaic entry to Unreleased/Added,
  and folded the backend count into main's Unreleased/Changed Kata entry
  (24th-26th backends, six still disabled).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Narendran Raghavan <nraghavan@nvidia.com>
@rng1995 rng1995 mentioned this pull request Oct 20, 2026
11 tasks done
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.

1 participant