world-model-optimizer 0.2.0__tar.gz → 0.2.1__tar.gz
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.
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/PKG-INFO +41 -15
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/README.md +40 -14
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/pyproject.toml +13 -4
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/app.py +221 -40
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/app_test.py +685 -5
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/harness_app.py +26 -108
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/harness_app_test.py +133 -204
- world_model_optimizer-0.2.0/wmo/cli/harness_distill.py → world_model_optimizer-0.2.1/wmo/cli/model_app.py +491 -93
- world_model_optimizer-0.2.0/wmo/cli/harness_distill_test.py → world_model_optimizer-0.2.1/wmo/cli/model_app_test.py +312 -36
- world_model_optimizer-0.2.1/wmo/cli/model_roles.py +138 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/model_roles_test.py +137 -1
- world_model_optimizer-0.2.1/wmo/cli/optimize_model_app.py +1425 -0
- world_model_optimizer-0.2.1/wmo/cli/optimize_model_app_test.py +1441 -0
- world_model_optimizer-0.2.1/wmo/cli/pool_registry.py +791 -0
- world_model_optimizer-0.2.1/wmo/cli/pool_registry_test.py +834 -0
- world_model_optimizer-0.2.1/wmo/cli/route_app.py +1147 -0
- world_model_optimizer-0.2.1/wmo/cli/route_app_test.py +2547 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/ui.py +16 -10
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/config.py +18 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/config_test.py +13 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/settings.py +6 -0
- world_model_optimizer-0.2.1/wmo/conftest.py +46 -0
- world_model_optimizer-0.2.1/wmo/distill/README.md +96 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/config.py +136 -21
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/config_test.py +74 -48
- world_model_optimizer-0.2.1/wmo/distill/configs/distill-headline.toml +89 -0
- world_model_optimizer-0.2.1/wmo/distill/configs/distill-qwen-anchor.toml +145 -0
- world_model_optimizer-0.2.1/wmo/distill/configs/distill-smoke-dev.toml +70 -0
- world_model_optimizer-0.2.1/wmo/distill/configs/distill-tau2-smoke.toml +74 -0
- world_model_optimizer-0.2.1/wmo/distill/configs/tb2-harbor-job-template.yaml +15 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/cost.py +0 -4
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/cost_test.py +0 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/data.py +2 -35
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/data_test.py +0 -52
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/loop.py +136 -69
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/loop_test.py +85 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/rendering.py +0 -13
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/rollouts.py +46 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/rollouts_test.py +3 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/store.py +187 -9
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/store_test.py +309 -0
- world_model_optimizer-0.2.1/wmo/distill/tau2.py +628 -0
- world_model_optimizer-0.2.1/wmo/distill/tau2_proxy.py +328 -0
- world_model_optimizer-0.2.1/wmo/distill/tau2_proxy_test.py +288 -0
- world_model_optimizer-0.2.1/wmo/distill/tau2_test.py +359 -0
- world_model_optimizer-0.2.1/wmo/distill/xtoken/__init__.py +68 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/chunks.py +0 -5
- world_model_optimizer-0.2.1/wmo/distill/xtoken/prompt_logprobs_test.py +604 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/__init__.py +10 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/build.py +34 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/build_test.py +35 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/eval_suites.py +4 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/closed_loop.py +87 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/closed_loop_test.py +171 -0
- world_model_optimizer-0.2.1/wmo/env/llm_agent.py +243 -0
- world_model_optimizer-0.2.1/wmo/env/llm_agent_test.py +271 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/grid.py +4 -6
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/open_loop.py +10 -10
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_runtime.py +7 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_runtime_test.py +38 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/__init__.py +6 -0
- world_model_optimizer-0.2.1/wmo/optimize/cluster_labels.py +89 -0
- world_model_optimizer-0.2.1/wmo/optimize/cluster_labels_test.py +64 -0
- world_model_optimizer-0.2.1/wmo/optimize/compression.py +490 -0
- world_model_optimizer-0.2.1/wmo/optimize/compression_endpoint.py +418 -0
- world_model_optimizer-0.2.1/wmo/optimize/compression_endpoint_test.py +616 -0
- world_model_optimizer-0.2.1/wmo/optimize/compression_test.py +508 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/knn.py +198 -3
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/outcomes.py +76 -0
- world_model_optimizer-0.2.1/wmo/optimize/outcomes_test.py +182 -0
- world_model_optimizer-0.2.1/wmo/optimize/pipeline.py +472 -0
- world_model_optimizer-0.2.1/wmo/optimize/pipeline_test.py +351 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/policy.py +442 -22
- world_model_optimizer-0.2.1/wmo/optimize/policy_test.py +1266 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/report.py +35 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/report_test.py +99 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/routing.py +63 -16
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/routing_test.py +72 -1
- world_model_optimizer-0.2.1/wmo/optimize/scorecard.py +1100 -0
- world_model_optimizer-0.2.1/wmo/optimize/scorecard_test.py +973 -0
- world_model_optimizer-0.2.1/wmo/optimize/sweep.py +614 -0
- world_model_optimizer-0.2.1/wmo/optimize/sweep_test.py +394 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/anthropic.py +29 -5
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/azure_openai.py +21 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/base.py +33 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/bedrock.py +115 -12
- world_model_optimizer-0.2.1/wmo/providers/bedrock_test.py +330 -0
- world_model_optimizer-0.2.1/wmo/providers/catalog.py +179 -0
- world_model_optimizer-0.2.1/wmo/providers/catalog_test.py +128 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/openai.py +23 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/openai_responses.py +12 -0
- world_model_optimizer-0.2.1/wmo/providers/openrouter.py +212 -0
- world_model_optimizer-0.2.1/wmo/providers/openrouter_pricing.py +283 -0
- world_model_optimizer-0.2.1/wmo/providers/openrouter_pricing_test.py +239 -0
- world_model_optimizer-0.2.1/wmo/providers/openrouter_test.py +329 -0
- world_model_optimizer-0.2.1/wmo/providers/pool.py +571 -0
- world_model_optimizer-0.2.1/wmo/providers/pool_test.py +930 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/registry.py +2 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/openai_test.py +123 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tinker.py +43 -9
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/waterfall.py +11 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/waterfall_test.py +22 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/repo_layout_test.py +9 -5
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/builds.py +2 -1
- world_model_optimizer-0.2.1/wmo/serving/chat.py +1828 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/chat_openai_client_test.py +168 -12
- world_model_optimizer-0.2.1/wmo/serving/chat_test.py +2930 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/endpoint_config.py +10 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/endpoint_config_test.py +12 -1
- world_model_optimizer-0.2.1/wmo/serving/query_embeddings.py +199 -0
- world_model_optimizer-0.2.1/wmo/serving/query_embeddings_test.py +156 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/savings.py +11 -2
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/savings_test.py +25 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/server.py +12 -1
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/server_test.py +48 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/__init__.py +2 -0
- world_model_optimizer-0.2.1/wmo/tracking/pricing.py +156 -0
- world_model_optimizer-0.2.1/wmo/tracking/pricing_test.py +118 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/tracker.py +46 -2
- world_model_optimizer-0.2.1/wmo/tracking/tracker_test.py +171 -0
- world_model_optimizer-0.2.0/wmo/cli/model_roles.py +0 -82
- world_model_optimizer-0.2.0/wmo/cli/route_app.py +0 -274
- world_model_optimizer-0.2.0/wmo/cli/route_app_test.py +0 -319
- world_model_optimizer-0.2.0/wmo/conftest.py +0 -19
- world_model_optimizer-0.2.0/wmo/env/llm_agent.py +0 -93
- world_model_optimizer-0.2.0/wmo/env/llm_agent_test.py +0 -100
- world_model_optimizer-0.2.0/wmo/optimize/outcomes_test.py +0 -77
- world_model_optimizer-0.2.0/wmo/optimize/policy_test.py +0 -612
- world_model_optimizer-0.2.0/wmo/providers/bedrock_test.py +0 -144
- world_model_optimizer-0.2.0/wmo/providers/pool.py +0 -170
- world_model_optimizer-0.2.0/wmo/providers/pool_test.py +0 -219
- world_model_optimizer-0.2.0/wmo/serving/chat.py +0 -878
- world_model_optimizer-0.2.0/wmo/serving/chat_test.py +0 -936
- world_model_optimizer-0.2.0/wmo/tracking/pricing.py +0 -99
- world_model_optimizer-0.2.0/wmo/tracking/pricing_test.py +0 -60
- world_model_optimizer-0.2.0/wmo/tracking/tracker_test.py +0 -83
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/.gitignore +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/conftest.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/LICENSE +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/anthropic.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/anthropic_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/aws_mantle.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/azure_openai.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/azure_openai_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/base.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/bedrock.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/bedrock_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/openai.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/adapters/openai_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/classify.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/classify_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/import_hygiene_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/pricing.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/pricing_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/py.typed +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/types.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/types_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/waterfall.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/packages/llm-waterfall/llm_waterfall/waterfall_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/default.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/definitions_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/meta.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/optimizer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/optimizer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/project.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/agents/project_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/api_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/agent_session.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/agent_session_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/e2b_cmds.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/e2b_cmds_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/eval_closed_loop.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/eval_closed_loop_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/hosted_session.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/hosted_session_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/ingest_cmd.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/ingest_cmd_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/platform_cmds.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/platform_cmds_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/session_state.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/session_state_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/ui_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/workspace_sync.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/cli/workspace_sync_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/card.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/card_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/dotenv.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/dotenv_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/settings_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/store.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/config/store_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/api_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/apps.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/apps_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/brave.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/brave_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/connector.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/connector_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/credentials.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/credentials_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/github.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/github_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/google.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/google_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/notion.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/notion_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/oauth.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/oauth_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/slack.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/slack_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/store.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/store_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/types.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/connect/types_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/parsing.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/parsing_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/render.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/render_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/text.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/types.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/core/types_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/agents.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/agents_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/deadlines.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/deadlines_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/fake_tinker.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/fake_tinker_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/gate.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/gate_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/renderers.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/renderers_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/rendering_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/samples.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/samples_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/teacher.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/teacher_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tokens.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tokens_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tracking.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tracking_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tripwire.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/tripwire_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/byte_offsets.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/byte_offsets_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/chunks_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/prompt_logprobs.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/teacher_render.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/distill/xtoken/teacher_render_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/autoconfig.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/autoconfig_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/demo.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/demo_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/eval_suites_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/grounding.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/grounding_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/integration_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/knowledge.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/knowledge_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/loader.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/play.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/play_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/prompts.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/replay.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/replay_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/reporting.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/workspace.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/workspace_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/world_model.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/engine/world_model_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/base.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/base_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/episode.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/episode_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/scenarios.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/env/scenarios_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/agreement.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/agreement_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/base.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/base_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/closed_loop.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/closed_loop_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/failover.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/failover_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/gold.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/gold_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/grid_plot.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/grid_plot_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/grid_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/agent.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/agent_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/ctrf.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/ctrf_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/e2b_environment.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/e2b_environment_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/e2b_template_policy.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/scorer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/scorer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/tasks.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/harbor/tasks_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/open_loop_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/tasks.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/evals/tasks_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/code_runtime.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/code_runtime_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/create.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/create_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/delta.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/delta_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/doc.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/doc_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_ledger.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_ledger_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_reap.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_reap_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_sandbox.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/e2b_sandbox_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/environment.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/live_session.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/live_session_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/mutate.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/mutate_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_e2b.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_e2b_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/entry.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/runner_frames.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/runner_live.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/runner_service.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/runner_stdio.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_entry/runner_termination.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_local.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_local_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_vendor.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/pi_vendor_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/population.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/population_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/project_proposer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/project_proposer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/proposer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/proposer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/runner_link.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/runner_link_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/runtime.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/runtime_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/scoring.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/scoring_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/skills.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/skills_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/source_tree.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/source_tree_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/store.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/store_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/tools.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/tools_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/manifest.sha256 +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/CHANGELOG.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/LICENSE +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/README.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/VENDOR.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/docs/agent-harness.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/docs/durable-harness.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/docs/hooks.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/docs/models.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/docs/observability.md +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/package.json +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/agent-loop.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/agent.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/agent-harness.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/compaction/branch-summarization.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/compaction/compaction.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/compaction/utils.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/env/nodejs.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/messages.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/prompt-templates.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/jsonl-repo.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/jsonl-storage.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/memory-repo.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/memory-storage.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/repo-utils.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/session.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/session/uuid.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/skills.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/system-prompt.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/types.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/utils/shell-output.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/harness/utils/truncate.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/index.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/node.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/proxy.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/src/types.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/agent-loop.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/agent.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/e2e.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/agent-harness-stream.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/agent-harness.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/compaction.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/nodejs-env.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/prompt-templates.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/repo.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/resource-formatting.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/session-test-utils.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/session-uuid.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/session.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/skills.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/storage.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/system-prompt.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/harness/truncate.test.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/scratch/simple.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/utils/calculate.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/test/utils/get-current-time.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/tsconfig.build.json +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/vitest.config.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/pi-agent/vitest.harness.config.ts +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/vendor/vendor_pi.sh +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/workspace_patch.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/harness/workspace_patch_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/adapter.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/base.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/base_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/braintrust.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/braintrust_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/detect.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/detect_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/langfuse.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/langfuse_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/langsmith.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/langsmith_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/mastra.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/mastra_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/messages.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/messages_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/normalize.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/normalize_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/otel_genai.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/otel_genai_envcap_roundtrip_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/otel_genai_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/otel_writer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/otel_writer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/phoenix.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/phoenix_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/postgres.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/postgres_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/posthog.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/posthog_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/quality.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/quality_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/stream.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/stream_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/testdata/sample_otlp.json +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/ingest/testdata/sample_spans.jsonl +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/base.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/base_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/gepa.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/gepa_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/judge.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/judge_quality.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/judge_quality_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/judge_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/knn_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/numeric.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/numeric_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/reward.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/optimize/reward_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/auth.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/auth_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/client.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/client_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/credentials.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/credentials_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/transfer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/platform/transfer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/_bedrock_chat.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/_bedrock_chat_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/_openai_common.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/_responses_common.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/_responses_common_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/base_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/models.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/models_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/openai_responses_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/retry.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/retry_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/_openai_common_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/anthropic_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/azure_openai_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/bedrock_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/registry_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tests/streaming_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/providers/tinker_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/ablation.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/ablation_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_plot.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_plot_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_run.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_run_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_scaling.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/concurrency_scaling_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/gepa_scaling.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/gepa_scaling_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/pipeline.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/pipeline_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scaling_split.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scaling_split_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scenario_fidelity.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scenario_fidelity_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scenario_recovery.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/scenario_recovery_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/seed_stability.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/seed_stability_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/trace_scaling.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/research/trace_scaling_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/embedders.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/embedders_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/leakfree.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/leakfree_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/retriever.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/retrieval/retriever_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/builder.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/builder_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/clustering.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/clustering_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/facets.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/facets_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/selection.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/mining/selection_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/synthesis/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/synthesis/scenario_set.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/synthesis/scenario_set_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/synthesis/synthesizer.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/synthesis/synthesizer_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/verification/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/verification/judge.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/verification/judge_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/verification/verify.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/scenarios/verification/verify_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/__init__.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/builds_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/traces_source.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/serving/traces_source_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/telemetry.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/telemetry_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/clock.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/metered.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/metered_test.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/store.py +0 -0
- {world_model_optimizer-0.2.0 → world_model_optimizer-0.2.1}/wmo/tracking/store_test.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: world-model-optimizer
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Run agents, build world models from traces, and optimize agent harnesses.
|
|
5
5
|
Requires-Python: >=3.12
|
|
6
6
|
Requires-Dist: anthropic>=0.39
|
|
@@ -57,9 +57,9 @@ Description-Content-Type: text/markdown
|
|
|
57
57
|
|
|
58
58
|
# World Model Optimizer
|
|
59
59
|
|
|
60
|
-
`wmo`
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
`wmo` turns agent traces you already collect into continuous improvement. Start with a model
|
|
61
|
+
endpoint at frontier quality with 40%+ lower cost. Keep improving it with world model simulations,
|
|
62
|
+
meta-harness optimization, and model distillation.
|
|
63
63
|
|
|
64
64
|

