33 * One-shot public SWE-bench smoke: Corbits as the agent on a single Lite instance.
44 *
55 * Intentionally narrow:
6- * - pins provider/model (default xai/thegreataxios + grok-4.5)
6+ * - provider/model come from required --provider / --model CLI flags
77 * - host-side agent run (product exec path), not a full SWE Docker fleet
88 * - captures a git patch + trajectory report for later official eval
99 *
1010 * Usage:
11- * bun scripts/eval-public-swe-one.ts
12- * bun scripts/eval-public-swe-one.ts --instance psf__requests-3362
13- * bun scripts/eval-public-swe-one.ts --provider xai/thegreataxios --model grok-4.5
11+ * bun scripts/eval-public-swe-one.ts --provider <name> --model <id>
12+ * bun scripts/eval-public-swe-one.ts --instance psf__requests-3362 --provider <name> --model <id>
13+ * bun scripts/eval-public-swe-one.ts --dry-run
1414 *
1515 * Optional official grading (heavy; needs Docker resources):
16- * bun scripts/eval-public-swe-one.ts --instance … --evaluate
16+ * bun scripts/eval-public-swe-one.ts --instance … --provider <name> --model <id> -- evaluate
1717 */
1818
1919import { mkdir , writeFile , readFile , mkdtemp , rm , cp } from "node:fs/promises" ;
@@ -25,8 +25,6 @@ import { loadConfig } from "../src/config/index.js";
2525import { runExec } from "../src/exec/runner.js" ;
2626
2727const REPO_ROOT = resolve ( dirname ( fileURLToPath ( import . meta. url ) ) , ".." ) ;
28- const DEFAULT_PROVIDER = "xai/thegreataxios" ;
29- const DEFAULT_MODEL = "grok-4.5" ;
3028const DEFAULT_INSTANCE = "psf__requests-3362" ;
3129const DEFAULT_SUBSET = "princeton-nlp/SWE-bench_Lite" ;
3230const DEFAULT_SPLIT = "test" ;
@@ -40,7 +38,6 @@ type CliOptions = {
4038 split : string ;
4139 agentTimeoutMs : number ;
4240 evaluate : boolean ;
43- allowOtherProvider : boolean ;
4441 dryRun : boolean ;
4542 outDir : string ;
4643 help : boolean ;
@@ -59,35 +56,33 @@ type SweInstance = {
5956} ;
6057
6158function printHelp ( ) : void {
62- console . log ( `Usage: bun scripts/eval-public-swe-one.ts [options]
59+ console . log ( `Usage: bun scripts/eval-public-swe-one.ts --provider <name> --model <id> [options]
6360
6461One public SWE-bench Lite instance via Corbits product exec.
6562
6663Options:
6764 --instance <id> SWE-bench instance_id (default: ${ DEFAULT_INSTANCE } )
68- --provider <name> Must be ${ DEFAULT_PROVIDER } unless --allow-other-provider
69- --model <id> Model id (default: ${ DEFAULT_MODEL } )
65+ --provider <name> Provider name (required except --help / --dry-run)
66+ --model <id> Model id (required except --help / --dry-run )
7067 --subset <hf> HF dataset id (default: ${ DEFAULT_SUBSET } )
7168 --split <name> Dataset split (default: ${ DEFAULT_SPLIT } )
7269 --timeout-ms <n> Agent wall-clock timeout (default: ${ DEFAULT_AGENT_TIMEOUT_MS } )
7370 --out <dir> Results directory (default: evals/public/results/<run-id>)
7471 --evaluate After the agent, attempt official SWE-bench Docker eval (heavy)
75- --allow-other-provider Permit a non-default provider (not recommended here)
7672 --dry-run Load instance + print plan; do not clone or run the agent
7773 -h, --help Show this help
7874` ) ;
7975}
8076
81- function parseArgs ( argv : string [ ] ) : CliOptions {
77+ export function parseArgs ( argv : string [ ] ) : CliOptions {
8278 const opts : CliOptions = {
83- provider : DEFAULT_PROVIDER ,
84- model : DEFAULT_MODEL ,
79+ provider : "" ,
80+ model : "" ,
8581 instanceId : DEFAULT_INSTANCE ,
8682 subset : DEFAULT_SUBSET ,
8783 split : DEFAULT_SPLIT ,
8884 agentTimeoutMs : DEFAULT_AGENT_TIMEOUT_MS ,
8985 evaluate : false ,
90- allowOtherProvider : false ,
9186 dryRun : false ,
9287 outDir : "" ,
9388 help : false ,
@@ -131,16 +126,24 @@ function parseArgs(argv: string[]): CliOptions {
131126 case "--evaluate" :
132127 opts . evaluate = true ;
133128 break ;
134- case "--allow-other-provider" :
135- opts . allowOtherProvider = true ;
136- break ;
137129 case "--dry-run" :
138130 opts . dryRun = true ;
139131 break ;
140132 default :
141133 throw new Error ( `unknown arg: ${ a } ` ) ;
142134 }
143135 }
136+ if ( ! opts . help && ! opts . dryRun ) {
137+ if ( ! opts . provider && ! opts . model ) {
138+ throw new Error ( "missing required --provider and --model" ) ;
139+ }
140+ if ( ! opts . provider ) {
141+ throw new Error ( "missing required --provider" ) ;
142+ }
143+ if ( ! opts . model ) {
144+ throw new Error ( "missing required --model" ) ;
145+ }
146+ }
144147 return opts ;
145148}
146149
@@ -314,13 +317,6 @@ async function main(): Promise<void> {
314317 process . exit ( 0 ) ;
315318 }
316319
317- if ( ! opts . allowOtherProvider && opts . provider !== DEFAULT_PROVIDER ) {
318- throw new Error (
319- `provider must be ${ DEFAULT_PROVIDER } for this prepaid smoke ` +
320- `(got ${ opts . provider } ). Pass --allow-other-provider to override.` ,
321- ) ;
322- }
323-
324320 const runId = new Date ( ) . toISOString ( ) . replace ( / [: .] / g, "-" ) ;
325321 const outDir =
326322 opts . outDir . length > 0
@@ -370,7 +366,9 @@ async function main(): Promise<void> {
370366
371367 const config = await loadConfig ( argv , { allowUnconfigured : false } ) ;
372368 if ( ! config . configured ) {
373- throw new Error ( "Provider not configured — check xAI OAuth profile xai/thegreataxios" ) ;
369+ throw new Error (
370+ `Provider not configured for --provider ${ opts . provider } --model ${ opts . model } ` ,
371+ ) ;
374372 }
375373 const resolvedProvider = config . providerName ;
376374 const resolvedModel = config . model ;
@@ -476,7 +474,9 @@ async function main(): Promise<void> {
476474 }
477475}
478476
479- main ( ) . catch ( ( err ) => {
480- console . error ( err instanceof Error ? err . message : err ) ;
481- process . exit ( 2 ) ;
482- } ) ;
477+ if ( import . meta. main ) {
478+ main ( ) . catch ( ( err ) => {
479+ console . error ( err instanceof Error ? err . message : err ) ;
480+ process . exit ( 2 ) ;
481+ } ) ;
482+ }
0 commit comments