diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f54c67a9..58c42b151 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -79,10 +79,10 @@ jobs: max-parallel: 3 matrix: model_entry: - - kimi-k2.6 - - mimo-v2.5 - - kimi-k2.6-camera-raw - - mimo-v2.5-camera-raw + - claude-code-mimo-v2.5 + - claude-code-kimi-k2.6 + - agents-sdk-mimo-v2.5 + - agents-sdk-kimi-k2.7-code steps: - uses: actions/checkout@v4 @@ -211,33 +211,33 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Download Molmo live Kimi artifact + - name: Download Molmo live Claude Code MiMo artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-kimi-k2.6 - path: molmo-live-src/kimi-k2.6 + name: report-molmo-live-claude-code-mimo-v2.5 + path: molmo-live-src/claude-code-mimo-v2.5 - - name: Download Molmo live MiMo v2.5 artifact + - name: Download Molmo live Claude Code Kimi artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-mimo-v2.5 - path: molmo-live-src/mimo-v2.5 + name: report-molmo-live-claude-code-kimi-k2.6 + path: molmo-live-src/claude-code-kimi-k2.6 - - name: Download Molmo live Kimi RAW_FPV artifact + - name: Download Molmo live Agents SDK MiMo artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-kimi-k2.6-camera-raw - path: molmo-live-src/kimi-k2.6-camera-raw + name: report-molmo-live-agents-sdk-mimo-v2.5 + path: molmo-live-src/agents-sdk-mimo-v2.5 - - name: Download Molmo live MiMo v2.5 RAW_FPV artifact + - name: Download Molmo live Agents SDK Kimi artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-mimo-v2.5-camera-raw - path: molmo-live-src/mimo-v2.5-camera-raw + name: report-molmo-live-agents-sdk-kimi-k2.7-code + path: molmo-live-src/agents-sdk-kimi-k2.7-code - name: Assemble Pages site run: | diff --git a/just/molmo.just b/just/molmo.just index ce1024df0..d5af56229 100644 --- a/just/molmo.just +++ b/just/molmo.just @@ -584,8 +584,8 @@ household-world-impl driver="mcp-smoke" profile="smoke" seeds="7" output_dir="ou roboclaws_codex_provider_args codex_model_args elif [[ "$driver" == "openai-agents-live" ]]; then openai_agents_profile="$(roboclaws_code_agent_provider ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" - openai_agents_model="$(roboclaws_code_agent_model ROBOCLAWS_CODEX_MODEL ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" - openai_agents_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL codex-router-responses)" + openai_agents_model="$(roboclaws_code_agent_model ROBOCLAWS_OPENAI_AGENTS_MODEL ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" + openai_agents_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_OPENAI_AGENTS_MODEL codex-router-responses)" elif [[ "$driver" == "claude-live" ]]; then claude_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CLAUDE_MODEL auto-claude)" roboclaws_claude_provider_args claude_model_args claude_env_args @@ -759,7 +759,7 @@ household-world-impl driver="mcp-smoke" profile="smoke" seeds="7" output_dir="ou HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY \ http_proxy https_proxy all_proxy no_proxy \ DISPLAY XAUTHORITY MUJOCO_GL PYOPENGL_PLATFORM LIBGL_ALWAYS_SOFTWARE \ - ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL \ + ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL ROBOCLAWS_OPENAI_AGENTS_MODEL \ ROBOCLAWS_CODEX_DISABLE_RESPONSES_WEBSOCKETS \ ROBOCLAWS_PROVIDER_TIMING_PROXY \ ROBOCLAWS_TIMING_PROXY_UPSTREAM_BASE_URL \ diff --git a/roboclaws/household/ci_live_reports.py b/roboclaws/household/ci_live_reports.py index 081de15b7..335989c2c 100644 --- a/roboclaws/household/ci_live_reports.py +++ b/roboclaws/household/ci_live_reports.py @@ -18,6 +18,12 @@ "claude-version.txt", "claude-events.jsonl", "claude.stderr.log", + "driver.log", + "openai-agents-events.jsonl", + "openai-agents-trace.json", + "openai-agents-spans.jsonl", + "openai-agents-server.log", + "openai-agents-skill-context.json", "checker.log", "server.pid", "trace.jsonl", @@ -34,6 +40,7 @@ class MolmoLiveModelEntry: name: str label: str + agent_engine: str provider_profile: str model: str secret_env: str @@ -42,36 +49,40 @@ class MolmoLiveModelEntry: MODEL_ENTRIES: tuple[MolmoLiveModelEntry, ...] = ( MolmoLiveModelEntry( - name="kimi-k2.6", - label="Kimi K2.6", - provider_profile="kimi-anthropic", - model="kimi-k2.6", - secret_env="KIMI_API_KEY", - profile="world-public-labels", - ), - MolmoLiveModelEntry( - name="mimo-v2.5", - label="MiMo v2.5", + name="claude-code-mimo-v2.5", + label="Claude Code + MiMo v2.5", + agent_engine="claude-code", provider_profile="mimo-tp-anthropic", model="mimo-v2.5", secret_env="MIMO_TP_KEY", profile="world-public-labels", ), MolmoLiveModelEntry( - name="kimi-k2.6-camera-raw-fpv", - label="Kimi K2.6 RAW_FPV", + name="claude-code-kimi-k2.6", + label="Claude Code + Kimi K2.6", + agent_engine="claude-code", provider_profile="kimi-anthropic", model="kimi-k2.6", secret_env="KIMI_API_KEY", - profile="camera-raw-fpv", + profile="world-public-labels", ), MolmoLiveModelEntry( - name="mimo-v2.5-camera-raw-fpv", - label="MiMo v2.5 RAW_FPV", - provider_profile="mimo-tp-anthropic", + name="agents-sdk-mimo-v2.5", + label="OpenAI Agents SDK + MiMo v2.5", + agent_engine="openai-agents-sdk", + provider_profile="mimo-tp-openai-chat", model="mimo-v2.5", secret_env="MIMO_TP_KEY", - profile="camera-raw-fpv", + profile="world-public-labels", + ), + MolmoLiveModelEntry( + name="agents-sdk-kimi-k2.7-code", + label="OpenAI Agents SDK + Kimi K2.7 Code", + agent_engine="openai-agents-sdk", + provider_profile="kimi-openai-chat", + model="kimi-k2.7-code", + secret_env="KIMI_API_KEY", + profile="world-public-labels", ), ) @@ -104,10 +115,11 @@ def base_status( "schema": STATUS_SCHEMA, "entry": entry.name, "label": entry.label, + "agent_engine": entry.agent_engine, "provider_profile": entry.provider_profile, "model": entry.model, "secret_env": entry.secret_env, - "driver": "claude", + "driver": entry.agent_engine, "profile": profile, "seed": seed, "generated_mess_count": generated_mess_count, @@ -294,7 +306,7 @@ def write_live_index(root: Path, statuses: list[dict[str, Any]] | None = None) - "
Published by GitHub Actions for main-only / opt-in ' "MolmoSpaces cleanup runs. Each row links to the report or diagnostics " - "for one provider-backed Claude Code run.
", + "for one provider-backed live-agent run.", "| Model | Status | Profile | Report | " "Provider | Rerun locally | Reason | {state} | "
f"{profile} | "
f"{report} | " - f"{provider} | "
+ f"{agent_engine}{provider} | "
f"{rerun_command} | "
f"{reason} | " "" diff --git a/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py b/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py index 9bad66eaa..aa82746af 100644 --- a/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py +++ b/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py @@ -51,11 +51,7 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace: "--generated-mess-count", type=int, default=None, - help=( - "Generated mess count override. Defaults to 5 for world-public-labels entries " - "and 10 for camera-raw-fpv entries so the RAW_FPV success gate can require " - "7 accepted placements." - ), + help="Generated mess count override. Defaults to 5 for world-public-labels entries.", ) parser.add_argument( "--profile", @@ -108,7 +104,7 @@ def _run_preflight_or_statuses( return None try: if not args.skip_version_check: - _version_checks(args) + _version_checks(args, entries) if not args.skip_uv_sync: _run_checked([args.uv_bin, "sync", "--extra", "dev", "--extra", "molmospaces"]) if not args.skip_prewarm: @@ -181,7 +177,7 @@ def _run_entry( "rerun_command": rerun_command, "env": { "ROBOCLAWS_PROVIDER_PROFILE": entry.provider_profile, - "ROBOCLAWS_CLAUDE_MODEL": entry.model, + _model_env_key(entry): entry.model, PROVIDER_TIMING_PROXY_ENV: _default_provider_timing_proxy_value(), }, "cache_roots": [ @@ -205,7 +201,7 @@ def _run_entry( env = os.environ.copy() env["ROBOCLAWS_PROVIDER_PROFILE"] = entry.provider_profile - env["ROBOCLAWS_CLAUDE_MODEL"] = entry.model + env[_model_env_key(entry)] = entry.model env.setdefault(PROVIDER_TIMING_PROXY_ENV, "1") env["ROBOCLAWS_REPORT_RERUN_COMMAND"] = rerun_command try: @@ -258,8 +254,6 @@ def _entry_profile(entry: MolmoLiveModelEntry, args: argparse.Namespace) -> str: def _entry_generated_mess_count(entry: MolmoLiveModelEntry, args: argparse.Namespace) -> int: if args.generated_mess_count is not None: return int(args.generated_mess_count) - if _entry_profile(entry, args) == "camera-raw-fpv": - return 10 return 5 @@ -284,7 +278,7 @@ def _live_command( "world=molmospaces/val_0", "backend=mujoco", "intent=cleanup", - "agent_engine=claude-code", + f"agent_engine={entry.agent_engine}", f"provider_profile={entry.provider_profile}", f"evidence_lane={profile}", f"seed={args.seed}", @@ -307,7 +301,7 @@ def _live_report_rerun_command(entry: MolmoLiveModelEntry, args: argparse.Namesp "world=molmospaces/val_0", "backend=mujoco", "intent=cleanup", - "agent_engine=claude-code", + f"agent_engine={entry.agent_engine}", f"provider_profile={entry.provider_profile}", f"evidence_lane={profile}", f"seed={args.seed}", @@ -317,12 +311,20 @@ def _live_report_rerun_command(entry: MolmoLiveModelEntry, args: argparse.Namesp ] return ( f"ROBOCLAWS_PROVIDER_PROFILE={entry.provider_profile} " - f"ROBOCLAWS_CLAUDE_MODEL={entry.model} " + f"{_model_env_key(entry)}={entry.model} " f"{PROVIDER_TIMING_PROXY_ENV}={_default_provider_timing_proxy_value()} " f"{shell_join(command)}" ) +def _model_env_key(entry: MolmoLiveModelEntry) -> str: + if entry.agent_engine == "claude-code": + return "ROBOCLAWS_CLAUDE_MODEL" + if entry.agent_engine == "openai-agents-sdk": + return "ROBOCLAWS_OPENAI_AGENTS_MODEL" + raise ValueError(f"unsupported Molmo live agent engine: {entry.agent_engine}") + + def _default_provider_timing_proxy_value() -> str: return os.environ.get(PROVIDER_TIMING_PROXY_ENV, "1") @@ -344,8 +346,14 @@ def _prewarm(args: argparse.Namespace, *, generated_mess_count: int) -> None: ) -def _version_checks(args: argparse.Namespace) -> None: - for binary in ("codex", "claude"): +def _version_checks( + args: argparse.Namespace, + entries: tuple[MolmoLiveModelEntry, ...], +) -> None: + required_binaries = ( + {"claude"} if any(entry.agent_engine == "claude-code" for entry in entries) else set() + ) + for binary in sorted(required_binaries): resolved = shutil.which(binary) if not resolved: raise RuntimeError(f"{binary} command not found") diff --git a/scripts/reports/write_pages_index.py b/scripts/reports/write_pages_index.py index 81e8cfde2..7abf70e5b 100644 --- a/scripts/reports/write_pages_index.py +++ b/scripts/reports/write_pages_index.py @@ -100,6 +100,9 @@ def _molmo_live_section(site_dir: Path) -> str: items = [] for entry in entries: label = html.escape(str(entry.get("label") or entry.get("entry") or "Molmo live run")) + agent_engine = html.escape( + str(entry.get("agent_engine") or entry.get("driver") or "unknown") + ) model = html.escape(str(entry.get("model") or "unknown model")) provider = html.escape(str(entry.get("provider_profile") or "unknown provider")) status = html.escape(str(entry.get("status") or "unknown")) @@ -116,7 +119,7 @@ def _molmo_live_section(site_dir: Path) -> str: else: title = f"{label}" desc = ( - f'
|---|