|
|
65
65
|
|
|
@@ -71,28 +71,48 @@ builds task-specific harnesses for stronger performance at lower cost.
|
|
|
71
71
|
|
|
72
72
|
## Getting started
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
Install WMO, choose the model provider for the built-in runtime agent, and start a local run:
|
|
74
|
+
**1. Register your providers.**
|
|
77
75
|
|
|
78
76
|
```bash
|
|
79
77
|
pip install world-model-optimizer
|
|
80
78
|
wmo providers set
|
|
81
|
-
wmo run --task "Inspect this repository and explain it"
|
|
82
79
|
```
|
|
83
80
|
|
|
84
|
-
|
|
81
|
+
That verifies the provider and then offers to register its models as routing candidates in
|
|
82
|
+
`.wmo/pool.toml`, the roster everything below chooses from. It searches the provider's own
|
|
83
|
+
catalog (OpenRouter's 338 published models included) and asks only for what that backend needs.
|
|
84
|
+
Re-run it to add another provider's models beside the ones already registered.
|
|
85
|
+
|
|
86
|
+
**2. Tune a router on your OTel traces.**
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
wmo build --file traces.jsonl --name my-endpoint
|
|
90
|
+
|
|
91
|
+
# Score every registered model on held-out tasks from your traces
|
|
92
|
+
wmo optimize route sweep my-endpoint --traces traces.otel.jsonl
|
|
93
|
+
|
|
94
|
+
# Turn those measurements into a routing policy
|
|
95
|
+
wmo optimize route fit matrix.json --kind knn \
|
|
96
|
+
--out .wmo/models/my-endpoint/policy.json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**3. Serve it.**
|
|
85
100
|
|
|
86
101
|
```bash
|
|
87
|
-
wmo
|
|
102
|
+
wmo serve --name my-endpoint
|
|
88
103
|
```
|
|
89
104
|
|
|
90
|
-
|
|
105
|
+
See what it bought you against the model you were using before:
|
|
91
106
|
|
|
92
107
|
```bash
|
|
93
|
-
wmo optimize
|
|
108
|
+
wmo optimize route report matrix.json .wmo/models/my-endpoint/policy.json \
|
|
109
|
+
--baseline gpt-5.5
|
|
94
110
|
```
|
|
95
111
|
|
|
112
|
+
Distill your own small model into the pool with [`wmo optimize distill`](wmo/distill/README.md),
|
|
113
|
+
serve a single model with no routing via `wmo optimize route pin`, or build an optimized harness
|
|
114
|
+
for your agent with `wmo optimize harness`.
|
|
115
|
+
|
|
96
116
|
### Hosted platform
|
|
97
117
|
|
|
98
118
|
Create an account at [platform.experientiallabs.ai](https://platform.experientiallabs.ai), then
|
|
@@ -121,6 +141,9 @@ wmo optimize harness my-agent my-environment --tasks tasks.jsonl --backend e2b
|
|
|
121
141
|
|
|
122
142
|
## Use a world model as an API
|
|
123
143
|
|
|
144
|
+
`world-model-optimizer` includes world models that can be used to simulate your agent environment
|
|
145
|
+
for testing and optimization.
|
|
146
|
+
|
|
124
147
|
```python
|
|
125
148
|
from wmo import Action, ActionKind
|
|
126
149
|
from wmo.config.store import WorldModelStore
|
|
@@ -135,7 +158,8 @@ obs = wm.step(session.id, Action(kind=ActionKind.TOOL_CALL, name="add_to_cart",
|
|
|
135
158
|
print(obs.content)
|
|
136
159
|
```
|
|
137
160
|
|
|
138
|
-
Or over HTTP (same code path), namespaced by model name: `GET /world_models`, then `POST
|
|
161
|
+
Or over HTTP (same code path), namespaced by model name: `GET /world_models`, then `POST
|
|
162
|
+
/world_models/{name}/sessions` and `POST /world_models/{name}/sessions/{id}/step`.
|
|
139
163
|
|
|
140
164
|
## Run after platform login
|
|
141
165
|
|
|
@@ -176,9 +200,10 @@ the new versioned champion harness.
|
|
|
176
200
|
|
|
177
201
|
## Development
|
|
178
202
|
|
|
179
|
-
Managed with [uv](https://docs.astral.sh/uv/); linting/formatting with [ruff](https://docs.astral.sh/ruff/); type checking with [ty](https://github.com/astral-sh/ty). Conventions live in [AGENTS.md](./AGENTS.md).
|
|
203
|
+
Managed with [uv](https://docs.astral.sh/uv/); linting/formatting with [ruff](https://docs.astral.sh/ruff/); type checking with [ty](https://github.com/astral-sh/ty); tasks run through [just](https://github.com/casey/just) (`brew install just` / `cargo install just`). Conventions live in [AGENTS.md](./AGENTS.md).
|
|
180
204
|
|
|
181
205
|
```bash
|
|
206
|
+
just setup # first time: .env from the template + uv sync
|
|
182
207
|
uv sync --extra dev # env + dev tools
|
|
183
208
|
uv run ruff check . # lint
|
|
184
209
|
uv run ruff format . # format
|
|
@@ -189,7 +214,8 @@ uv run pytest -q # tests
|
|
|
189
214
|
## Usage telemetry
|
|
190
215
|
|
|
191
216
|
`wmo` uses anonymous usage telemetry to track the volume of usage.
|
|
192
|
-
Telemetry is strictly metadata. It never includes prompts, traces, actions, observations, file
|
|
217
|
+
Telemetry is strictly metadata. It never includes prompts, traces, actions, observations, file
|
|
218
|
+
paths,
|
|
193
219
|
model names, provider credentials, or raw user content.
|
|
194
220
|
|
|
195
221
|
Telemetry is enabled by default. To opt out for a project:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# World Model Optimizer
|
|
2
2
|
|
|
3
|
-
`wmo`
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
`wmo` turns agent traces you already collect into continuous improvement. Start with a model
|
|
4
|
+
endpoint at frontier quality with 40%+ lower cost. Keep improving it with world model simulations,
|
|
5
|
+
meta-harness optimization, and model distillation.
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
@@ -14,28 +14,48 @@ builds task-specific harnesses for stronger performance at lower cost.
|
|
|
14
14
|
|
|
15
15
|
## Getting started
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Install WMO, choose the model provider for the built-in runtime agent, and start a local run:
|
|
17
|
+
**1. Register your providers.**
|
|
20
18
|
|
|
21
19
|
```bash
|
|
22
20
|
pip install world-model-optimizer
|
|
23
21
|
wmo providers set
|
|
24
|
-
wmo run --task "Inspect this repository and explain it"
|
|
25
22
|
```
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
That verifies the provider and then offers to register its models as routing candidates in
|
|
25
|
+
`.wmo/pool.toml`, the roster everything below chooses from. It searches the provider's own
|
|
26
|
+
catalog (OpenRouter's 338 published models included) and asks only for what that backend needs.
|
|
27
|
+
Re-run it to add another provider's models beside the ones already registered.
|
|
28
|
+
|
|
29
|
+
**2. Tune a router on your OTel traces.**
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
wmo build --file traces.jsonl --name my-endpoint
|
|
33
|
+
|
|
34
|
+
# Score every registered model on held-out tasks from your traces
|
|
35
|
+
wmo optimize route sweep my-endpoint --traces traces.otel.jsonl
|
|
36
|
+
|
|
37
|
+
# Turn those measurements into a routing policy
|
|
38
|
+
wmo optimize route fit matrix.json --kind knn \
|
|
39
|
+
--out .wmo/models/my-endpoint/policy.json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**3. Serve it.**
|
|
28
43
|
|
|
29
44
|
```bash
|
|
30
|
-
wmo
|
|
45
|
+
wmo serve --name my-endpoint
|
|
31
46
|
```
|
|
32
47
|
|
|
33
|
-
|
|
48
|
+
See what it bought you against the model you were using before:
|
|
34
49
|
|
|
35
50
|
```bash
|
|
36
|
-
wmo optimize
|
|
51
|
+
wmo optimize route report matrix.json .wmo/models/my-endpoint/policy.json \
|
|
52
|
+
--baseline gpt-5.5
|
|
37
53
|
```
|
|
38
54
|
|
|
55
|
+
Distill your own small model into the pool with [`wmo optimize distill`](wmo/distill/README.md),
|
|
56
|
+
serve a single model with no routing via `wmo optimize route pin`, or build an optimized harness
|
|
57
|
+
for your agent with `wmo optimize harness`.
|
|
58
|
+
|
|
39
59
|
### Hosted platform
|
|
40
60
|
|
|
41
61
|
Create an account at [platform.experientiallabs.ai](https://platform.experientiallabs.ai), then
|
|
@@ -64,6 +84,9 @@ wmo optimize harness my-agent my-environment --tasks tasks.jsonl --backend e2b
|
|
|
64
84
|
|
|
65
85
|
## Use a world model as an API
|
|
66
86
|
|
|
87
|
+
`world-model-optimizer` includes world models that can be used to simulate your agent environment
|
|
88
|
+
for testing and optimization.
|
|
89
|
+
|
|
67
90
|
```python
|
|
68
91
|
from wmo import Action, ActionKind
|
|
69
92
|
from wmo.config.store import WorldModelStore
|
|
@@ -78,7 +101,8 @@ obs = wm.step(session.id, Action(kind=ActionKind.TOOL_CALL, name="add_to_cart",
|
|
|
78
101
|
print(obs.content)
|
|
79
102
|
```
|
|
80
103
|
|
|
81
|
-
Or over HTTP (same code path), namespaced by model name: `GET /world_models`, then `POST
|
|
104
|
+
Or over HTTP (same code path), namespaced by model name: `GET /world_models`, then `POST
|
|
105
|
+
/world_models/{name}/sessions` and `POST /world_models/{name}/sessions/{id}/step`.
|
|
82
106
|
|
|
83
107
|
## Run after platform login
|
|
84
108
|
|
|
@@ -119,9 +143,10 @@ the new versioned champion harness.
|
|
|
119
143
|
|
|
120
144
|
## Development
|
|
121
145
|
|
|
122
|
-
Managed with [uv](https://docs.astral.sh/uv/); linting/formatting with [ruff](https://docs.astral.sh/ruff/); type checking with [ty](https://github.com/astral-sh/ty). Conventions live in [AGENTS.md](./AGENTS.md).
|
|
146
|
+
Managed with [uv](https://docs.astral.sh/uv/); linting/formatting with [ruff](https://docs.astral.sh/ruff/); type checking with [ty](https://github.com/astral-sh/ty); tasks run through [just](https://github.com/casey/just) (`brew install just` / `cargo install just`). Conventions live in [AGENTS.md](./AGENTS.md).
|
|
123
147
|
|
|
124
148
|
```bash
|
|
149
|
+
just setup # first time: .env from the template + uv sync
|
|
125
150
|
uv sync --extra dev # env + dev tools
|
|
126
151
|
uv run ruff check . # lint
|
|
127
152
|
uv run ruff format . # format
|
|
@@ -132,7 +157,8 @@ uv run pytest -q # tests
|
|
|
132
157
|
## Usage telemetry
|
|
133
158
|
|
|
134
159
|
`wmo` uses anonymous usage telemetry to track the volume of usage.
|
|
135
|
-
Telemetry is strictly metadata. It never includes prompts, traces, actions, observations, file
|
|
160
|
+
Telemetry is strictly metadata. It never includes prompts, traces, actions, observations, file
|
|
161
|
+
paths,
|
|
136
162
|
model names, provider credentials, or raw user content.
|
|
137
163
|
|
|
138
164
|
Telemetry is enabled by default. To opt out for a project:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "world-model-optimizer"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.1"
|
|
4
4
|
description = "Run agents, build world models from traces, and optimize agent harnesses."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
# harbor 0.20.0 requires Python >=3.12; the harbor evaluator is a first-class optimize
|
|
@@ -95,7 +95,12 @@ build-backend = "hatchling.build"
|
|
|
95
95
|
|
|
96
96
|
[tool.hatch.build.targets.wheel]
|
|
97
97
|
packages = ["wmo", "packages/llm-waterfall/llm_waterfall"]
|
|
98
|
-
|
|
98
|
+
# Test-only code is named for pytest discovery (`*_test.py`), and these two are the exceptions
|
|
99
|
+
# that the glob therefore misses: `fake_tinker` is the deterministic Tinker double the distill
|
|
100
|
+
# tests run the whole loop against, and `wmo/conftest.py` is a pytest fixture module. Both are
|
|
101
|
+
# imported only by tests, so neither belongs in the published wheel. `fake_tinker` stays where
|
|
102
|
+
# it is rather than moving under a test path: five test modules import it by that name.
|
|
103
|
+
exclude = ["**/*_test.py", "wmo/distill/fake_tinker.py", "wmo/conftest.py"]
|
|
99
104
|
force-include = { "packages/llm-waterfall/LICENSE" = "llm_waterfall/LICENSE" }
|
|
100
105
|
|
|
101
106
|
[tool.hatch.build.targets.sdist]
|
|
@@ -124,7 +129,9 @@ environment-capture = { workspace = true }
|
|
|
124
129
|
# Tests live inline next to the modules they cover (foo.py -> foo_test.py).
|
|
125
130
|
python_files = ["*_test.py"]
|
|
126
131
|
# One root gate covers the flagship and every Python member (same inline-test convention).
|
|
127
|
-
|
|
132
|
+
# `deploy/` carries the operated services; their tests cover the deploy scripts themselves
|
|
133
|
+
# (a deploy that deletes the box's generated trees rotates the pinned TLS certificate).
|
|
134
|
+
testpaths = ["wmo", "packages", "deploy"]
|
|
128
135
|
# tau2-bench is a local clone of the external real-environment runner (own test suite, own
|
|
129
136
|
# deps) that lives beside the tau-bench member data; it is not part of this gate.
|
|
130
137
|
norecursedirs = ["tau2-bench"]
|
|
@@ -158,7 +165,9 @@ python-version = "3.12"
|
|
|
158
165
|
[tool.ty.src]
|
|
159
166
|
# `plot_trace_scaling.py` is a one-off research figure that imports matplotlib ephemerally
|
|
160
167
|
# (`uv run --with matplotlib`), not a project dependency — exclude it from the type gate.
|
|
161
|
-
|
|
168
|
+
# `deploy/` is box-side service code: it imports torch and transformers, which live in the
|
|
169
|
+
# GPU box's venv and are deliberately not project dependencies. Ruff still lints it.
|
|
170
|
+
exclude = ["examples/", ".agents/", "deploy/",
|
|
162
171
|
"packages/environment-capture/*/backend/",
|
|
163
172
|
"packages/environment-capture/tau-bench/",
|
|
164
173
|
"packages/environment-capture/terminal-tasks/",
|
|
@@ -18,6 +18,7 @@ import uuid
|
|
|
18
18
|
from dataclasses import dataclass
|
|
19
19
|
from datetime import UTC, datetime
|
|
20
20
|
from pathlib import Path
|
|
21
|
+
from typing import cast
|
|
21
22
|
from uuid import uuid4
|
|
22
23
|
|
|
23
24
|
import typer
|
|
@@ -35,12 +36,14 @@ from rich.panel import Panel
|
|
|
35
36
|
from rich.progress import BarColumn, DownloadColumn, Progress, TextColumn
|
|
36
37
|
from rich.table import Table
|
|
37
38
|
|
|
39
|
+
import wmo.cli.pool_registry as pool_registry
|
|
38
40
|
import wmo.providers as providers
|
|
39
41
|
from wmo.cli.agent_session import register as register_agent_session_commands
|
|
40
42
|
from wmo.cli.e2b_cmds import register as register_e2b_commands
|
|
41
43
|
from wmo.cli.eval_closed_loop import run_agreement, run_closed_loop
|
|
42
44
|
from wmo.cli.harness_app import harness_app, optimize_app
|
|
43
45
|
from wmo.cli.ingest_cmd import ingest as _ingest_command
|
|
46
|
+
from wmo.cli.model_roles import configured_role_configs
|
|
44
47
|
from wmo.cli.platform_cmds import register as register_platform_commands
|
|
45
48
|
from wmo.cli.ui import (
|
|
46
49
|
BuildParams,
|
|
@@ -75,8 +78,8 @@ from wmo.config import (
|
|
|
75
78
|
)
|
|
76
79
|
from wmo.config.card import make_build_card, save_card
|
|
77
80
|
from wmo.core.types import JsonObject
|
|
81
|
+
from wmo.engine.build import DEFAULT_TRAIN_SPLIT, ingest, split_traces
|
|
78
82
|
from wmo.engine.build import build as run_build
|
|
79
|
-
from wmo.engine.build import ingest, split_traces
|
|
80
83
|
from wmo.engine.demo import run_demo
|
|
81
84
|
from wmo.engine.eval_suites import (
|
|
82
85
|
discover_eval_suites,
|
|
@@ -94,9 +97,10 @@ from wmo.evals.grid_plot import plot_grid, plot_grid_heatmap
|
|
|
94
97
|
from wmo.evals.open_loop import EvalReport, OpenLoopEval
|
|
95
98
|
from wmo.ingest import VendorPull, get_adapter, list_adapters
|
|
96
99
|
from wmo.optimize.judge import JUDGE_VERSION, RubricJudge
|
|
97
|
-
from wmo.providers import ProviderConfig, ProviderKind, verify_all, verify_embedder
|
|
100
|
+
from wmo.providers import ProviderConfig, ProviderKind, VerifyResult, verify_all, verify_embedder
|
|
98
101
|
from wmo.providers.base import Embedder, EmbedderKind, Provider
|
|
99
102
|
from wmo.providers.models import resolve_provider_model
|
|
103
|
+
from wmo.providers.pool import Tier
|
|
100
104
|
from wmo.providers.retry import wrap_provider_with_retries
|
|
101
105
|
from wmo.research import Side, run_concurrency_scaling
|
|
102
106
|
from wmo.research.concurrency_run import build_real_runner, build_world_runner
|
|
@@ -185,6 +189,12 @@ _CONCURRENCY_ISOLATION_FLAGS: dict[str, tuple[str, ...]] = {
|
|
|
185
189
|
_DOWNLOAD_BENCHMARKS = typer.Argument(
|
|
186
190
|
None, help="Benchmark bundles to download, or 'all'. Omit for a picker."
|
|
187
191
|
)
|
|
192
|
+
# Repeatable option default hoisted out of the signature (ruff B008 forbids the call inline).
|
|
193
|
+
_POOL_MODEL_OPTION = typer.Option(
|
|
194
|
+
None,
|
|
195
|
+
"--pool-model",
|
|
196
|
+
help="Register this model id as a routing candidate, with no prompts; repeat for several.",
|
|
197
|
+
)
|
|
188
198
|
|
|
189
199
|
|
|
190
200
|
@dataclass(frozen=True)
|
|
@@ -250,9 +260,55 @@ def providers_set(
|
|
|
250
260
|
endpoint: str = typer.Option(None, "--endpoint", help="OpenAI-compatible API endpoint."),
|
|
251
261
|
deployment: str = typer.Option(None, "--deployment", help="Azure deployment name."),
|
|
252
262
|
api_version: str = typer.Option(None, "--api-version", help="Azure API version."),
|
|
263
|
+
pool: str = typer.Option(
|
|
264
|
+
None,
|
|
265
|
+
"--pool",
|
|
266
|
+
help="Candidate pool TOML the router picks from (default: <root>/pool.toml).",
|
|
267
|
+
),
|
|
268
|
+
pool_model: list[str] | None = _POOL_MODEL_OPTION,
|
|
269
|
+
api_key_env: str = typer.Option(
|
|
270
|
+
None, "--api-key-env", help="Env var holding the pool entries' API key (multi-account)."
|
|
271
|
+
),
|
|
272
|
+
tier: str = typer.Option(
|
|
273
|
+
None, "--tier", help=f"Pool entry tier: {' | '.join(pool_registry.TIERS)}."
|
|
274
|
+
),
|
|
275
|
+
input_per_mtok: float = typer.Option(
|
|
276
|
+
None,
|
|
277
|
+
"--input-per-mtok",
|
|
278
|
+
min=0.0,
|
|
279
|
+
help="Prompt-token price of every --pool-model, USD per 1M tokens.",
|
|
280
|
+
),
|
|
281
|
+
output_per_mtok: float = typer.Option(
|
|
282
|
+
None,
|
|
283
|
+
"--output-per-mtok",
|
|
284
|
+
min=0.0,
|
|
285
|
+
help="Completion-token price of every --pool-model, USD per 1M tokens.",
|
|
286
|
+
),
|
|
253
287
|
root: str = typer.Option(ARTIFACT_DIR, help="Project dir holding local settings."),
|
|
254
288
|
) -> None:
|
|
255
|
-
"""Choose and
|
|
289
|
+
"""Choose the local worker's provider, and register the models the router can choose from.
|
|
290
|
+
|
|
291
|
+
Two things a project needs, in one command. The worker provider lands in
|
|
292
|
+
`<root>/settings.toml` as `[models.worker]`, exactly as before. Then, on a terminal, this
|
|
293
|
+
offers to register models as ROUTING CANDIDATES in `<root>/pool.toml`, the roster
|
|
294
|
+
`wmo optimize route` selects over: pick a backend, search its catalog, and answer only what
|
|
295
|
+
that backend needs (an Azure deployment; a price for a model with no published one, never
|
|
296
|
+
for OpenRouter, which self-prices). Re-run it to add another provider's models beside the
|
|
297
|
+
ones already registered.
|
|
298
|
+
|
|
299
|
+
Scripts keep the old contract: with `--provider` and `--model` both given, nothing is
|
|
300
|
+
prompted. Registering non-interactively is `--pool-model <id>`, repeated per model, with
|
|
301
|
+
`--input-per-mtok`/`--output-per-mtok` when the model has no published price.
|
|
302
|
+
"""
|
|
303
|
+
if tier is not None and tier not in pool_registry.TIERS:
|
|
304
|
+
raise typer.BadParameter(f"--tier must be one of: {', '.join(pool_registry.TIERS)}")
|
|
305
|
+
if (input_per_mtok is None) != (output_per_mtok is None):
|
|
306
|
+
# A pool entry takes both prices or neither, so half a pair would be silently dropped
|
|
307
|
+
# (interactively) or rejected as an invalid entry (with --pool-model).
|
|
308
|
+
raise typer.BadParameter(
|
|
309
|
+
"set both --input-per-mtok and --output-per-mtok, or neither; a pool entry prices "
|
|
310
|
+
"prompt and completion tokens together"
|
|
311
|
+
)
|
|
256
312
|
existing = load_settings(root).models.worker
|
|
257
313
|
used_picker = _console.is_terminal and (provider is None or model is None)
|
|
258
314
|
if used_picker:
|
|
@@ -310,6 +366,58 @@ def providers_set(
|
|
|
310
366
|
f"[green]set[/green] local worker provider to {config.kind.value} "
|
|
311
367
|
f"({config.model_type or model}) in {settings_path(root)}"
|
|
312
368
|
)
|
|
369
|
+
_register_pool_models(
|
|
370
|
+
pool_path=pool_registry.pool_path_for(root, pool),
|
|
371
|
+
kind=config.kind,
|
|
372
|
+
pool_model=list(pool_model or []),
|
|
373
|
+
options=pool_registry.EntryOptions(
|
|
374
|
+
endpoint=config.endpoint,
|
|
375
|
+
region=config.region,
|
|
376
|
+
# The RAW flags, not the worker config's: `_worker_provider_config` fills an Azure
|
|
377
|
+
# deployment in from the model id when none was given, and a pool entry must never
|
|
378
|
+
# inherit a guessed deployment name (nothing can derive an operator's own).
|
|
379
|
+
deployment=deployment,
|
|
380
|
+
api_version=api_version,
|
|
381
|
+
api_key_env=api_key_env,
|
|
382
|
+
tier=cast("Tier", tier) if tier is not None else "frontier",
|
|
383
|
+
input_per_mtok=input_per_mtok,
|
|
384
|
+
output_per_mtok=output_per_mtok,
|
|
385
|
+
),
|
|
386
|
+
interactive=used_picker,
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def _register_pool_models(
|
|
391
|
+
*,
|
|
392
|
+
pool_path: Path,
|
|
393
|
+
kind: ProviderKind,
|
|
394
|
+
pool_model: list[str],
|
|
395
|
+
options: pool_registry.EntryOptions,
|
|
396
|
+
interactive: bool,
|
|
397
|
+
) -> None:
|
|
398
|
+
"""Register routing candidates after the worker provider is saved.
|
|
399
|
+
|
|
400
|
+
Explicit `--pool-model` ids win and register with no prompts, so a script gets the same
|
|
401
|
+
roster a person would build by hand. Otherwise the registry is OFFERED only on the run that
|
|
402
|
+
already prompted (a bare `wmo providers set` at a terminal): a scripted
|
|
403
|
+
`--provider ... --model ...` invocation keeps its exact pre-existing behavior and asks
|
|
404
|
+
nothing.
|
|
405
|
+
"""
|
|
406
|
+
if pool_model:
|
|
407
|
+
pool_registry.register_model_ids(
|
|
408
|
+
_console, pool_path=pool_path, kind=kind, model_ids=pool_model, options=options
|
|
409
|
+
)
|
|
410
|
+
return
|
|
411
|
+
if not interactive:
|
|
412
|
+
return
|
|
413
|
+
pool_registry.run_pool_registry(
|
|
414
|
+
_console,
|
|
415
|
+
lambda text: _console.input(text),
|
|
416
|
+
lambda text: _console.input(text, password=True),
|
|
417
|
+
pool_path=pool_path,
|
|
418
|
+
default_kind=kind,
|
|
419
|
+
options=options,
|
|
420
|
+
)
|
|
313
421
|
|
|
314
422
|
|
|
315
423
|
@providers_app.command("verify")
|
|
@@ -319,15 +427,18 @@ def providers_verify(
|
|
|
319
427
|
) -> None:
|
|
320
428
|
"""Ping every configured provider (completion + embed path) and report status.
|
|
321
429
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
430
|
+
Two sources count as "configured", because checking that credentials work is what you do
|
|
431
|
+
BEFORE spending anything on `wmo build`: the `[models.<role>]` roles in
|
|
432
|
+
`<root>/settings.toml` (what `wmo providers set` writes), and the providers persisted inside
|
|
433
|
+
every built world model. Completion providers are deduped by kind+model across both, so a
|
|
434
|
+
role naming the same backend as a built model costs one ping, not two. The phi embed path
|
|
435
|
+
belongs to a BUILT model, so on a project with nothing built that half is skipped with a
|
|
436
|
+
note instead of aborting the command; otherwise every distinct provider-backed embedder is
|
|
437
|
+
checked (the offline hashing embedder needs no credentials and is skipped). `--name` scopes
|
|
438
|
+
the whole report to that one world model.
|
|
325
439
|
"""
|
|
326
440
|
store = WorldModelStore(root)
|
|
327
441
|
names = [name] if name is not None else store.list_names()
|
|
328
|
-
if not names:
|
|
329
|
-
_console.print("[yellow]no world models built yet[/yellow]; run `wmo build --name <name>`")
|
|
330
|
-
return
|
|
331
442
|
configs: list[HarnessConfig] = []
|
|
332
443
|
for model_name in names:
|
|
333
444
|
try:
|
|
@@ -336,32 +447,88 @@ def providers_verify(
|
|
|
336
447
|
raise typer.BadParameter(str(exc)) from exc
|
|
337
448
|
configs.append(load_config(model_dir))
|
|
338
449
|
|
|
339
|
-
# Dedup completion
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
450
|
+
# Dedup identical completion calls across all selected models, then across the settings
|
|
451
|
+
# roles. World models come FIRST so a config present in both is pinged with the built
|
|
452
|
+
# artifact's own copy, exactly as before roles were a source.
|
|
453
|
+
labelled = [
|
|
454
|
+
(model_name, pc)
|
|
455
|
+
for model_name, cfg in zip(names, configs, strict=True)
|
|
456
|
+
for pc in cfg.providers
|
|
457
|
+
]
|
|
458
|
+
# `--name` asks about one world model; widening it to the project's roles would answer a
|
|
459
|
+
# question the caller did not ask (and bill for it).
|
|
460
|
+
if name is None:
|
|
461
|
+
labelled += [(f"models.{role}", pc) for role, pc in configured_role_configs(root)]
|
|
462
|
+
index: dict[str, int] = {}
|
|
463
|
+
provider_configs: list[ProviderConfig] = []
|
|
464
|
+
sources: list[list[str]] = []
|
|
465
|
+
for label, pc in labelled:
|
|
466
|
+
key = _completion_identity(pc)
|
|
467
|
+
if key not in index:
|
|
468
|
+
index[key] = len(provider_configs)
|
|
469
|
+
provider_configs.append(pc)
|
|
470
|
+
sources.append([])
|
|
471
|
+
if label not in sources[index[key]]:
|
|
472
|
+
sources[index[key]].append(label)
|
|
473
|
+
|
|
474
|
+
if not provider_configs:
|
|
475
|
+
_console.print(
|
|
476
|
+
"[yellow]nothing configured[/yellow]; run `wmo providers set` to choose a provider, "
|
|
477
|
+
"or `wmo build --name <name>` to build a world model"
|
|
478
|
+
)
|
|
479
|
+
raise typer.Exit(1)
|
|
480
|
+
|
|
481
|
+
for result, origin in zip(verify_all(provider_configs), sources, strict=True):
|
|
482
|
+
_print_verify_result(result, origin)
|
|
483
|
+
|
|
484
|
+
if not configs:
|
|
485
|
+
_console.print(
|
|
486
|
+
"[dim]embed path: skipped, no world model built yet "
|
|
487
|
+
"(the embedder is chosen by `wmo build`)[/dim]"
|
|
488
|
+
)
|
|
489
|
+
return
|
|
351
490
|
|
|
352
491
|
# Verify each distinct provider-backed embed path (skip the offline hashing embedder).
|
|
353
|
-
embed_seen: set[
|
|
354
|
-
for config in configs:
|
|
492
|
+
embed_seen: set[str] = set()
|
|
493
|
+
for model_name, config in zip(names, configs, strict=True):
|
|
355
494
|
if config.embed_provider is EmbedderKind.HASHING:
|
|
356
495
|
continue
|
|
357
496
|
embed_config = config.embed_provider_config()
|
|
358
|
-
key =
|
|
497
|
+
key = embed_config.model_dump_json()
|
|
359
498
|
if key in embed_seen:
|
|
360
499
|
continue
|
|
361
500
|
embed_seen.add(key)
|
|
362
501
|
result = verify_embedder(embed_config)
|
|
363
|
-
|
|
364
|
-
|
|
502
|
+
_print_verify_result(result, [model_name], prefix="embed:")
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
def _completion_identity(config: ProviderConfig) -> str:
|
|
506
|
+
"""What makes two provider configs the SAME completion call, for `providers verify` dedup.
|
|
507
|
+
|
|
508
|
+
Everything the config carries except the embed-only fields, which do not reach a completion
|
|
509
|
+
request. Keying on kind+model alone would collapse one model served from two Bedrock regions,
|
|
510
|
+
or one Azure model behind two deployments or endpoints, into a single ping, and then report
|
|
511
|
+
the config that was never called as verified on the other one's result. Deriving the key
|
|
512
|
+
from the whole config rather than a hand-listed subset means a field added later splits the
|
|
513
|
+
key by default instead of silently widening that collapse.
|
|
514
|
+
"""
|
|
515
|
+
return config.model_copy(update={"embed_model": None, "embed_dim": None}).model_dump_json()
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
def _print_verify_result(result: VerifyResult, sources: list[str], *, prefix: str = "") -> None:
|
|
519
|
+
"""Print one `providers verify` line, plus the next step to take when the ping failed.
|
|
520
|
+
|
|
521
|
+
`sources` names what asked for this provider (world model names, `models.<role>` settings
|
|
522
|
+
roles) so a failure points at the thing to fix. The detail is escaped: it carries raw
|
|
523
|
+
provider error text, and an unescaped `[...]` in it would be read as rich markup and crash
|
|
524
|
+
the report.
|
|
525
|
+
"""
|
|
526
|
+
mark = "[green]ok[/green]" if result.ok else "[red]fail[/red]"
|
|
527
|
+
origin = f" [dim]({', '.join(sources)})[/dim]" if sources else ""
|
|
528
|
+
detail = f" {escape(result.detail)}" if result.detail else ""
|
|
529
|
+
_console.print(f"{mark} {prefix}{result.kind.value} ({result.model}){origin}{detail}")
|
|
530
|
+
if not result.ok:
|
|
531
|
+
_console.print(f" [yellow]{_credential_hint(result.kind, result.detail)}[/yellow]")
|
|
365
532
|
|
|
366
533
|
|
|
367
534
|
@examples_app.command("list")
|
|
@@ -432,7 +599,10 @@ def build(
|
|
|
432
599
|
None, "--chain", help="Named failover chain from .wmo/fallback.toml (default: its default)."
|
|
433
600
|
),
|
|
434
601
|
train_split: float = typer.Option(
|
|
435
|
-
|
|
602
|
+
DEFAULT_TRAIN_SPLIT,
|
|
603
|
+
help="Train/held-out ratio for GEPA's internal split (lower = bigger valset). Shares "
|
|
604
|
+
"`wmo eval`'s default: both cut the same trace-id hash line, so a mismatch leaks train "
|
|
605
|
+
"traces into the eval holdout.",
|
|
436
606
|
),
|
|
437
607
|
embed_provider: str = typer.Option(
|
|
438
608
|
"hashing", help="phi embedder: hashing (offline) | bedrock | openai | azure."
|
|
@@ -748,19 +918,24 @@ def _verify_or_abort(config: HarnessConfig, chain: str | None = None) -> None:
|
|
|
748
918
|
continue
|
|
749
919
|
failed = True
|
|
750
920
|
_console.print(f" [red]✗ {label} ({result.model}) failed[/red]: {result.detail}")
|
|
751
|
-
|
|
752
|
-
# SDKs are core deps; a missing module means the env is stale or hand-rolled.
|
|
753
|
-
_console.print(" [yellow]run `uv sync` to install the provider SDKs[/yellow]")
|
|
754
|
-
else:
|
|
755
|
-
envs = ", ".join(PROVIDER_ENV_VARS.get(cfg.kind, []))
|
|
756
|
-
hint = f" ({envs})" if envs else ""
|
|
757
|
-
_console.print(
|
|
758
|
-
f" [yellow]check the model id and that your credentials are set{hint}[/yellow]"
|
|
759
|
-
)
|
|
921
|
+
_console.print(f" [yellow]{_credential_hint(cfg.kind, result.detail)}[/yellow]")
|
|
760
922
|
if failed:
|
|
761
923
|
raise typer.Exit(1)
|
|
762
924
|
|
|
763
925
|
|
|
926
|
+
def _credential_hint(kind: ProviderKind, detail: str) -> str:
|
|
927
|
+
"""The next step for a failed provider ping: install the SDKs, or fix creds/model id.
|
|
928
|
+
|
|
929
|
+
Shared by the pre-build guard and `wmo providers verify` so both name the same env vars.
|
|
930
|
+
"""
|
|
931
|
+
if "No module named" in detail:
|
|
932
|
+
# SDKs are core deps; a missing module means the env is stale or hand-rolled.
|
|
933
|
+
return "run `uv sync` to install the provider SDKs"
|
|
934
|
+
envs = ", ".join(PROVIDER_ENV_VARS.get(kind, []))
|
|
935
|
+
hint = f" ({envs})" if envs else ""
|
|
936
|
+
return f"check the model id and that your credentials are set{hint}"
|
|
937
|
+
|
|
938
|
+
|
|
764
939
|
@app.command("list")
|
|
765
940
|
def list_models(root: str = typer.Option(ARTIFACT_DIR, help="Project dir to list.")) -> None:
|
|
766
941
|
"""List every world model built under the project dir."""
|
|
@@ -823,8 +998,12 @@ def download(
|
|
|
823
998
|
raise typer.BadParameter(str(exc)) from exc
|
|
824
999
|
except urllib.error.HTTPError as exc:
|
|
825
1000
|
# One unpublished/broken dataset must not abort the REST of a multi-download:
|
|
826
|
-
# record it, keep fetching, and fail (with every name) at the end.
|
|
827
|
-
|
|
1001
|
+
# record it, keep fetching, and fail (with every name) at the end. The reason is
|
|
1002
|
+
# quoted rather than summarized here: a fetch tries more than one dataset repo id
|
|
1003
|
+
# and only the error it raises knows which ones the Hub refused. Reading it off
|
|
1004
|
+
# plain HTTPError attributes keeps this working against the PUBLISHED
|
|
1005
|
+
# environment-capture, which the WMO wheel resolves from PyPI.
|
|
1006
|
+
failures.append(f"{name}: the Hub answered {exc.code} for {exc.url} ({exc.reason})")
|
|
828
1007
|
_console.print(f"[yellow]skipping {name}: Hub answered {exc.code}[/yellow]")
|
|
829
1008
|
continue
|
|
830
1009
|
except urllib.error.URLError as exc:
|
|
@@ -911,7 +1090,9 @@ def eval_( # noqa: A001 - `eval` is the user-facing command name; the builtin i
|
|
|
911
1090
|
None, "--chain", help="Named failover chain from .wmo/fallback.toml (default: its default)."
|
|
912
1091
|
),
|
|
913
1092
|
train_split: float | None = typer.Option(
|
|
914
|
-
None,
|
|
1093
|
+
None,
|
|
1094
|
+
help=f"Train/holdout ratio per file (default: {DEFAULT_TRAIN_SPLIT}, or suite config). "
|
|
1095
|
+
"Must match the ratio the model was built with, or the holdout contains train traces.",
|
|
915
1096
|
),
|
|
916
1097
|
val_frac: float | None = typer.Option(
|
|
917
1098
|
None,
|
|
@@ -1473,7 +1654,7 @@ def _eval_options(
|
|
|
1473
1654
|
knowledge: bool | None = None,
|
|
1474
1655
|
reasoning: bool | None = None,
|
|
1475
1656
|
) -> _EvalOptions:
|
|
1476
|
-
split =
|
|
1657
|
+
split = DEFAULT_TRAIN_SPLIT if train_split is None else train_split
|
|
1477
1658
|
dim = 512 if embed_dim is None else embed_dim
|
|
1478
1659
|
retrieval = True if rag is None else rag
|
|
1479
1660
|
turns = "all" if sample_turns is None else sample_turns
|