@jinn-network/client 0.1.8 → 0.1.9-canary.050a41b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/mech/adapter.d.ts +21 -1
- package/dist/adapters/mech/adapter.js +77 -10
- package/dist/adapters/mech/adapter.js.map +1 -1
- package/dist/adapters/mech/contracts.js +62 -28
- package/dist/adapters/mech/contracts.js.map +1 -1
- package/dist/adapters/mech/safe-revert.d.ts +4 -0
- package/dist/adapters/mech/safe-revert.js +5 -1
- package/dist/adapters/mech/safe-revert.js.map +1 -1
- package/dist/adapters/mech/safe.js +5 -1
- package/dist/adapters/mech/safe.js.map +1 -1
- package/dist/adapters/mech/verdict-code.js +1 -1
- package/dist/adapters/mech/verdict-code.js.map +1 -1
- package/dist/api/bootstrap-endpoint.d.ts +1 -0
- package/dist/api/bootstrap-endpoint.js +1 -0
- package/dist/api/bootstrap-endpoint.js.map +1 -1
- package/dist/api/discovery-endpoint.d.ts +1 -0
- package/dist/api/discovery-endpoint.js +24 -0
- package/dist/api/discovery-endpoint.js.map +1 -1
- package/dist/api/fleet-build.d.ts +1 -7
- package/dist/api/fleet-build.js +0 -7
- package/dist/api/fleet-build.js.map +1 -1
- package/dist/api/gather-status.d.ts +8 -2
- package/dist/api/gather-status.js +29 -117
- package/dist/api/gather-status.js.map +1 -1
- package/dist/api/loop-completion-build.d.ts +79 -0
- package/dist/api/loop-completion-build.js +155 -0
- package/dist/api/loop-completion-build.js.map +1 -0
- package/dist/api/peers.js +2 -0
- package/dist/api/peers.js.map +1 -1
- package/dist/api/setup-endpoints.d.ts +32 -0
- package/dist/api/setup-endpoints.js +93 -23
- package/dist/api/setup-endpoints.js.map +1 -1
- package/dist/api/solvernets-endpoints.js +3 -0
- package/dist/api/solvernets-endpoints.js.map +1 -1
- package/dist/api/status-build.d.ts +43 -33
- package/dist/api/status-build.js +3 -26
- package/dist/api/status-build.js.map +1 -1
- package/dist/api/status-rollup-build.d.ts +0 -4
- package/dist/api/status-rollup-build.js +0 -4
- package/dist/api/status-rollup-build.js.map +1 -1
- package/dist/build-info.json +4 -4
- package/dist/build-meta.json +1 -1
- package/dist/cli/commands/codedigest-revert-check.js +6 -2
- package/dist/cli/commands/codedigest-revert-check.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +37 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/eval.d.ts +76 -0
- package/dist/cli/commands/eval.js +401 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +2 -0
- package/dist/cli/commands/rewards.js +30 -3
- package/dist/cli/commands/rewards.js.map +1 -1
- package/dist/cli/commands/solver-nets.js +68 -0
- package/dist/cli/commands/solver-nets.js.map +1 -1
- package/dist/cli/commands/status.js +0 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +58 -7
- package/dist/config.js +96 -7
- package/dist/config.js.map +1 -1
- package/dist/daemon/ai-units-gate.d.ts +6 -6
- package/dist/daemon/ai-units-gate.js +11 -10
- package/dist/daemon/ai-units-gate.js.map +1 -1
- package/dist/daemon/balance-topup-loop.js +3 -0
- package/dist/daemon/balance-topup-loop.js.map +1 -1
- package/dist/daemon/creator.js +2 -0
- package/dist/daemon/creator.js.map +1 -1
- package/dist/daemon/daemon.d.ts +15 -0
- package/dist/daemon/daemon.js +78 -22
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/eviction-loop.d.ts +7 -0
- package/dist/daemon/eviction-loop.js +16 -0
- package/dist/daemon/eviction-loop.js.map +1 -1
- package/dist/daemon/jinn-claim-loop.js +3 -0
- package/dist/daemon/jinn-claim-loop.js.map +1 -1
- package/dist/daemon/join-applier.d.ts +35 -0
- package/dist/daemon/join-applier.js +49 -0
- package/dist/daemon/join-applier.js.map +1 -0
- package/dist/daemon/loop-heartbeat.d.ts +34 -0
- package/dist/daemon/loop-heartbeat.js +39 -0
- package/dist/daemon/loop-heartbeat.js.map +1 -0
- package/dist/daemon/reward-claim-loop.js +3 -0
- package/dist/daemon/reward-claim-loop.js.map +1 -1
- package/dist/daemon/watchdog-loop.d.ts +84 -0
- package/dist/daemon/watchdog-loop.js +91 -0
- package/dist/daemon/watchdog-loop.js.map +1 -0
- package/dist/dashboard/assets/index-8tAiMbUV.css +1 -0
- package/dist/dashboard/assets/index-CSFVwGFh.js +167 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/discovery/http.d.ts +7 -0
- package/dist/discovery/http.js +241 -25
- package/dist/discovery/http.js.map +1 -1
- package/dist/discovery/onchain.js +155 -1
- package/dist/discovery/onchain.js.map +1 -1
- package/dist/discovery/types.d.ts +106 -0
- package/dist/discovery/types.js +40 -0
- package/dist/discovery/types.js.map +1 -1
- package/dist/discovery/with-fallback.js +14 -0
- package/dist/discovery/with-fallback.js.map +1 -1
- package/dist/earning/bootstrap.d.ts +23 -0
- package/dist/earning/bootstrap.js +76 -27
- package/dist/earning/bootstrap.js.map +1 -1
- package/dist/earning/faucet.d.ts +1 -1
- package/dist/earning/faucet.js +2 -2
- package/dist/earning/faucet.js.map +1 -1
- package/dist/earning/safe-adapter.js +11 -0
- package/dist/earning/safe-adapter.js.map +1 -1
- package/dist/eval/eval-harness-run.d.ts +63 -0
- package/dist/eval/eval-harness-run.js +123 -0
- package/dist/eval/eval-harness-run.js.map +1 -0
- package/dist/eval/orchestrator.d.ts +163 -0
- package/dist/eval/orchestrator.js +232 -0
- package/dist/eval/orchestrator.js.map +1 -0
- package/dist/eval/paired.d.ts +68 -0
- package/dist/eval/paired.js +93 -0
- package/dist/eval/paired.js.map +1 -0
- package/dist/eval/resolve-slate-tasks.d.ts +35 -0
- package/dist/eval/resolve-slate-tasks.js +56 -0
- package/dist/eval/resolve-slate-tasks.js.map +1 -0
- package/dist/eval/screen-discovery.d.ts +22 -0
- package/dist/eval/screen-discovery.js +71 -0
- package/dist/eval/screen-discovery.js.map +1 -0
- package/dist/eval/screen-progress.d.ts +41 -0
- package/dist/eval/screen-progress.js +60 -0
- package/dist/eval/screen-progress.js.map +1 -0
- package/dist/eval/screen-runner.d.ts +30 -0
- package/dist/eval/screen-runner.js +289 -0
- package/dist/eval/screen-runner.js.map +1 -0
- package/dist/eval/screen.d.ts +107 -0
- package/dist/eval/screen.js +159 -0
- package/dist/eval/screen.js.map +1 -0
- package/dist/eval/slope.d.ts +29 -0
- package/dist/eval/slope.js +46 -0
- package/dist/eval/slope.js.map +1 -0
- package/dist/eval/train-sequence.d.ts +35 -0
- package/dist/eval/train-sequence.js +59 -0
- package/dist/eval/train-sequence.js.map +1 -0
- package/dist/eval/wilson.d.ts +45 -0
- package/dist/eval/wilson.js +48 -0
- package/dist/eval/wilson.js.map +1 -0
- package/dist/harnesses/engine/canonical-json.js +5 -3
- package/dist/harnesses/engine/canonical-json.js.map +1 -1
- package/dist/harnesses/engine/engine.d.ts +24 -0
- package/dist/harnesses/engine/engine.js +72 -9
- package/dist/harnesses/engine/engine.js.map +1 -1
- package/dist/harnesses/engine/persistence.d.ts +17 -0
- package/dist/harnesses/engine/persistence.js +28 -0
- package/dist/harnesses/engine/persistence.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/adapter.d.ts +2 -0
- package/dist/harnesses/impls/hermes-agent/adapter.js +8 -5
- package/dist/harnesses/impls/hermes-agent/adapter.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.d.ts +1 -0
- package/dist/harnesses/impls/hermes-agent/bootstrap.js +6 -1
- package/dist/harnesses/impls/hermes-agent/bootstrap.js.map +1 -1
- package/dist/harnesses/impls/hermes-agent/harness.d.ts +17 -3
- package/dist/harnesses/impls/hermes-agent/harness.js +68 -5
- package/dist/harnesses/impls/hermes-agent/harness.js.map +1 -1
- package/dist/harnesses/impls/index.d.ts +2 -0
- package/dist/harnesses/impls/index.js +2 -0
- package/dist/harnesses/impls/index.js.map +1 -1
- package/dist/harnesses/impls/learner/adapters/claude-code.js +5 -0
- package/dist/harnesses/impls/learner/adapters/claude-code.js.map +1 -1
- package/dist/harnesses/impls/learner/harness.d.ts +17 -1
- package/dist/harnesses/impls/learner/harness.js +51 -1
- package/dist/harnesses/impls/learner/harness.js.map +1 -1
- package/dist/harnesses/impls/learner/harvest.d.ts +2 -0
- package/dist/harnesses/impls/learner/harvest.js +7 -1
- package/dist/harnesses/impls/learner/harvest.js.map +1 -1
- package/dist/harnesses/impls/learner/plugin-path.js +1 -0
- package/dist/harnesses/impls/learner/plugin-path.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/harness.js.map +1 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.d.ts +2 -2
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js +3 -1
- package/dist/harnesses/impls/swe-rebench-v2-evaluator/index.js.map +1 -1
- package/dist/harnesses/readiness-registry.d.ts +10 -0
- package/dist/harnesses/readiness-registry.js +13 -0
- package/dist/harnesses/readiness-registry.js.map +1 -1
- package/dist/harnesses/types.d.ts +14 -0
- package/dist/learner/revert-decision.d.ts +16 -1
- package/dist/learner/revert-decision.js +38 -18
- package/dist/learner/revert-decision.js.map +1 -1
- package/dist/learner/revert-stats.d.ts +14 -0
- package/dist/learner/revert-stats.js +42 -0
- package/dist/learner/revert-stats.js.map +1 -1
- package/dist/local-provider-url.d.ts +3 -0
- package/dist/local-provider-url.js +28 -0
- package/dist/local-provider-url.js.map +1 -0
- package/dist/main.js +94 -25
- package/dist/main.js.map +1 -1
- package/dist/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/dist/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/dist/plugins/learner/hooks/session-start +30 -1
- package/dist/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/dist/preflight/deployment-readiness.d.ts +147 -0
- package/dist/preflight/deployment-readiness.js +366 -0
- package/dist/preflight/deployment-readiness.js.map +1 -0
- package/dist/preflight/pidfile-liveness.d.ts +7 -1
- package/dist/preflight/pidfile-liveness.js +14 -0
- package/dist/preflight/pidfile-liveness.js.map +1 -1
- package/dist/rpc/transport.d.ts +36 -0
- package/dist/rpc/transport.js +123 -24
- package/dist/rpc/transport.js.map +1 -1
- package/dist/scripts/swe-rebench-v2-seed-pool.json +2 -1
- package/dist/solver-nets/registry.d.ts +19 -0
- package/dist/solver-nets/registry.js +92 -66
- package/dist/solver-nets/registry.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.d.ts +76 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js +156 -0
- package/dist/solver-types/_swe-rebench-v2-held-out-slate.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.d.ts +81 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js +116 -0
- package/dist/solver-types/_swe-rebench-v2-pool-recovery.js.map +1 -0
- package/dist/solver-types/_swe-rebench-v2-state.d.ts +9 -0
- package/dist/solver-types/_swe-rebench-v2-state.js +14 -0
- package/dist/solver-types/_swe-rebench-v2-state.js.map +1 -1
- package/dist/solver-types/_swe-rebench-v2-validated-pool.d.ts +30 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js +40 -0
- package/dist/solver-types/_swe-rebench-v2-validated-pool.js.map +1 -1
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v1.json +20 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.json +19 -0
- package/dist/solver-types/slates/held-out-slate.swe-rebench-v2.v2.screening-report.json +628 -0
- package/dist/solver-types/solver-type.d.ts +8 -0
- package/dist/solver-types/swe-rebench-v2.d.ts +2 -0
- package/dist/solver-types/swe-rebench-v2.js +115 -10
- package/dist/solver-types/swe-rebench-v2.js.map +1 -1
- package/dist/solvernets/launched-record-dispatcher.d.ts +3 -0
- package/dist/solvernets/launched-record-dispatcher.js.map +1 -1
- package/dist/solvernets/registry-client-erc8004.js +29 -37
- package/dist/solvernets/registry-client-erc8004.js.map +1 -1
- package/dist/solvernets/registry-client.d.ts +6 -0
- package/dist/solvernets/store.js +7 -2
- package/dist/solvernets/store.js.map +1 -1
- package/dist/spend/ai-units-config.d.ts +10 -0
- package/dist/spend/ai-units-config.js +7 -1
- package/dist/spend/ai-units-config.js.map +1 -1
- package/dist/spend/ai-units.d.ts +51 -0
- package/dist/spend/ai-units.js +73 -0
- package/dist/spend/ai-units.js.map +1 -1
- package/dist/spend/record.js +12 -5
- package/dist/spend/record.js.map +1 -1
- package/dist/store/store.d.ts +91 -5
- package/dist/store/store.js +170 -7
- package/dist/store/store.js.map +1 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.d.ts +108 -1
- package/dist/vendor/@jinn-network/sdk/dist/payloads/swe-rebench-v2.js +25 -1
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.d.ts +65 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2-held-out-slate.js +123 -0
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.d.ts +2 -2
- package/dist/vendor/@jinn-network/sdk/dist/solvernets/swe-rebench-v2.js +1 -1
- package/dist/vendor/@jinn-network/sdk/package.json +4 -0
- package/docker-compose.yml +3 -2
- package/package.json +22 -18
- package/plugins/learner/.claude-plugin/plugin.json +1 -1
- package/plugins/learner/.codex-plugin/plugin.json +1 -1
- package/plugins/learner/hooks/session-start +30 -1
- package/plugins/learner/skills/learn/consolidator-prompt.md +4 -0
- package/plugins/swe-rebench-v2-runtime/hooks/hooks.json +16 -0
- package/plugins/swe-rebench-v2-runtime/hooks/session-start +74 -0
- package/dist/dashboard/assets/index-CzKxvMcU.css +0 -32
- package/dist/dashboard/assets/index-yVemxHot.js +0 -351
package/dist/rpc/transport.d.ts
CHANGED
|
@@ -79,6 +79,31 @@ export declare class AllRpcsFailedError extends Error {
|
|
|
79
79
|
* viem's `buildRequest` re-wrap pass).
|
|
80
80
|
*/
|
|
81
81
|
export declare function isViemShouldThrowError(err: unknown): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Default cooldown applied to a slot that returns a quota / rate-limit error
|
|
84
|
+
* (#835). After this window the demoted slot becomes eligible again rather than
|
|
85
|
+
* being permanently disabled (AC2), so a transient 429 / monthly-quota blip
|
|
86
|
+
* never strands an operator on a degraded provider for the rest of the process.
|
|
87
|
+
*/
|
|
88
|
+
export declare const DEFAULT_RPC_COOLDOWN_MS = 60000;
|
|
89
|
+
/**
|
|
90
|
+
* Detect quota / rate-limit errors from an RPC provider (#835). Unlike
|
|
91
|
+
* {@link isViemShouldThrowError} (which marks EVM/wallet-level signals that must
|
|
92
|
+
* NOT trigger fallback), a quota error means the *slot* is temporarily unusable
|
|
93
|
+
* and should be demoted behind healthy slots for a cooldown window. Walks the
|
|
94
|
+
* cause chain (cycle-safe, mirroring `isViemShouldThrowError`) and matches on:
|
|
95
|
+
* - HTTP `status === 429` (the `http()` transport's `HttpRequestError`);
|
|
96
|
+
* - JSON-RPC `code === LimitExceededRpcError.code` (-32005);
|
|
97
|
+
* - a narrow message regex backstop covering unambiguous provider phrasings
|
|
98
|
+
* ("rate limit", "too many requests", "429", "quota", "compute unit",
|
|
99
|
+
* "request rate", "throughput") — deliberately excluding the ambiguous
|
|
100
|
+
* "limit"/"exceeded" words that collide with gas-limit errors.
|
|
101
|
+
*
|
|
102
|
+
* Deliberately narrow: a 5xx / network error is NOT a quota error (it falls
|
|
103
|
+
* through via viem but does not cool the slot — AC3 keeps static order when no
|
|
104
|
+
* quota errors occur), and a contract revert (code 3) is never a quota error.
|
|
105
|
+
*/
|
|
106
|
+
export declare function isRpcQuotaError(err: unknown): boolean;
|
|
82
107
|
/**
|
|
83
108
|
* Mask an RPC URL down to its hostname for display / error reporting. Drops
|
|
84
109
|
* the path so api-key segments in the URL don't leak into logs.
|
|
@@ -91,6 +116,17 @@ export interface BuildFallbackTransportOptions {
|
|
|
91
116
|
* "Tenderly stays in slot 3" constraint from the issue.
|
|
92
117
|
*/
|
|
93
118
|
rank?: boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Injectable clock for the quota-cooldown bookkeeping (#835). Defaults to
|
|
121
|
+
* {@link Date.now}. Tests pass a controllable stub so cooldown expiry (AC2)
|
|
122
|
+
* is deterministic without real timers.
|
|
123
|
+
*/
|
|
124
|
+
now?: () => number;
|
|
125
|
+
/**
|
|
126
|
+
* How long a slot stays demoted after a quota / rate-limit error, in ms
|
|
127
|
+
* (#835). Defaults to {@link DEFAULT_RPC_COOLDOWN_MS}.
|
|
128
|
+
*/
|
|
129
|
+
cooldownMs?: number;
|
|
94
130
|
}
|
|
95
131
|
/**
|
|
96
132
|
* Build a viem fallback transport over the given URLs. Returns a callable
|
package/dist/rpc/transport.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* at the read-API level (Ponder → eth_getLogs floor). This helper sits beneath
|
|
25
25
|
* both layers at the JSON-RPC transport level.
|
|
26
26
|
*/
|
|
27
|
-
import { ExecutionRevertedError, fallback, http, TransactionRejectedRpcError, UserRejectedRequestError, } from 'viem';
|
|
27
|
+
import { ExecutionRevertedError, fallback, http, LimitExceededRpcError, TransactionRejectedRpcError, UserRejectedRequestError, } from 'viem';
|
|
28
28
|
/**
|
|
29
29
|
* Hard cap on the number of providers in a single fallback chain. Four covers
|
|
30
30
|
* the "operator paid primary + public publicnode + public sepolia.base.org +
|
|
@@ -142,6 +142,58 @@ export function isViemShouldThrowError(err) {
|
|
|
142
142
|
}
|
|
143
143
|
return false;
|
|
144
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Default cooldown applied to a slot that returns a quota / rate-limit error
|
|
147
|
+
* (#835). After this window the demoted slot becomes eligible again rather than
|
|
148
|
+
* being permanently disabled (AC2), so a transient 429 / monthly-quota blip
|
|
149
|
+
* never strands an operator on a degraded provider for the rest of the process.
|
|
150
|
+
*/
|
|
151
|
+
export const DEFAULT_RPC_COOLDOWN_MS = 60_000;
|
|
152
|
+
/**
|
|
153
|
+
* Detect quota / rate-limit errors from an RPC provider (#835). Unlike
|
|
154
|
+
* {@link isViemShouldThrowError} (which marks EVM/wallet-level signals that must
|
|
155
|
+
* NOT trigger fallback), a quota error means the *slot* is temporarily unusable
|
|
156
|
+
* and should be demoted behind healthy slots for a cooldown window. Walks the
|
|
157
|
+
* cause chain (cycle-safe, mirroring `isViemShouldThrowError`) and matches on:
|
|
158
|
+
* - HTTP `status === 429` (the `http()` transport's `HttpRequestError`);
|
|
159
|
+
* - JSON-RPC `code === LimitExceededRpcError.code` (-32005);
|
|
160
|
+
* - a narrow message regex backstop covering unambiguous provider phrasings
|
|
161
|
+
* ("rate limit", "too many requests", "429", "quota", "compute unit",
|
|
162
|
+
* "request rate", "throughput") — deliberately excluding the ambiguous
|
|
163
|
+
* "limit"/"exceeded" words that collide with gas-limit errors.
|
|
164
|
+
*
|
|
165
|
+
* Deliberately narrow: a 5xx / network error is NOT a quota error (it falls
|
|
166
|
+
* through via viem but does not cool the slot — AC3 keeps static order when no
|
|
167
|
+
* quota errors occur), and a contract revert (code 3) is never a quota error.
|
|
168
|
+
*/
|
|
169
|
+
export function isRpcQuotaError(err) {
|
|
170
|
+
// HTTP 429 (below) and JSON-RPC -32005 (LimitExceededRpcError) are the PRIMARY
|
|
171
|
+
// detectors. This message regex is only a backstop for providers that surface
|
|
172
|
+
// quota errors as plain text. It deliberately avoids the ambiguous "limit" /
|
|
173
|
+
// "exceeded" words: a bare `exceeded.*limit` alternative false-positives on
|
|
174
|
+
// gas errors like "exceeded block gas limit" / "gas limit exceeded", which can
|
|
175
|
+
// arrive with a non-shouldThrow code (e.g. -32000) and would wrongly cool a
|
|
176
|
+
// healthy slot. The phrases below are unambiguously quota/rate-limit and never
|
|
177
|
+
// appear in gas/execution errors; the only thing dropped is a text-only quota
|
|
178
|
+
// error carrying no 429 / -32005, which no major provider (Alchemy / Infura /
|
|
179
|
+
// publicnode / Tenderly) produces.
|
|
180
|
+
const quotaMessage = /rate.?limit|too many requests|429|quota|compute unit|request rate|throughput/i;
|
|
181
|
+
const seen = new Set();
|
|
182
|
+
let cursor = err;
|
|
183
|
+
while (cursor instanceof Error && !seen.has(cursor)) {
|
|
184
|
+
seen.add(cursor);
|
|
185
|
+
// Comparing against a numeric constant already excludes non-numbers, so no
|
|
186
|
+
// separate `typeof === 'number'` guard is needed here.
|
|
187
|
+
if (cursor.status === 429)
|
|
188
|
+
return true;
|
|
189
|
+
if (cursor.code === LimitExceededRpcError.code)
|
|
190
|
+
return true;
|
|
191
|
+
if (quotaMessage.test(cursor.message))
|
|
192
|
+
return true;
|
|
193
|
+
cursor = cursor.cause;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
145
197
|
/**
|
|
146
198
|
* Mask an RPC URL down to its hostname for display / error reporting. Drops
|
|
147
199
|
* the path so api-key segments in the URL don't leak into logs.
|
|
@@ -172,39 +224,86 @@ export function buildFallbackTransport(urls, options = {}) {
|
|
|
172
224
|
*/
|
|
173
225
|
buildFallbackTransport.buildFromTransports = function buildFromTransports(transports, urls, options = {}) {
|
|
174
226
|
const maskedProviders = urls.map(maskRpcHost);
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
227
|
+
const now = options.now ?? Date.now;
|
|
228
|
+
const cooldownMs = options.cooldownMs ?? DEFAULT_RPC_COOLDOWN_MS;
|
|
229
|
+
const rank = options.rank ?? false;
|
|
230
|
+
// Cooldown bookkeeping, indexed by ORIGINAL slot index (#835). A slot that
|
|
231
|
+
// returns a quota / rate-limit error is demoted behind the healthy slots
|
|
232
|
+
// until `cooldownUntil[i]`, then becomes eligible again (AC1 + AC2). When no
|
|
233
|
+
// quota errors occur every entry stays 0 and the configured order is
|
|
234
|
+
// preserved verbatim (AC3).
|
|
235
|
+
const cooldownUntil = new Array(transports.length).fill(0);
|
|
236
|
+
// Self-stamping slot wrappers, built ONCE over the original slot order. Each
|
|
237
|
+
// wraps its original transport FACTORY, closing over its ORIGINAL index `i`.
|
|
238
|
+
// When the instantiated slot's request rejects with a quota error it stamps
|
|
239
|
+
// its OWN `cooldownUntil[i]` and re-throws unchanged. This per-slot
|
|
240
|
+
// self-stamping is why we don't use viem's `onResponse` — its `transport`
|
|
241
|
+
// arg is a freshly-instantiated instance that can't be mapped back to a slot
|
|
242
|
+
// index. Only the wrapper ARRAY is reordered per request (below); the
|
|
243
|
+
// wrappers themselves keep their original index for the lifetime of the
|
|
244
|
+
// chain.
|
|
245
|
+
const stampingTransports = transports.map((make, i) => {
|
|
246
|
+
return ((config) => {
|
|
247
|
+
const instance = make(config);
|
|
248
|
+
const innerRequest = instance.request.bind(instance);
|
|
249
|
+
instance.request = (async (args) => {
|
|
250
|
+
try {
|
|
251
|
+
return await innerRequest(args);
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
// A revert / user-rejected (shouldThrow-class) is an EVM/wallet
|
|
255
|
+
// signal, never a transport quota problem — must NOT cool the slot.
|
|
256
|
+
if (!isViemShouldThrowError(err) && isRpcQuotaError(err)) {
|
|
257
|
+
cooldownUntil[i] = now() + cooldownMs;
|
|
258
|
+
}
|
|
259
|
+
throw err;
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
return instance;
|
|
263
|
+
});
|
|
178
264
|
});
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
|
|
265
|
+
// Per-request slot order: healthy slots (in original order) first, then
|
|
266
|
+
// cooling slots (in original order) as a last resort. Strict `<` means a
|
|
267
|
+
// slot is healthy again exactly at `now() === cooldownUntil[i]`.
|
|
268
|
+
const orderSlots = () => {
|
|
269
|
+
const healthy = [];
|
|
270
|
+
const cooling = [];
|
|
271
|
+
const t = now();
|
|
272
|
+
for (let i = 0; i < stampingTransports.length; i++) {
|
|
273
|
+
if (t < cooldownUntil[i])
|
|
274
|
+
cooling.push(stampingTransports[i]);
|
|
275
|
+
else
|
|
276
|
+
healthy.push(stampingTransports[i]);
|
|
277
|
+
}
|
|
278
|
+
return [...healthy, ...cooling];
|
|
279
|
+
};
|
|
184
280
|
const wrapped = ((config) => {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
281
|
+
// Instantiate one inner fallback so the returned object carries the
|
|
282
|
+
// canonical `FallbackTransport` shape (`type: 'fallback'`, `onResponse`,
|
|
283
|
+
// `transports`). Its `request` is overridden to rebuild a fresh
|
|
284
|
+
// `fallback()` over the reordered slots on every call — the reorder is the
|
|
285
|
+
// whole point of #835, and a fresh chain with `retryCount: 0` reproduces
|
|
286
|
+
// the existing per-slot fall-through behaviour exactly.
|
|
287
|
+
const shape = fallback(stampingTransports, { rank, retryCount: 0 })(config);
|
|
288
|
+
shape.request = (async (args) => {
|
|
289
|
+
const perCall = fallback(orderSlots(), { rank, retryCount: 0 })(config);
|
|
188
290
|
try {
|
|
189
|
-
return await
|
|
291
|
+
return await perCall.request(args);
|
|
190
292
|
}
|
|
191
293
|
catch (err) {
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
//
|
|
195
|
-
// unchanged so callers (and the operator-app's `rpc_all_failed`
|
|
196
|
-
// state message) don't misread a single-slot revert as an
|
|
197
|
-
// exhausted-chain outage.
|
|
294
|
+
// shouldThrow-class errors (revert, user-rejected, CAIP 5000) are
|
|
295
|
+
// EVM/wallet-level — propagate unchanged so a single-slot revert is
|
|
296
|
+
// never misread as an exhausted-chain outage.
|
|
198
297
|
if (isViemShouldThrowError(err))
|
|
199
298
|
throw err;
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
//
|
|
299
|
+
// The whole chain is exhausted. viem has no distinct "all transports
|
|
300
|
+
// failed" class, so wrap the last underlying error in our structured
|
|
301
|
+
// `AllRpcsFailedError` carrying the masked host list in ORIGINAL
|
|
302
|
+
// configured order (never reordered).
|
|
204
303
|
throw new AllRpcsFailedError(maskedProviders, err);
|
|
205
304
|
}
|
|
206
305
|
});
|
|
207
|
-
return
|
|
306
|
+
return shape;
|
|
208
307
|
});
|
|
209
308
|
return wrapped;
|
|
210
309
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/rpc/transport.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/rpc/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"comment": "Real Python instance IDs that exist in the current nebius/SWE-rebench-leaderboard pool (split 2025_01). validate-pool --seed-positive runs gold-eval against each. Not every entry is guaranteed to record scorable:true — some leaderboard rows have nondeterministic gold patches or upstream-substrate issues. The team prunes this list over time as empirical admit-rates surface. See DR 2026-05-14-swe-rebench-eval-admission.",
|
|
2
|
+
"comment": "Real Python instance IDs that exist in the current nebius/SWE-rebench-leaderboard pool (split 2025_01). validate-pool --seed-positive runs gold-eval against each. Not every entry is guaranteed to record scorable:true — some leaderboard rows have nondeterministic gold patches or upstream-substrate issues. The team prunes this list over time as empirical admit-rates surface. See DR 2026-05-14-swe-rebench-eval-admission. NOTE: sympy__sympy-27510 is the shared T2.2/T3.1 release-gate fixture (client/test/release/tier-2/fixtures/known-instance.ts) — it MUST stay in this list so `validate-pool --seed-positive` keeps it admitted across each EVAL_SEMANTICS_VERSION bump; without a v4 admission the env-suite real-harness loop times out on admission_missing_or_unscorable (2026-06-08 cut).",
|
|
3
3
|
"source": "spike jinn-mono-fufn — initial set sampled from loadSweRebenchV2Pool() on 2026-05-14",
|
|
4
4
|
"instance_ids": [
|
|
5
|
+
"sympy__sympy-27510",
|
|
5
6
|
"tobymao__sqlglot-4661",
|
|
6
7
|
"Blaizzy__mlx-vlm-179",
|
|
7
8
|
"pydata__xarray-9974",
|
|
@@ -73,11 +73,30 @@ export declare class SolverNetRegistry {
|
|
|
73
73
|
private readonly nets;
|
|
74
74
|
register(net: LoadedSolverNet): void;
|
|
75
75
|
get(name: string): LoadedSolverNet | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Remove every entry registered under `name` — both the bare key and any
|
|
78
|
+
* `name#N` collision-suffixed keys `register()` may have assigned. Used by
|
|
79
|
+
* the live join applier (#1037) to make a re-join idempotent: it clears the
|
|
80
|
+
* prior registration before re-registering, so a re-apply updates in place
|
|
81
|
+
* instead of inserting a phantom `name#2` duplicate. Boot never calls this,
|
|
82
|
+
* so first-registration behaviour is unchanged.
|
|
83
|
+
*/
|
|
84
|
+
unregister(name: string): void;
|
|
76
85
|
forSolverType(solverType: string, taskRole?: SolverNetTaskRole): LoadedSolverNet | undefined;
|
|
77
86
|
list(): LoadedSolverNet[];
|
|
78
87
|
harnessSelections(): Record<string, string>;
|
|
79
88
|
claudeModelSelections(): Record<string, string>;
|
|
80
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Register a single joined SolverNet into `registry`, reproducing exactly the
|
|
92
|
+
* derivation + plugin-resolution the boot loop runs (default-plugin seeding,
|
|
93
|
+
* harness defaulting, role mapping). Shared by `loadSolverNets` (boot) and the
|
|
94
|
+
* live join applier (`daemon/join-applier.ts`, #1037) so the two paths cannot
|
|
95
|
+
* drift.
|
|
96
|
+
*
|
|
97
|
+
* No-ops when the joined entry has no resolvable contract or no roles.
|
|
98
|
+
*/
|
|
99
|
+
export declare function registerJoinedNet(registry: SolverNetRegistry, cid: string, joined: JoinedSolverNetConfig): Promise<void>;
|
|
81
100
|
export declare function loadSolverNets(config: {
|
|
82
101
|
joinedSolverNets?: Record<string, JoinedSolverNetConfig>;
|
|
83
102
|
}): Promise<SolverNetRegistry>;
|
|
@@ -126,6 +126,21 @@ export class SolverNetRegistry {
|
|
|
126
126
|
get(name) {
|
|
127
127
|
return this.nets.get(name);
|
|
128
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Remove every entry registered under `name` — both the bare key and any
|
|
131
|
+
* `name#N` collision-suffixed keys `register()` may have assigned. Used by
|
|
132
|
+
* the live join applier (#1037) to make a re-join idempotent: it clears the
|
|
133
|
+
* prior registration before re-registering, so a re-apply updates in place
|
|
134
|
+
* instead of inserting a phantom `name#2` duplicate. Boot never calls this,
|
|
135
|
+
* so first-registration behaviour is unchanged.
|
|
136
|
+
*/
|
|
137
|
+
unregister(name) {
|
|
138
|
+
for (const key of [...this.nets.keys()]) {
|
|
139
|
+
const net = this.nets.get(key);
|
|
140
|
+
if (net && net.name === name)
|
|
141
|
+
this.nets.delete(key);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
129
144
|
forSolverType(solverType, taskRole) {
|
|
130
145
|
return [...this.nets.values()].find((net) => net.enabled &&
|
|
131
146
|
net.solverType === solverType &&
|
|
@@ -155,76 +170,87 @@ export class SolverNetRegistry {
|
|
|
155
170
|
return out;
|
|
156
171
|
}
|
|
157
172
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Register a single joined SolverNet into `registry`, reproducing exactly the
|
|
175
|
+
* derivation + plugin-resolution the boot loop runs (default-plugin seeding,
|
|
176
|
+
* harness defaulting, role mapping). Shared by `loadSolverNets` (boot) and the
|
|
177
|
+
* live join applier (`daemon/join-applier.ts`, #1037) so the two paths cannot
|
|
178
|
+
* drift.
|
|
179
|
+
*
|
|
180
|
+
* No-ops when the joined entry has no resolvable contract or no roles.
|
|
181
|
+
*/
|
|
182
|
+
export async function registerJoinedNet(registry, cid, joined) {
|
|
183
|
+
if (!joined.contract)
|
|
184
|
+
return;
|
|
185
|
+
const solverType = `${joined.contract.id}.${joined.contract.version}`;
|
|
186
|
+
const contract = getSolverNetContract(joined.contract);
|
|
187
|
+
if (!contract)
|
|
188
|
+
return;
|
|
189
|
+
const roles = rolesFromJoinedConfig(joined);
|
|
190
|
+
if (roles.length === 0)
|
|
191
|
+
return;
|
|
192
|
+
const disabledDefaults = joined.disabledDefaultPlugins ?? [];
|
|
193
|
+
const defaultPlugins = defaultRuntimePluginsForSolverType(solverType)
|
|
194
|
+
.filter((plugin) => !defaultPluginDisabled(plugin, disabledDefaults));
|
|
195
|
+
const harness = joined.roles.includes('solver')
|
|
196
|
+
? joined.harness ?? CLAUDE_CODE_HARNESS
|
|
197
|
+
: evaluatorHarnessNameForContract(contract) ?? joined.harness ?? CLAUDE_CODE_HARNESS;
|
|
198
|
+
const net = {
|
|
199
|
+
enabled: true,
|
|
200
|
+
solverType,
|
|
201
|
+
roles,
|
|
202
|
+
harness,
|
|
203
|
+
...(joined.model ? { model: joined.model } : {}),
|
|
204
|
+
plugins: [...defaultPlugins, ...(joined.plugins ?? [])],
|
|
205
|
+
taskGenerator: { enabled: false },
|
|
206
|
+
};
|
|
207
|
+
const name = joined.name ?? cid;
|
|
208
|
+
if (!net.enabled)
|
|
209
|
+
return;
|
|
210
|
+
const runtimePlugins = [];
|
|
211
|
+
const seenSources = new Set();
|
|
212
|
+
const seenNames = new Set();
|
|
213
|
+
async function addRuntimePlugin(entry, provenance) {
|
|
214
|
+
const plugin = await resolveSolverPlugin(entry);
|
|
215
|
+
if (seenSources.has(plugin.source) || seenNames.has(plugin.name))
|
|
162
216
|
return;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const seenNames = new Set();
|
|
166
|
-
async function addRuntimePlugin(entry, provenance) {
|
|
167
|
-
const plugin = await resolveSolverPlugin(entry);
|
|
168
|
-
if (seenSources.has(plugin.source) || seenNames.has(plugin.name))
|
|
169
|
-
return;
|
|
170
|
-
if (!isRuntimePlugin(plugin) && !plugin.supports.includes(net.solverType)) {
|
|
171
|
-
throw new Error(`SolverNet ${name} runtime plugin ${plugin.name} solverType mismatch: config=${net.solverType} plugin supports=${plugin.supports.join(',')}`);
|
|
172
|
-
}
|
|
173
|
-
runtimePlugins.push(runtimePluginFrom(plugin, provenance));
|
|
174
|
-
seenSources.add(plugin.source);
|
|
175
|
-
seenNames.add(plugin.name);
|
|
217
|
+
if (!isRuntimePlugin(plugin) && !plugin.supports.includes(net.solverType)) {
|
|
218
|
+
throw new Error(`SolverNet ${name} runtime plugin ${plugin.name} solverType mismatch: config=${net.solverType} plugin supports=${plugin.supports.join(',')}`);
|
|
176
219
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
solverType: net.solverType,
|
|
195
|
-
roles: rolesFromConfig(net),
|
|
196
|
-
contract,
|
|
197
|
-
harness: canonicalHarnessName(net.harness),
|
|
198
|
-
...(net.model ? { model: net.model } : {}),
|
|
199
|
-
runtimePlugins,
|
|
200
|
-
taskGenerator: net.taskGenerator,
|
|
201
|
-
});
|
|
220
|
+
runtimePlugins.push(runtimePluginFrom(plugin, provenance));
|
|
221
|
+
seenSources.add(plugin.source);
|
|
222
|
+
seenNames.add(plugin.name);
|
|
223
|
+
}
|
|
224
|
+
// Per `spec/2026-05-05-solvernet-creation-and-launch.md` §8/§9, runtime
|
|
225
|
+
// plugins are operator-configured — the SolverNet contract no longer
|
|
226
|
+
// carries `defaultRuntimePlugins`. Network Tools is the one runtime-
|
|
227
|
+
// scoped default (`supports: ['jinn.runtime']`) auto-loaded so every
|
|
228
|
+
// operator's daemon can talk to the Jinn MCP surface. SolverType-bound
|
|
229
|
+
// plugins (e.g. the bundled prediction plugin) flow through
|
|
230
|
+
// `net.plugins`; the launcher seeds quick-start defaults into operator
|
|
231
|
+
// config rather than binding them to the contract.
|
|
232
|
+
for (const entry of [JINN_NETWORK_TOOLS_PLUGIN]) {
|
|
233
|
+
await addRuntimePlugin(entry, 'default');
|
|
234
|
+
}
|
|
235
|
+
for (const entry of net.plugins ?? []) {
|
|
236
|
+
await addRuntimePlugin(entry, 'configured');
|
|
202
237
|
}
|
|
238
|
+
registry.register({
|
|
239
|
+
name,
|
|
240
|
+
enabled: net.enabled,
|
|
241
|
+
solverType: net.solverType,
|
|
242
|
+
roles: rolesFromConfig(net),
|
|
243
|
+
contract,
|
|
244
|
+
harness: canonicalHarnessName(net.harness),
|
|
245
|
+
...(net.model ? { model: net.model } : {}),
|
|
246
|
+
runtimePlugins,
|
|
247
|
+
taskGenerator: net.taskGenerator,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
export async function loadSolverNets(config) {
|
|
251
|
+
const registry = new SolverNetRegistry();
|
|
203
252
|
for (const [cid, joined] of Object.entries(config.joinedSolverNets ?? {})) {
|
|
204
|
-
|
|
205
|
-
continue;
|
|
206
|
-
const solverType = `${joined.contract.id}.${joined.contract.version}`;
|
|
207
|
-
const contract = getSolverNetContract(joined.contract);
|
|
208
|
-
if (!contract)
|
|
209
|
-
continue;
|
|
210
|
-
const roles = rolesFromJoinedConfig(joined);
|
|
211
|
-
if (roles.length === 0)
|
|
212
|
-
continue;
|
|
213
|
-
const disabledDefaults = joined.disabledDefaultPlugins ?? [];
|
|
214
|
-
const defaultPlugins = defaultRuntimePluginsForSolverType(solverType)
|
|
215
|
-
.filter((plugin) => !defaultPluginDisabled(plugin, disabledDefaults));
|
|
216
|
-
const harness = joined.roles.includes('solver')
|
|
217
|
-
? joined.harness ?? CLAUDE_CODE_HARNESS
|
|
218
|
-
: evaluatorHarnessNameForContract(contract) ?? joined.harness ?? CLAUDE_CODE_HARNESS;
|
|
219
|
-
await registerFromConfig(joined.name ?? cid, {
|
|
220
|
-
enabled: true,
|
|
221
|
-
solverType,
|
|
222
|
-
roles,
|
|
223
|
-
harness,
|
|
224
|
-
...(joined.model ? { model: joined.model } : {}),
|
|
225
|
-
plugins: [...defaultPlugins, ...(joined.plugins ?? [])],
|
|
226
|
-
taskGenerator: { enabled: false },
|
|
227
|
-
}, contract);
|
|
253
|
+
await registerJoinedNet(registry, cid, joined);
|
|
228
254
|
}
|
|
229
255
|
return registry;
|
|
230
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/solver-nets/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Held-out task slate for the swe-rebench-v2 RL eval harness (issue #817).
|
|
3
|
+
*
|
|
4
|
+
* A slate is a versioned, content-addressed set of swe-rebench-v2
|
|
5
|
+
* `instance_id`s RESERVED from the training pool. The generator excludes
|
|
6
|
+
* slate instances from the train stream so they never enter training; a
|
|
7
|
+
* future eval orchestrator runs solvers against the slate to measure
|
|
8
|
+
* out-of-sample performance. Scores are only comparable *within* a slate
|
|
9
|
+
* version — a version bump (`v2`, …) is a distinct artifact with a distinct
|
|
10
|
+
* content hash, never compared against an earlier version.
|
|
11
|
+
*
|
|
12
|
+
* The artifact ships as a JSON file under `slates/` next to this module
|
|
13
|
+
* (`held-out-slate.swe-rebench-v2.<version>.json`). It carries a self-declared
|
|
14
|
+
* content hash: the loader recomputes a sha256 over the canonicalised,
|
|
15
|
+
* instance-id-sorted artifact and compares it to the file's `hash` field,
|
|
16
|
+
* failing loud on mismatch. This guards against accidental drift — a hand-edit
|
|
17
|
+
* that adds or removes an instance without re-deriving the hash. It is NOT a
|
|
18
|
+
* tamper-proof anchor: the declared hash lives in the same file it verifies, so
|
|
19
|
+
* a deliberate edit that also re-derives the hash passes, and the check is
|
|
20
|
+
* skipped entirely when the `hash` field is absent. A real trust anchor (an
|
|
21
|
+
* external/on-chain hash) is out of scope here.
|
|
22
|
+
*
|
|
23
|
+
* Hashing mirrors `hashVettedPoolArtifact` in `_swe-rebench-v2-validated-pool`:
|
|
24
|
+
* `sha256(canonicalJson(normalized))` with a `sha256:` prefix.
|
|
25
|
+
*/
|
|
26
|
+
import type { PoolTask } from './_swe-rebench-v2-pool.js';
|
|
27
|
+
export declare const HELD_OUT_SLATE_SCHEMA_VERSION: "held-out-slate.v1";
|
|
28
|
+
export interface HeldOutSlateArtifact {
|
|
29
|
+
schemaVersion: typeof HELD_OUT_SLATE_SCHEMA_VERSION;
|
|
30
|
+
solverType: string;
|
|
31
|
+
version: string;
|
|
32
|
+
generatedAt: string;
|
|
33
|
+
instanceIds: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface LoadedHeldOutSlate {
|
|
36
|
+
version: string;
|
|
37
|
+
hash: `sha256:${string}`;
|
|
38
|
+
instanceIds: Set<string>;
|
|
39
|
+
}
|
|
40
|
+
export declare function parseHeldOutSlateArtifact(raw: unknown): HeldOutSlateArtifact;
|
|
41
|
+
export declare function hashHeldOutSlateArtifact(artifact: HeldOutSlateArtifact): `sha256:${string}`;
|
|
42
|
+
/**
|
|
43
|
+
* Load the held-out slate for `solverType` at `version`. Validates the version
|
|
44
|
+
* shape, that the file's declared `solverType`/`version` match the request, and
|
|
45
|
+
* (when a `hash` field is present) that the recomputed content hash matches it —
|
|
46
|
+
* catching accidental edit-without-rehash drift, not deliberate tampering (see
|
|
47
|
+
* the module header). Throws if no slate file exists for the requested version
|
|
48
|
+
* (scores are only comparable within a known version).
|
|
49
|
+
*
|
|
50
|
+
* `opts.dir` overrides the slate file directory; it defaults to the
|
|
51
|
+
* module-relative `slatesDir()`. Production callers omit it (and so resolve the
|
|
52
|
+
* shipped slates); tests inject a temp dir to drive the fail-loud throw paths
|
|
53
|
+
* against malformed fixtures.
|
|
54
|
+
*/
|
|
55
|
+
export declare function loadHeldOutSlate(solverType: string, version: string, opts?: {
|
|
56
|
+
dir?: string;
|
|
57
|
+
}): LoadedHeldOutSlate;
|
|
58
|
+
/**
|
|
59
|
+
* Drop any pool task whose `instance_id` is in the held-out slate. This is the
|
|
60
|
+
* single train-stream exclusion (issue #817 AC#2): the generator is the sole
|
|
61
|
+
* train-stream chokepoint, so a slate instance filtered here is never posted,
|
|
62
|
+
* never claimable, and never trains.
|
|
63
|
+
*/
|
|
64
|
+
export declare function excludeHeldOutSlate(pool: PoolTask[], slateIds: Set<string>): PoolTask[];
|
|
65
|
+
/**
|
|
66
|
+
* Slate versions currently used as held-out exams. The generator excludes the
|
|
67
|
+
* UNION of these from the train stream, so every active exam stays out of
|
|
68
|
+
* training while non-slate instances of every repo remain trainable. Add a
|
|
69
|
+
* version here ONLY when its slate file exists (loadHeldOutSlate fails loud on
|
|
70
|
+
* a missing file).
|
|
71
|
+
*/
|
|
72
|
+
export declare const ACTIVE_HELD_OUT_SLATE_VERSIONS: readonly ["v1", "v2"];
|
|
73
|
+
/** Union of instance ids across the given active slate versions. */
|
|
74
|
+
export declare function loadActiveHeldOutSlateIds(solverType: string, versions: readonly string[], opts?: {
|
|
75
|
+
dir?: string;
|
|
76
|
+
}): Set<string>;
|