scienceflow 0.2.0b3__py3-none-any.whl
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.
- scienceflow/__init__.py +13 -0
- scienceflow/agent/__init__.py +120 -0
- scienceflow/agent/core/__init__.py +1 -0
- scienceflow/agent/core/ports/__init__.py +1 -0
- scienceflow/agent/core/ports/callback_ports.py +129 -0
- scienceflow/agent/core/ports/host_ports.py +126 -0
- scienceflow/agent/core/ports/session_callbacks.py +173 -0
- scienceflow/agent/core/runtime/__init__.py +1 -0
- scienceflow/agent/core/runtime/agent.py +173 -0
- scienceflow/agent/core/runtime/ephemeral.py +73 -0
- scienceflow/agent/core/runtime/registry.py +42 -0
- scienceflow/agent/core/runtime/run_policy.py +187 -0
- scienceflow/agent/factory/__init__.py +12 -0
- scienceflow/agent/factory/composition.py +276 -0
- scienceflow/agent/factory/construction/__init__.py +326 -0
- scienceflow/agent/factory/construction/assembly.py +626 -0
- scienceflow/agent/factory/construction/builder.py +34 -0
- scienceflow/agent/factory/contracts.py +29 -0
- scienceflow/agent/factory/service.py +96 -0
- scienceflow/agent/policies/__init__.py +3 -0
- scienceflow/agent/policies/repl.py +89 -0
- scienceflow/agent/policies/routing.py +407 -0
- scienceflow/agent/prompts/L0/README.md +7 -0
- scienceflow/agent/prompts/L0/code_agent_core.md +41 -0
- scienceflow/agent/prompts/L0/code_agent_core_bash_write.md +60 -0
- scienceflow/agent/prompts/L0/default_system.md +24 -0
- scienceflow/agent/prompts/L0/default_system_bash_write.md +37 -0
- scienceflow/agent/prompts/L0/tool_policy_parallel.md +16 -0
- scienceflow/agent/prompts/L0/tool_policy_parallel_bash_write.md +20 -0
- scienceflow/agent/prompts/L0/tool_policy_single.md +13 -0
- scienceflow/agent/prompts/L0/tool_policy_single_bash_write.md +16 -0
- scienceflow/agent/prompts/README.md +9 -0
- scienceflow/agent/prompts/__init__.py +13 -0
- scienceflow/agent/prompts/system_prompt.py +164 -0
- scienceflow/agent/prompts/write_coaching.py +252 -0
- scienceflow/agent/session/__init__.py +23 -0
- scienceflow/agent/session/coordination/__init__.py +1 -0
- scienceflow/agent/session/coordination/context.py +135 -0
- scienceflow/agent/session/coordination/contracts.py +24 -0
- scienceflow/agent/session/coordination/host.py +55 -0
- scienceflow/agent/session/execution/__init__.py +1 -0
- scienceflow/agent/session/execution/runtime.py +202 -0
- scienceflow/agent/session/execution/tool_result.py +202 -0
- scienceflow/agent/session/execution/turn.py +291 -0
- scienceflow/cli.py +7 -0
- scienceflow/foundation/__init__.py +1 -0
- scienceflow/foundation/architecture/__init__.py +15 -0
- scienceflow/foundation/architecture/dependencies.py +269 -0
- scienceflow/foundation/config/__init__.py +11 -0
- scienceflow/foundation/config/default.yaml +12 -0
- scienceflow/foundation/config/llm/__init__.py +1 -0
- scienceflow/foundation/config/llm/llm_factory.py +76 -0
- scienceflow/foundation/config/llm/llm_http.py +206 -0
- scienceflow/foundation/config/llm/llm_pool.py +69 -0
- scienceflow/foundation/config/llm/model_registry.py +188 -0
- scienceflow/foundation/config/profiles/__init__.py +1 -0
- scienceflow/foundation/config/profiles/defaults/agent.yaml +22 -0
- scienceflow/foundation/config/profiles/defaults/evaluator.yaml +37 -0
- scienceflow/foundation/config/profiles/defaults/exec.yaml +8 -0
- scienceflow/foundation/config/profiles/defaults/lnr/context.yaml +25 -0
- scienceflow/foundation/config/profiles/defaults/lnr/estra-magent.yaml +11 -0
- scienceflow/foundation/config/profiles/defaults/lnr/estra.yaml +22 -0
- scienceflow/foundation/config/profiles/defaults/lnr/index.yaml +18 -0
- scienceflow/foundation/config/profiles/defaults/lnr/resource-arbiter.yaml +26 -0
- scienceflow/foundation/config/profiles/defaults/lnr/resource-gpu.yaml +49 -0
- scienceflow/foundation/config/profiles/defaults/lnr/resource-guards.yaml +27 -0
- scienceflow/foundation/config/profiles/defaults/lnr/resource-monitor.yaml +37 -0
- scienceflow/foundation/config/profiles/defaults/lnr/runtime.yaml +10 -0
- scienceflow/foundation/config/profiles/defaults/lnr/selection.yaml +13 -0
- scienceflow/foundation/config/profiles/defaults/lnr/skills.yaml +11 -0
- scienceflow/foundation/config/profiles/defaults/lnr/snapshots.yaml +7 -0
- scienceflow/foundation/config/profiles/defaults/lnr/stage.yaml +20 -0
- scienceflow/foundation/config/profiles/defaults/lnr/workspace.yaml +13 -0
- scienceflow/foundation/config/profiles/defaults/repl.yaml +25 -0
- scienceflow/foundation/config/profiles/defaults/tool.yaml +64 -0
- scienceflow/foundation/config/profiles/defaults/workspace.yaml +10 -0
- scienceflow/foundation/config/runtime/__init__.py +1 -0
- scienceflow/foundation/config/runtime/agent_constants.py +47 -0
- scienceflow/foundation/config/runtime/environment.py +96 -0
- scienceflow/foundation/config/runtime/llm_lists.py +50 -0
- scienceflow/foundation/config/runtime/resource_modes.py +115 -0
- scienceflow/foundation/config/schema/__init__.py +1 -0
- scienceflow/foundation/config/schema/models/__init__.py +1 -0
- scienceflow/foundation/config/schema/models/contracts/__init__.py +1 -0
- scienceflow/foundation/config/schema/models/contracts/base.py +10 -0
- scienceflow/foundation/config/schema/models/contracts/environment.py +212 -0
- scienceflow/foundation/config/schema/models/contracts/profiles.py +192 -0
- scienceflow/foundation/config/schema/models/contracts/schema.py +629 -0
- scienceflow/foundation/config/schema/models/loading/__init__.py +1 -0
- scienceflow/foundation/config/schema/models/loading/loader.py +317 -0
- scienceflow/foundation/config/schema/models/loading/parallel_overrides.py +231 -0
- scienceflow/foundation/config/schema/models/loading/serialization.py +208 -0
- scienceflow/foundation/config/schema/settings.py +40 -0
- scienceflow/foundation/config/sci_modeling_bench.yaml +21 -0
- scienceflow/foundation/contracts/__init__.py +54 -0
- scienceflow/foundation/contracts/research/__init__.py +1 -0
- scienceflow/foundation/contracts/research/estra.py +45 -0
- scienceflow/foundation/contracts/research/evaluation.py +155 -0
- scienceflow/foundation/contracts/research/gate.py +51 -0
- scienceflow/foundation/contracts/research/metric.py +86 -0
- scienceflow/foundation/contracts/runtime/__init__.py +1 -0
- scienceflow/foundation/contracts/runtime/base.py +21 -0
- scienceflow/foundation/contracts/runtime/resource_execution.py +81 -0
- scienceflow/foundation/contracts/runtime/workspace_memory.py +77 -0
- scienceflow/interfaces/__init__.py +1 -0
- scienceflow/interfaces/cli/__init__.py +456 -0
- scienceflow/interfaces/cli/__main__.py +7 -0
- scienceflow/interfaces/cli/commands/__init__.py +1 -0
- scienceflow/interfaces/cli/commands/inspect/__init__.py +1 -0
- scienceflow/interfaces/cli/commands/inspect/monitor.py +86 -0
- scienceflow/interfaces/cli/commands/inspect/replay.py +76 -0
- scienceflow/interfaces/cli/commands/inspect/resources.py +23 -0
- scienceflow/interfaces/cli/commands/inspect/web.py +41 -0
- scienceflow/interfaces/cli/commands/run/__init__.py +1 -0
- scienceflow/interfaces/cli/commands/run/control/__init__.py +5 -0
- scienceflow/interfaces/cli/commands/run/control/commands.py +118 -0
- scienceflow/interfaces/cli/commands/run/control/guided.py +90 -0
- scienceflow/interfaces/cli/commands/run/parallel.py +36 -0
- scienceflow/interfaces/cli/commands/run/repl.py +310 -0
- scienceflow/interfaces/cli/commands/run/task.py +178 -0
- scienceflow/interfaces/cli/commands/run/tui.py +130 -0
- scienceflow/interfaces/cli/tui_sessions.py +66 -0
- scienceflow/interfaces/cli/user_config.py +83 -0
- scienceflow/interfaces/ui/__init__.py +16 -0
- scienceflow/interfaces/ui/assets/logo_scienceflow.png +0 -0
- scienceflow/interfaces/ui/assets/logo_scienceflow_lite.ico +0 -0
- scienceflow/interfaces/ui/assets/tui_badge.svg +12 -0
- scienceflow/interfaces/ui/assets/tui_tiny.svg +9 -0
- scienceflow/interfaces/ui/console.py +414 -0
- scienceflow/interfaces/ui/llm_cli.py +72 -0
- scienceflow/interfaces/ui/logo.py +29 -0
- scienceflow/interfaces/ui/long_research.py +661 -0
- scienceflow/interfaces/ui/long_research_progress.py +10 -0
- scienceflow/interfaces/ui/model_config.py +289 -0
- scienceflow/interfaces/ui/monitor/__init__.py +37 -0
- scienceflow/interfaces/ui/monitor/dashboard.py +815 -0
- scienceflow/interfaces/ui/monitor/helpers.py +319 -0
- scienceflow/interfaces/ui/monitor/lnr/__init__.py +1 -0
- scienceflow/interfaces/ui/monitor/lnr/projection/__init__.py +1 -0
- scienceflow/interfaces/ui/monitor/lnr/projection/aggregation.py +363 -0
- scienceflow/interfaces/ui/monitor/lnr/projection/events.py +299 -0
- scienceflow/interfaces/ui/monitor/lnr/projection/state.py +157 -0
- scienceflow/interfaces/ui/monitor/lnr/projection/summary.py +229 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/__init__.py +1 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/base.py +32 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/formatting.py +100 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/reader.py +208 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/status.py +279 -0
- scienceflow/interfaces/ui/monitor/lnr/rendering/time_trace.py +20 -0
- scienceflow/interfaces/ui/monitor/lnr_state.py +14 -0
- scienceflow/interfaces/ui/monitor_trace/__init__.py +19 -0
- scienceflow/interfaces/ui/monitor_trace/presentation/__init__.py +1 -0
- scienceflow/interfaces/ui/monitor_trace/presentation/builder.py +557 -0
- scienceflow/interfaces/ui/monitor_trace/presentation/render.py +375 -0
- scienceflow/interfaces/ui/monitor_trace/presentation/runner.py +55 -0
- scienceflow/interfaces/ui/monitor_trace/view_model/__init__.py +1 -0
- scienceflow/interfaces/ui/monitor_trace/view_model/assets.py +215 -0
- scienceflow/interfaces/ui/monitor_trace/view_model/leaderboard.py +241 -0
- scienceflow/interfaces/ui/monitor_trace/view_model/models.py +155 -0
- scienceflow/interfaces/ui/research/__init__.py +1 -0
- scienceflow/interfaces/ui/research/control/__init__.py +5 -0
- scienceflow/interfaces/ui/research/control/attachment.py +224 -0
- scienceflow/interfaces/ui/research/control/notices.py +51 -0
- scienceflow/interfaces/ui/research/control/tasks/__init__.py +1 -0
- scienceflow/interfaces/ui/research/control/tasks/completion.py +38 -0
- scienceflow/interfaces/ui/research/control/tasks/manager.py +350 -0
- scienceflow/interfaces/ui/research/control/tasks/metrics.py +115 -0
- scienceflow/interfaces/ui/research/control/tasks/projection.py +252 -0
- scienceflow/interfaces/ui/research/control/tasks/records.py +176 -0
- scienceflow/interfaces/ui/research/long_research_progress.py +272 -0
- scienceflow/interfaces/ui/research/research_events.py +146 -0
- scienceflow/interfaces/ui/research/research_preparation.py +210 -0
- scienceflow/interfaces/ui/research/research_usage.py +195 -0
- scienceflow/interfaces/ui/research/resources.py +218 -0
- scienceflow/interfaces/ui/research/telemetry/__init__.py +1 -0
- scienceflow/interfaces/ui/research/telemetry/formatting.py +68 -0
- scienceflow/interfaces/ui/research/telemetry/sampler.py +200 -0
- scienceflow/interfaces/ui/web_monitor/__init__.py +1 -0
- scienceflow/interfaces/ui/web_monitor/assets/core.js +84 -0
- scienceflow/interfaces/ui/web_monitor/assets/lineage.js +238 -0
- scienceflow/interfaces/ui/web_monitor/assets/lineage_layout.js +49 -0
- scienceflow/interfaces/ui/web_monitor/assets/lineage_viewport.js +138 -0
- scienceflow/interfaces/ui/web_monitor/assets/metric.js +144 -0
- scienceflow/interfaces/ui/web_monitor/assets/refresh.js +102 -0
- scienceflow/interfaces/ui/web_monitor/assets/shell.html +43 -0
- scienceflow/interfaces/ui/web_monitor/assets/theme.css +628 -0
- scienceflow/interfaces/ui/web_monitor/assets/view.js +256 -0
- scienceflow/interfaces/ui/web_monitor/data.py +267 -0
- scienceflow/interfaces/ui/web_monitor/page.py +59 -0
- scienceflow/interfaces/ui/web_monitor/projection.py +186 -0
- scienceflow/interfaces/ui/web_monitor/server.py +320 -0
- scienceflow/interfaces/ui/web_monitor/service.py +104 -0
- scienceflow/research/__init__.py +1 -0
- scienceflow/research/control/__init__.py +3 -0
- scienceflow/research/control/admission/__init__.py +20 -0
- scienceflow/research/control/admission/contracts.py +45 -0
- scienceflow/research/control/admission/observation.py +53 -0
- scienceflow/research/control/admission/policy.py +319 -0
- scienceflow/research/control/admission/replay.py +52 -0
- scienceflow/research/control/admission/service.py +143 -0
- scienceflow/research/control/agent_runtime_state.py +229 -0
- scienceflow/research/control/agent_session_setup.py +76 -0
- scienceflow/research/control/agent_session_state.py +44 -0
- scienceflow/research/control/ephemeral_agent_session.py +266 -0
- scienceflow/research/control/estra/__init__.py +31 -0
- scienceflow/research/control/estra/planning/__init__.py +1 -0
- scienceflow/research/control/estra/planning/contracts.py +96 -0
- scienceflow/research/control/estra/planning/parser.py +84 -0
- scienceflow/research/control/estra/planning/planner.py +132 -0
- scienceflow/research/control/estra/planning/policy.py +156 -0
- scienceflow/research/control/estra/runtime/__init__.py +1 -0
- scienceflow/research/control/estra/runtime/archive.py +150 -0
- scienceflow/research/control/estra/runtime/commands.py +49 -0
- scienceflow/research/control/estra/runtime/service.py +31 -0
- scienceflow/research/control/execution_value/__init__.py +25 -0
- scienceflow/research/control/execution_value/adapters/__init__.py +9 -0
- scienceflow/research/control/execution_value/adapters/lnr_observer.py +57 -0
- scienceflow/research/control/execution_value/decision/__init__.py +1 -0
- scienceflow/research/control/execution_value/decision/contracts.py +53 -0
- scienceflow/research/control/execution_value/decision/observation.py +47 -0
- scienceflow/research/control/execution_value/decision/router.py +152 -0
- scienceflow/research/control/execution_value/decision/service.py +79 -0
- scienceflow/research/control/execution_value/evidence/__init__.py +1 -0
- scienceflow/research/control/execution_value/evidence/cost_tracker.py +270 -0
- scienceflow/research/control/execution_value/evidence/quick_test.py +297 -0
- scienceflow/research/control/execution_value/evidence/replay.py +52 -0
- scienceflow/research/control/resources/__init__.py +69 -0
- scienceflow/research/control/resources/adapters/__init__.py +1 -0
- scienceflow/research/control/resources/adapters/lnr_runtime.py +8 -0
- scienceflow/research/control/resources/policy/__init__.py +1 -0
- scienceflow/research/control/resources/policy/effects.py +98 -0
- scienceflow/research/control/resources/policy/mechanisms.py +146 -0
- scienceflow/research/control/resources/policy/proposals.py +42 -0
- scienceflow/research/control/resources/policy/review_machine.py +100 -0
- scienceflow/research/control/resources/runtime/__init__.py +1 -0
- scienceflow/research/control/resources/runtime/feedback.py +127 -0
- scienceflow/research/control/resources/runtime/observation.py +143 -0
- scienceflow/research/control/resources/runtime/service.py +166 -0
- scienceflow/research/onboarding/__init__.py +49 -0
- scienceflow/research/onboarding/library/__init__.py +1 -0
- scienceflow/research/onboarding/library/catalog.py +54 -0
- scienceflow/research/onboarding/library/export.py +141 -0
- scienceflow/research/onboarding/library/portable.py +95 -0
- scienceflow/research/onboarding/manifest.py +196 -0
- scienceflow/research/onboarding/preflight.py +372 -0
- scienceflow/research/onboarding/session.py +360 -0
- scienceflow/research/onboarding/support/__init__.py +1 -0
- scienceflow/research/onboarding/support/answers.py +294 -0
- scienceflow/research/onboarding/support/evaluator_probe.py +75 -0
- scienceflow/research/onboarding/support/gate_probe.py +74 -0
- scienceflow/research/onboarding/support/preparation/__init__.py +5 -0
- scienceflow/research/onboarding/support/preparation/agent.py +157 -0
- scienceflow/research/onboarding/support/preparation/discovery.py +64 -0
- scienceflow/research/onboarding/support/preparation/registered.py +283 -0
- scienceflow/research/onboarding/support/preparation/validation.py +60 -0
- scienceflow/research/onboarding/support/task_defaults.py +113 -0
- scienceflow/research/quality/__init__.py +3 -0
- scienceflow/research/quality/assessment/__init__.py +8 -0
- scienceflow/research/quality/assessment/pipeline.py +235 -0
- scienceflow/research/quality/assessment/service.py +70 -0
- scienceflow/research/quality/embedded_fullrun.py +38 -0
- scienceflow/research/quality/evaluator/__init__.py +25 -0
- scienceflow/research/quality/evaluator/adapters.py +150 -0
- scienceflow/research/quality/evaluator/backends/__init__.py +18 -0
- scienceflow/research/quality/evaluator/backends/artifact_command.py +320 -0
- scienceflow/research/quality/evaluator/backends/command_env.py +76 -0
- scienceflow/research/quality/evaluator/backends/command_helpers.py +255 -0
- scienceflow/research/quality/evaluator/backends/task_package.py +505 -0
- scienceflow/research/quality/evaluator/cache.py +82 -0
- scienceflow/research/quality/evaluator/entrypoint_runner.py +94 -0
- scienceflow/research/quality/evaluator/event_log.py +64 -0
- scienceflow/research/quality/evaluator/manager.py +180 -0
- scienceflow/research/quality/evaluator/providers/__init__.py +13 -0
- scienceflow/research/quality/evaluator/providers/mlebench/__init__.py +25 -0
- scienceflow/research/quality/evaluator/providers/mlebench/submission_checks.py +205 -0
- scienceflow/research/quality/finalization/__init__.py +21 -0
- scienceflow/research/quality/finalization/artifacts/__init__.py +1 -0
- scienceflow/research/quality/finalization/artifacts/materialize.py +375 -0
- scienceflow/research/quality/finalization/artifacts/submission_links.py +244 -0
- scienceflow/research/quality/finalization/candidates/__init__.py +1 -0
- scienceflow/research/quality/finalization/candidates/evidence.py +441 -0
- scienceflow/research/quality/finalization/candidates/pack.py +169 -0
- scienceflow/research/quality/finalization/prompt.py +87 -0
- scienceflow/research/quality/finalization/selection/__init__.py +1 -0
- scienceflow/research/quality/finalization/selection/coverage.py +109 -0
- scienceflow/research/quality/finalization/selection/ranking.py +243 -0
- scienceflow/research/quality/finalization/service.py +460 -0
- scienceflow/research/quality/finalization/worker_outcomes.py +96 -0
- scienceflow/research/quality/fullrun/__init__.py +3 -0
- scienceflow/research/quality/fullrun/execution.py +789 -0
- scienceflow/research/quality/fullrun/snapshot.py +828 -0
- scienceflow/research/quality/gate/__init__.py +33 -0
- scienceflow/research/quality/gate/feedback.py +111 -0
- scienceflow/research/quality/gate/invariants.py +85 -0
- scienceflow/research/quality/gate/policy.py +392 -0
- scienceflow/research/reporting/__init__.py +5 -0
- scienceflow/research/reporting/analysis.py +567 -0
- scienceflow/research/reporting/charts.py +295 -0
- scienceflow/research/reporting/collect.py +366 -0
- scienceflow/research/reporting/html.py +230 -0
- scienceflow/research/reporting/lineage.py +94 -0
- scienceflow/research/reporting/markdown.py +269 -0
- scienceflow/research/reporting/models.py +52 -0
- scienceflow/research/reporting/narrative.py +129 -0
- scienceflow/research/reporting/pdf.py +640 -0
- scienceflow/research/reporting/service.py +128 -0
- scienceflow/research/solver/__init__.py +20 -0
- scienceflow/research/solver/data_prep.py +113 -0
- scienceflow/research/solver/lnr/__init__.py +23 -0
- scienceflow/research/solver/lnr/lifecycle/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/records/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/records/stage_logs.py +140 -0
- scienceflow/research/solver/lnr/lifecycle/records/stage_memory.py +23 -0
- scienceflow/research/solver/lnr/lifecycle/records/storage_usage.py +342 -0
- scienceflow/research/solver/lnr/lifecycle/snapshots/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/snapshots/snapshot_store.py +1149 -0
- scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot.py +461 -0
- scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot_io.py +95 -0
- scienceflow/research/solver/lnr/lifecycle/snapshots/workspace_snapshot_subset.py +133 -0
- scienceflow/research/solver/lnr/lifecycle/stage/__init__.py +13 -0
- scienceflow/research/solver/lnr/lifecycle/stage/metrics/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_adjudication.py +337 -0
- scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_semantics.py +262 -0
- scienceflow/research/solver/lnr/lifecycle/stage/metrics/metric_validity.py +222 -0
- scienceflow/research/solver/lnr/lifecycle/stage/metrics/score_summary.py +497 -0
- scienceflow/research/solver/lnr/lifecycle/stage/records/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/stage/records/peer_context.py +275 -0
- scienceflow/research/solver/lnr/lifecycle/stage/records/stage_files.py +255 -0
- scienceflow/research/solver/lnr/lifecycle/stage/records/stage_ledger.py +450 -0
- scienceflow/research/solver/lnr/lifecycle/workspace/__init__.py +1 -0
- scienceflow/research/solver/lnr/lifecycle/workspace/init_workspace.py +163 -0
- scienceflow/research/solver/lnr/lifecycle/workspace/prep_fs.py +126 -0
- scienceflow/research/solver/lnr/lifecycle/workspace/runtime_paths.py +65 -0
- scienceflow/research/solver/lnr/lifecycle/workspace/worker_layout.py +47 -0
- scienceflow/research/solver/lnr/orchestration/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/agent_hooks.py +116 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/__init__.py +7 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/estra/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/estra/adapter.py +833 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/adapter.py +717 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/capture.py +451 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/commit.py +505 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/metric_projection.py +245 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/evaluation/profile.py +324 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/coordination.py +845 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/memory_coordination.py +485 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/context/memory_projection.py +515 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/adapter.py +731 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/commit.py +450 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/experiment_state.py +226 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/lifecycle/stage/prompt.py +413 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/advisory.py +530 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/construction.py +543 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/observer_construction.py +608 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/peer_snapshot.py +202 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/resource/prompt_projection.py +607 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/run/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/run/agent_coordination.py +840 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/run/construction.py +459 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/run/coordination.py +972 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/run/event_projection.py +880 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/shared.py +597 -0
- scienceflow/research/solver/lnr/orchestration/coordinator/solver.py +422 -0
- scienceflow/research/solver/lnr/orchestration/runtime/__init__.py +9 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/adapters.py +260 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/engine.py +79 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/multi_worker.py +289 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/single_worker.py +203 -0
- scienceflow/research/solver/lnr/orchestration/runtime/execution/worker_environment.py +97 -0
- scienceflow/research/solver/lnr/orchestration/runtime/services/__init__.py +1 -0
- scienceflow/research/solver/lnr/orchestration/runtime/services/deadline.py +29 -0
- scienceflow/research/solver/lnr/orchestration/runtime/services/facade.py +28 -0
- scienceflow/research/solver/lnr/orchestration/runtime/services/models.py +45 -0
- scienceflow/research/solver/lnr/orchestration/runtime/services/worker_services.py +218 -0
- scienceflow/research/solver/lnr/orchestration/solver.py +12 -0
- scienceflow/research/solver/lnr/orchestration/state_machine.py +548 -0
- scienceflow/research/solver/lnr/orchestration/state_projection.py +712 -0
- scienceflow/research/solver/lnr/resources/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/resource_advisory.py +192 -0
- scienceflow/research/solver/lnr/resources/resource_feedback_contract.py +9 -0
- scienceflow/research/solver/lnr/resources/resource_feedback_guidance.py +46 -0
- scienceflow/research/solver/lnr/resources/resource_observer.py +17 -0
- scienceflow/research/solver/lnr/resources/runtime/__init__.py +17 -0
- scienceflow/research/solver/lnr/resources/runtime/control/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/admission.py +19 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/admission_safety.py +258 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/control_profile.py +137 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/pressure_state.py +514 -0
- scienceflow/research/solver/lnr/resources/runtime/control/admission/priority.py +64 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_feedback.py +40 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_lease_store.py +1147 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/gpu_sharing.py +733 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/soft_gpu_gate.py +108 -0
- scienceflow/research/solver/lnr/resources/runtime/control/gpu/workspace_gpu_guard.py +250 -0
- scienceflow/research/solver/lnr/resources/runtime/control/policy/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/control/policy/post_feedback_actions.py +63 -0
- scienceflow/research/solver/lnr/resources/runtime/control/policy/source_hints.py +289 -0
- scienceflow/research/solver/lnr/resources/runtime/control/policy/startup_trial.py +123 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/facade.py +45 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/jobs.py +110 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/proc_inspect.py +89 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/process_liveness.py +214 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/quick_probe.py +234 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/process/sidecar.py +217 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/history_store.py +178 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/metric_history.py +200 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/models.py +74 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/unified_store.py +529 -0
- scienceflow/research/solver/lnr/resources/runtime/execution/state/utilization.py +402 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/__init__.py +17 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/allocation/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/allocation/admission/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/allocation/admission/decision.py +223 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/allocation/lease/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/allocation/lease/callbacks.py +118 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/classification.py +556 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/feedback.py +599 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/monitoring.py +440 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/progress.py +329 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/observation/sampling.py +234 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/arbiter.py +419 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/budget.py +372 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/execution_value.py +566 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/priority.py +358 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/decision/safety.py +691 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/facts.py +305 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/history.py +225 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/intervention.py +224 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/assessment/review/state/machine.py +298 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/job.py +425 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/lifecycle.py +372 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/callbacks/preflight.py +247 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/construction.py +226 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/construction_runtime.py +553 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/controller.py +99 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/shared.py +333 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/sharing/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/sharing/decision.py +295 -0
- scienceflow/research/solver/lnr/resources/runtime/observer/sharing/scheduling.py +592 -0
- scienceflow/research/solver/lnr/resources/runtime/review/__init__.py +13 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/arbiter.py +923 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/arbiter_gate.py +683 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/efficiency.py +313 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/execution_facts.py +287 -0
- scienceflow/research/solver/lnr/resources/runtime/review/decision/kill_intent.py +165 -0
- scienceflow/research/solver/lnr/resources/runtime/review/evidence/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/review/evidence/lease_suspect.py +268 -0
- scienceflow/research/solver/lnr/resources/runtime/review/evidence/progress.py +152 -0
- scienceflow/research/solver/lnr/resources/runtime/review/evidence/research_cadence.py +214 -0
- scienceflow/research/solver/lnr/resources/runtime/review/evidence/state_generation.py +206 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/__init__.py +3 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/admission_coordination.py +601 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/lease_coordination.py +252 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/queue_coordination.py +196 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/admission/wait_coordination.py +169 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/__init__.py +1 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/monitoring.py +67 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/pressure_coordination.py +233 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/shared.py +130 -0
- scienceflow/research/solver/lnr/resources/runtime/runtime_components/control/state_policy.py +536 -0
- scienceflow/research/solver/lnr/support/__init__.py +1 -0
- scienceflow/research/solver/lnr/support/context_hygiene.py +174 -0
- scienceflow/research/solver/lnr/support/context_memory_policy.py +20 -0
- scienceflow/research/solver/lnr/support/prompt_template_store.py +54 -0
- scienceflow/research/solver/lnr/support/prompt_templates/__init__.py +21 -0
- scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_archive_summary.md +18 -0
- scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_decision.md +41 -0
- scienceflow/research/solver/lnr/support/prompt_templates/estra/estra_resume.md +17 -0
- scienceflow/research/solver/lnr/support/prompt_templates/estra/keep_current_compact.md +13 -0
- scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_output_interpreter_system.md +25 -0
- scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_output_interpreter_user.md +6 -0
- scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_validity_adjudicator_system.md +34 -0
- scienceflow/research/solver/lnr/support/prompt_templates/evaluation/metric_validity_adjudicator_user.md +6 -0
- scienceflow/research/solver/lnr/support/prompt_templates/resources/resource_feedback_guidance.md +11 -0
- scienceflow/research/solver/lnr/support/prompt_templates/stage/stage_commit.md +23 -0
- scienceflow/research/solver/lnr/support/prompt_templates/stage/stage_commit_judgment.md +25 -0
- scienceflow/research/solver/lnr/support/prompt_templates/task/ml/first_user.md +18 -0
- scienceflow/research/solver/lnr/support/prompt_templates/task/opt_solver/first_user.md +19 -0
- scienceflow/research/solver/lnr/support/prompt_templates/task/sci_modeling_bench/first_user.md +50 -0
- scienceflow/research/solver/lnr/support/prompts.py +390 -0
- scienceflow/research/solver/lnr/transitions/__init__.py +1 -0
- scienceflow/research/solver/lnr/transitions/estra/__init__.py +7 -0
- scienceflow/research/solver/lnr/transitions/estra/parser.py +11 -0
- scienceflow/research/solver/lnr/transitions/estra/policy.py +27 -0
- scienceflow/research/solver/lnr/transitions/estra/service.py +7 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/__init__.py +27 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/coordinator.py +57 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/events.py +95 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/join_gate.py +180 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/models.py +82 -0
- scienceflow/research/solver/lnr/transitions/estra_magent/prompt_blocks.py +78 -0
- scienceflow/research/solver/lnr/transitions/replay_prepare.py +400 -0
- scienceflow/research/solver/lnr/transitions/restore_cleanup.py +118 -0
- scienceflow/research/solver/lnr/transitions/resume/__init__.py +33 -0
- scienceflow/research/solver/lnr/transitions/resume/continuation.py +160 -0
- scienceflow/research/solver/lnr/transitions/resume/memory_state.py +42 -0
- scienceflow/research/state/__init__.py +3 -0
- scienceflow/research/state/dataset/__init__.py +5 -0
- scienceflow/research/state/dataset/discovery/__init__.py +1 -0
- scienceflow/research/state/dataset/discovery/eval_signature.py +37 -0
- scienceflow/research/state/dataset/discovery/scan.py +148 -0
- scienceflow/research/state/dataset/discovery/scan_metadata.py +675 -0
- scienceflow/research/state/dataset/discovery/scan_traversal.py +119 -0
- scienceflow/research/state/dataset/rendering/__init__.py +1 -0
- scienceflow/research/state/dataset/rendering/scan_render.py +580 -0
- scienceflow/research/state/dataset/rendering/scan_tree.py +66 -0
- scienceflow/research/state/dataset/rendering/scan_tree_flat.py +145 -0
- scienceflow/research/state/dataset/rendering/scan_tree_nested.py +481 -0
- scienceflow/research/state/knowledge/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/__init__.py +15 -0
- scienceflow/research/state/knowledge/context/context/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/context/compression/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/context/compression/clone_compression.py +847 -0
- scienceflow/research/state/knowledge/context/context/compression/clone_inheritance.py +509 -0
- scienceflow/research/state/knowledge/context/context/compression/compaction.py +363 -0
- scienceflow/research/state/knowledge/context/context/compression/manager_compaction.py +462 -0
- scienceflow/research/state/knowledge/context/context/projection/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/context/projection/bash_projection.py +184 -0
- scienceflow/research/state/knowledge/context/context/projection/manager_projection.py +257 -0
- scienceflow/research/state/knowledge/context/context/projection/source_projection.py +692 -0
- scienceflow/research/state/knowledge/context/context/results/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/context/results/base.py +27 -0
- scienceflow/research/state/knowledge/context/context/results/pure.py +25 -0
- scienceflow/research/state/knowledge/context/context/results/tool_results.py +411 -0
- scienceflow/research/state/knowledge/context/context/runtime/__init__.py +1 -0
- scienceflow/research/state/knowledge/context/context/runtime/finalize_runtime.py +174 -0
- scienceflow/research/state/knowledge/context/context/runtime/manager_finalize.py +63 -0
- scienceflow/research/state/knowledge/context/context/runtime/manager_state.py +352 -0
- scienceflow/research/state/knowledge/context/context/runtime/manager_tool_results.py +96 -0
- scienceflow/research/state/knowledge/context/context/runtime/tool_result_runtime.py +356 -0
- scienceflow/research/state/knowledge/context/memory_context.py +80 -0
- scienceflow/research/state/knowledge/context/source_snapshot.py +744 -0
- scienceflow/research/state/knowledge/memory/__init__.py +32 -0
- scienceflow/research/state/knowledge/memory/adapters/__init__.py +1 -0
- scienceflow/research/state/knowledge/memory/adapters/lnr_stage.py +11 -0
- scienceflow/research/state/knowledge/memory/agent/__init__.py +13 -0
- scienceflow/research/state/knowledge/memory/agent/memory_utils.py +309 -0
- scienceflow/research/state/knowledge/memory/agent/reasoning_replay.py +68 -0
- scienceflow/research/state/knowledge/memory/agent/resource_feedback_memory.py +359 -0
- scienceflow/research/state/knowledge/memory/context/__init__.py +1 -0
- scienceflow/research/state/knowledge/memory/context/agent_compaction.py +76 -0
- scienceflow/research/state/knowledge/memory/context/agent_context_projection.py +314 -0
- scienceflow/research/state/knowledge/memory/context/agent_context_rules.py +88 -0
- scienceflow/research/state/knowledge/memory/context/protected_context.py +198 -0
- scienceflow/research/state/knowledge/memory/core/__init__.py +1 -0
- scienceflow/research/state/knowledge/memory/core/compactor.py +136 -0
- scienceflow/research/state/knowledge/memory/core/contracts.py +62 -0
- scienceflow/research/state/knowledge/memory/core/policy.py +60 -0
- scienceflow/research/state/knowledge/memory/core/service.py +91 -0
- scienceflow/research/state/knowledge/memory/records/__init__.py +1 -0
- scienceflow/research/state/knowledge/memory/records/agent_records.py +353 -0
- scienceflow/research/state/knowledge/memory/records/stage_memory.py +634 -0
- scienceflow/research/state/knowledge/prompt/__init__.py +9 -0
- scienceflow/research/state/knowledge/prompt/builder.py +51 -0
- scienceflow/research/state/knowledge/prompt/contracts.py +45 -0
- scienceflow/research/state/knowledge/skills/__init__.py +30 -0
- scienceflow/research/state/knowledge/skills/catalog/__init__.py +1 -0
- scienceflow/research/state/knowledge/skills/catalog/base.py +77 -0
- scienceflow/research/state/knowledge/skills/catalog/matcher.py +80 -0
- scienceflow/research/state/knowledge/skills/catalog/paths.py +22 -0
- scienceflow/research/state/knowledge/skills/catalog/registry.py +151 -0
- scienceflow/research/state/knowledge/skills/runtime/__init__.py +1 -0
- scienceflow/research/state/knowledge/skills/runtime/injector.py +41 -0
- scienceflow/research/state/knowledge/skills/runtime/tool.py +228 -0
- scienceflow/research/state/repl_context.py +251 -0
- scienceflow/research/state/workspace/__init__.py +19 -0
- scienceflow/research/state/workspace/adapters/__init__.py +1 -0
- scienceflow/research/state/workspace/adapters/agent_runtime.py +336 -0
- scienceflow/research/state/workspace/adapters/lnr.py +16 -0
- scienceflow/research/state/workspace/adapters/path_hygiene.py +418 -0
- scienceflow/research/state/workspace/session/__init__.py +1 -0
- scienceflow/research/state/workspace/session/agent_contracts.py +27 -0
- scienceflow/research/state/workspace/session/agent_session.py +83 -0
- scienceflow/research/state/workspace/session/lifecycle.py +72 -0
- scienceflow/research/state/workspace/session/service.py +97 -0
- scienceflow/research/state/workspace/storage/__init__.py +1 -0
- scienceflow/research/state/workspace/storage/git.py +759 -0
- scienceflow/research/state/workspace/storage/transactions.py +303 -0
- scienceflow/runtime/__init__.py +3 -0
- scienceflow/runtime/composition.py +84 -0
- scienceflow/runtime/core/__init__.py +1 -0
- scienceflow/runtime/core/kernel/__init__.py +56 -0
- scienceflow/runtime/core/kernel/hooks.py +366 -0
- scienceflow/runtime/core/kernel/journal.py +99 -0
- scienceflow/runtime/core/kernel/state_machines.py +288 -0
- scienceflow/runtime/core/process/__init__.py +35 -0
- scienceflow/runtime/core/process/commands.py +95 -0
- scienceflow/runtime/core/process/utils.py +45 -0
- scienceflow/runtime/core/stage/__init__.py +37 -0
- scienceflow/runtime/core/stage/contracts.py +93 -0
- scienceflow/runtime/core/stage/coordinator.py +325 -0
- scienceflow/runtime/core/stage/machine.py +107 -0
- scienceflow/runtime/core/support/__init__.py +3 -0
- scienceflow/runtime/core/support/artifact_io.py +56 -0
- scienceflow/runtime/core/support/node_paths.py +81 -0
- scienceflow/runtime/core/support/system_resources.py +209 -0
- scienceflow/runtime/environment.py +79 -0
- scienceflow/runtime/events.py +130 -0
- scienceflow/runtime/observability/__init__.py +3 -0
- scienceflow/runtime/observability/agent_io/__init__.py +13 -0
- scienceflow/runtime/observability/agent_io/interaction_log.py +250 -0
- scienceflow/runtime/observability/agent_io/interaction_log_policy.py +129 -0
- scienceflow/runtime/observability/agent_tool_feedback.py +211 -0
- scienceflow/runtime/observability/formatting.py +25 -0
- scienceflow/runtime/observability/interaction_log.py +647 -0
- scienceflow/runtime/observability/logging.py +103 -0
- scienceflow/runtime/observability/monitoring/__init__.py +20 -0
- scienceflow/runtime/observability/monitoring/metrics/__init__.py +1 -0
- scienceflow/runtime/observability/monitoring/metrics/cpu_monitor.py +124 -0
- scienceflow/runtime/observability/monitoring/metrics/gpu_monitor.py +101 -0
- scienceflow/runtime/observability/monitoring/metrics/performance_analyzer.py +160 -0
- scienceflow/runtime/observability/monitoring/process/__init__.py +1 -0
- scienceflow/runtime/observability/monitoring/process/probes.py +44 -0
- scienceflow/runtime/observability/monitoring/process/process_observer.py +41 -0
- scienceflow/runtime/observability/monitoring/process/process_tracker.py +82 -0
- scienceflow/runtime/observability/monitoring/runtime/__init__.py +1 -0
- scienceflow/runtime/observability/monitoring/runtime/contracts.py +25 -0
- scienceflow/runtime/observability/monitoring/runtime/hooks.py +58 -0
- scienceflow/runtime/observability/monitoring/runtime/service.py +85 -0
- scienceflow/runtime/observability/telemetry/__init__.py +7 -0
- scienceflow/runtime/observability/telemetry/agent/__init__.py +1 -0
- scienceflow/runtime/observability/telemetry/agent/agent_call.py +66 -0
- scienceflow/runtime/observability/telemetry/agent/audit/__init__.py +5 -0
- scienceflow/runtime/observability/telemetry/agent/audit/runtime.py +204 -0
- scienceflow/runtime/observability/telemetry/agent/llm_call_adapter.py +93 -0
- scienceflow/runtime/observability/telemetry/agent/llm_config_summary.py +349 -0
- scienceflow/runtime/observability/telemetry/agent/llm_cost.py +179 -0
- scienceflow/runtime/observability/telemetry/agent/llm_usage_adapter.py +48 -0
- scienceflow/runtime/observability/telemetry/journal/__init__.py +1 -0
- scienceflow/runtime/observability/telemetry/journal/contracts.py +26 -0
- scienceflow/runtime/observability/telemetry/journal/correlation.py +114 -0
- scienceflow/runtime/observability/telemetry/journal/sinks.py +29 -0
- scienceflow/runtime/observability/telemetry/trace/__init__.py +1 -0
- scienceflow/runtime/observability/telemetry/trace/stage_tool_index.py +66 -0
- scienceflow/runtime/observability/telemetry/trace/time_trace.py +367 -0
- scienceflow/runtime/observability/telemetry/trace/time_trace_summary.py +205 -0
- scienceflow/runtime/parallel/__init__.py +1 -0
- scienceflow/runtime/parallel/config/__init__.py +1 -0
- scienceflow/runtime/parallel/config/manifest.py +414 -0
- scienceflow/runtime/parallel/config/models.py +66 -0
- scienceflow/runtime/parallel/config/preparation.py +229 -0
- scienceflow/runtime/parallel/config/pure.py +58 -0
- scienceflow/runtime/parallel/control/__init__.py +6 -0
- scienceflow/runtime/parallel/control/registry.py +61 -0
- scienceflow/runtime/parallel/control/resource_claims.py +64 -0
- scienceflow/runtime/parallel/control/selection.py +93 -0
- scienceflow/runtime/parallel/control/service.py +171 -0
- scienceflow/runtime/parallel/control/worker.py +133 -0
- scienceflow/runtime/parallel/execution/__init__.py +1 -0
- scienceflow/runtime/parallel/execution/base.py +23 -0
- scienceflow/runtime/parallel/execution/construction.py +203 -0
- scienceflow/runtime/parallel/execution/runner.py +56 -0
- scienceflow/runtime/parallel/execution/scheduler.py +94 -0
- scienceflow/runtime/parallel/execution/subprocess.py +103 -0
- scienceflow/runtime/parallel/service.py +56 -0
- scienceflow/runtime/parallel/state/__init__.py +1 -0
- scienceflow/runtime/parallel/state/lifecycle.py +215 -0
- scienceflow/runtime/parallel/state/result.py +21 -0
- scienceflow/runtime/parallel/state/resume.py +74 -0
- scienceflow/runtime/parallel/state/subprocess_runtime.py +322 -0
- scienceflow/runtime/safety/__init__.py +42 -0
- scienceflow/runtime/safety/execution/__init__.py +1 -0
- scienceflow/runtime/safety/execution/agent_runtime/__init__.py +1 -0
- scienceflow/runtime/safety/execution/agent_runtime/edit_guard.py +176 -0
- scienceflow/runtime/safety/execution/agent_runtime/tool_base.py +51 -0
- scienceflow/runtime/safety/execution/agent_runtime/tool_bundle_policy.py +62 -0
- scienceflow/runtime/safety/execution/agent_runtime/tool_composition.py +243 -0
- scienceflow/runtime/safety/execution/evaluation_process.py +248 -0
- scienceflow/runtime/safety/execution/interpreter.py +192 -0
- scienceflow/runtime/safety/execution/sandbox.py +251 -0
- scienceflow/runtime/safety/policy/__init__.py +1 -0
- scienceflow/runtime/safety/policy/agent_policies/__init__.py +13 -0
- scienceflow/runtime/safety/policy/agent_policies/artifacts.py +711 -0
- scienceflow/runtime/safety/policy/agent_policies/bash_command_classifier.py +76 -0
- scienceflow/runtime/safety/policy/agent_policies/bash_utils.py +171 -0
- scienceflow/runtime/safety/policy/agent_policies/guards.py +1040 -0
- scienceflow/runtime/safety/policy/code_guard.py +276 -0
- scienceflow/runtime/safety/policy/execution_policy.py +1191 -0
- scienceflow/runtime/safety/policy/leakage_detector.py +588 -0
- scienceflow/runtime/safety/policy/stdout_checker.py +161 -0
- scienceflow/runtime/safety/resource/__init__.py +76 -0
- scienceflow/runtime/safety/resource/lifecycle/__init__.py +1 -0
- scienceflow/runtime/safety/resource/lifecycle/artifacts.py +320 -0
- scienceflow/runtime/safety/resource/lifecycle/completion.py +83 -0
- scienceflow/runtime/safety/resource/lifecycle/gpu_sublease.py +172 -0
- scienceflow/runtime/safety/resource/lifecycle/process_lifecycle.py +124 -0
- scienceflow/runtime/safety/resource/review/__init__.py +1 -0
- scienceflow/runtime/safety/resource/review/review_boundary.py +30 -0
- scienceflow/runtime/safety/resource/review/review_outcome.py +66 -0
- scienceflow/runtime/safety/resource/review/review_signal.py +238 -0
- scienceflow/runtime/safety/resource/review/review_state.py +533 -0
- scienceflow/runtime/safety/resource/review/signals.py +97 -0
- scienceflow/runtime/safety/tooling/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/__init__.py +43 -0
- scienceflow/runtime/safety/tooling/bash/core/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/core/pipeline_preparation.py +298 -0
- scienceflow/runtime/safety/tooling/bash/core/pure.py +51 -0
- scienceflow/runtime/safety/tooling/bash/core/request_builder.py +336 -0
- scienceflow/runtime/safety/tooling/bash/core/shared.py +237 -0
- scienceflow/runtime/safety/tooling/bash/core/tool.py +117 -0
- scienceflow/runtime/safety/tooling/bash/monitor/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/monitor/effects.py +196 -0
- scienceflow/runtime/safety/tooling/bash/monitor/execution.py +151 -0
- scienceflow/runtime/safety/tooling/bash/monitor/guard.py +535 -0
- scienceflow/runtime/safety/tooling/bash/monitor/stream.py +301 -0
- scienceflow/runtime/safety/tooling/bash/policy/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/policy/admission.py +595 -0
- scienceflow/runtime/safety/tooling/bash/policy/output.py +298 -0
- scienceflow/runtime/safety/tooling/bash/process/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/process/pipeline.py +154 -0
- scienceflow/runtime/safety/tooling/bash/process/start.py +118 -0
- scienceflow/runtime/safety/tooling/bash/process/streaming.py +228 -0
- scienceflow/runtime/safety/tooling/bash/runtime/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/bash/runtime/tool_runtime.py +78 -0
- scienceflow/runtime/safety/tooling/resource_management/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/resource_management/resource_policy.py +650 -0
- scienceflow/runtime/safety/tooling/resource_management/resource_timeout_feedback.py +5 -0
- scienceflow/runtime/safety/tooling/resource_management/resource_wait.py +85 -0
- scienceflow/runtime/safety/tooling/resource_management/signals.py +462 -0
- scienceflow/runtime/safety/tooling/resource_management/spawn_feedback.py +5 -0
- scienceflow/runtime/safety/tooling/workspace/__init__.py +1 -0
- scienceflow/runtime/safety/tooling/workspace/progress.py +260 -0
- scienceflow/runtime/safety/tooling/workspace/shadow_workspace.py +276 -0
- scienceflow/runtime/safety/tooling/workspace/shell_guards.py +1173 -0
- scienceflow/runtime/safety/tooling/workspace/shell_output.py +41 -0
- scienceflow/runtime/task_package.py +333 -0
- scienceflow/runtime/workflow.py +134 -0
- scienceflow-0.2.0b3.dist-info/METADATA +364 -0
- scienceflow-0.2.0b3.dist-info/RECORD +951 -0
- scienceflow-0.2.0b3.dist-info/WHEEL +5 -0
- scienceflow-0.2.0b3.dist-info/entry_points.txt +2 -0
- scienceflow-0.2.0b3.dist-info/licenses/LICENSE +9 -0
- scienceflow-0.2.0b3.dist-info/top_level.txt +2 -0
- tasks/README.md +10 -0
- tasks/ml/mlebench/3d-object-detection-for-autonomous-vehicles/description_lite.md +29 -0
- tasks/ml/mlebench/3d-object-detection-for-autonomous-vehicles/task.yaml +1 -0
- tasks/ml/mlebench/AI4Code/description_lite.md +29 -0
- tasks/ml/mlebench/AI4Code/task.yaml +1 -0
- tasks/ml/mlebench/_shared/evaluator.py +122 -0
- tasks/ml/mlebench/_shared/task_defaults.yaml +15 -0
- tasks/ml/mlebench/aerial-cactus-identification/description_lite.md +29 -0
- tasks/ml/mlebench/aerial-cactus-identification/task.yaml +1 -0
- tasks/ml/mlebench/alaska2-image-steganalysis/description_lite.md +30 -0
- tasks/ml/mlebench/alaska2-image-steganalysis/task.yaml +1 -0
- tasks/ml/mlebench/aptos2019-blindness-detection/description_lite.md +28 -0
- tasks/ml/mlebench/aptos2019-blindness-detection/task.yaml +1 -0
- tasks/ml/mlebench/billion-word-imputation/description_lite.md +30 -0
- tasks/ml/mlebench/billion-word-imputation/task.yaml +3 -0
- tasks/ml/mlebench/bms-molecular-translation/description_lite.md +29 -0
- tasks/ml/mlebench/bms-molecular-translation/task.yaml +1 -0
- tasks/ml/mlebench/cassava-leaf-disease-classification/description_lite.md +28 -0
- tasks/ml/mlebench/cassava-leaf-disease-classification/task.yaml +3 -0
- tasks/ml/mlebench/cdiscount-image-classification-challenge/description_lite.md +89 -0
- tasks/ml/mlebench/cdiscount-image-classification-challenge/task.yaml +3 -0
- tasks/ml/mlebench/chaii-hindi-and-tamil-question-answering/description_lite.md +29 -0
- tasks/ml/mlebench/chaii-hindi-and-tamil-question-answering/task.yaml +1 -0
- tasks/ml/mlebench/champs-scalar-coupling/description_lite.md +29 -0
- tasks/ml/mlebench/champs-scalar-coupling/task.yaml +1 -0
- tasks/ml/mlebench/competition_categories.json +76 -0
- tasks/ml/mlebench/denoising-dirty-documents/description_lite.md +30 -0
- tasks/ml/mlebench/denoising-dirty-documents/task.yaml +1 -0
- tasks/ml/mlebench/detecting-insults-in-social-commentary/description_lite.md +29 -0
- tasks/ml/mlebench/detecting-insults-in-social-commentary/task.yaml +1 -0
- tasks/ml/mlebench/dog-breed-identification/description_lite.md +29 -0
- tasks/ml/mlebench/dog-breed-identification/task.yaml +1 -0
- tasks/ml/mlebench/dogs-vs-cats-redux-kernels-edition/description_lite.md +29 -0
- tasks/ml/mlebench/dogs-vs-cats-redux-kernels-edition/task.yaml +1 -0
- tasks/ml/mlebench/facebook-recruiting-iii-keyword-extraction/description_lite.md +32 -0
- tasks/ml/mlebench/facebook-recruiting-iii-keyword-extraction/task.yaml +1 -0
- tasks/ml/mlebench/freesound-audio-tagging-2019/description_lite.md +27 -0
- tasks/ml/mlebench/freesound-audio-tagging-2019/task.yaml +1 -0
- tasks/ml/mlebench/google-quest-challenge/description_lite.md +27 -0
- tasks/ml/mlebench/google-quest-challenge/task.yaml +1 -0
- tasks/ml/mlebench/google-research-identify-contrails-reduce-global-warming/description_lite.md +35 -0
- tasks/ml/mlebench/google-research-identify-contrails-reduce-global-warming/task.yaml +1 -0
- tasks/ml/mlebench/h-and-m-personalized-fashion-recommendations/description_lite.md +32 -0
- tasks/ml/mlebench/h-and-m-personalized-fashion-recommendations/task.yaml +1 -0
- tasks/ml/mlebench/herbarium-2020-fgvc7/description_lite.md +28 -0
- tasks/ml/mlebench/herbarium-2020-fgvc7/task.yaml +1 -0
- tasks/ml/mlebench/herbarium-2021-fgvc8/description_lite.md +28 -0
- tasks/ml/mlebench/herbarium-2021-fgvc8/task.yaml +1 -0
- tasks/ml/mlebench/herbarium-2022-fgvc9/description_lite.md +28 -0
- tasks/ml/mlebench/herbarium-2022-fgvc9/task.yaml +1 -0
- tasks/ml/mlebench/histopathologic-cancer-detection/description_lite.md +29 -0
- tasks/ml/mlebench/histopathologic-cancer-detection/task.yaml +1 -0
- tasks/ml/mlebench/hms-harmful-brain-activity-classification/description_lite.md +29 -0
- tasks/ml/mlebench/hms-harmful-brain-activity-classification/task.yaml +1 -0
- tasks/ml/mlebench/hotel-id-2021-fgvc8/description_lite.md +29 -0
- tasks/ml/mlebench/hotel-id-2021-fgvc8/task.yaml +1 -0
- tasks/ml/mlebench/hubmap-kidney-segmentation/description_lite.md +30 -0
- tasks/ml/mlebench/hubmap-kidney-segmentation/task.yaml +3 -0
- tasks/ml/mlebench/icecube-neutrinos-in-deep-ice/description_lite.md +28 -0
- tasks/ml/mlebench/icecube-neutrinos-in-deep-ice/task.yaml +1 -0
- tasks/ml/mlebench/imet-2020-fgvc7/description_lite.md +29 -0
- tasks/ml/mlebench/imet-2020-fgvc7/task.yaml +1 -0
- tasks/ml/mlebench/inaturalist-2019-fgvc6/description_lite.md +29 -0
- tasks/ml/mlebench/inaturalist-2019-fgvc6/task.yaml +1 -0
- tasks/ml/mlebench/iwildcam-2019-fgvc6/description_lite.md +28 -0
- tasks/ml/mlebench/iwildcam-2019-fgvc6/task.yaml +1 -0
- tasks/ml/mlebench/iwildcam-2020-fgvc7/description_lite.md +28 -0
- tasks/ml/mlebench/iwildcam-2020-fgvc7/task.yaml +1 -0
- tasks/ml/mlebench/jigsaw-toxic-comment-classification-challenge/description_lite.md +29 -0
- tasks/ml/mlebench/jigsaw-toxic-comment-classification-challenge/task.yaml +1 -0
- tasks/ml/mlebench/jigsaw-unintended-bias-in-toxicity-classification/description_lite.md +26 -0
- tasks/ml/mlebench/jigsaw-unintended-bias-in-toxicity-classification/task.yaml +1 -0
- tasks/ml/mlebench/kuzushiji-recognition/description_lite.md +28 -0
- tasks/ml/mlebench/kuzushiji-recognition/task.yaml +1 -0
- tasks/ml/mlebench/leaf-classification/description_lite.md +28 -0
- tasks/ml/mlebench/leaf-classification/task.yaml +1 -0
- tasks/ml/mlebench/learning-agency-lab-automated-essay-scoring-2/description_lite.md +29 -0
- tasks/ml/mlebench/learning-agency-lab-automated-essay-scoring-2/task.yaml +1 -0
- tasks/ml/mlebench/lmsys-chatbot-arena/description_lite.md +29 -0
- tasks/ml/mlebench/lmsys-chatbot-arena/task.yaml +1 -0
- tasks/ml/mlebench/mlsp-2013-birds/description_lite.md +27 -0
- tasks/ml/mlebench/mlsp-2013-birds/task.yaml +1 -0
- tasks/ml/mlebench/multi-modal-gesture-recognition/description_lite.md +29 -0
- tasks/ml/mlebench/multi-modal-gesture-recognition/task.yaml +1 -0
- tasks/ml/mlebench/new-york-city-taxi-fare-prediction/description_lite.md +39 -0
- tasks/ml/mlebench/new-york-city-taxi-fare-prediction/task.yaml +1 -0
- tasks/ml/mlebench/nfl-player-contact-detection/description_lite.md +31 -0
- tasks/ml/mlebench/nfl-player-contact-detection/task.yaml +1 -0
- tasks/ml/mlebench/nomad2018-predict-transparent-conductors/description_lite.md +29 -0
- tasks/ml/mlebench/nomad2018-predict-transparent-conductors/task.yaml +1 -0
- tasks/ml/mlebench/osic-pulmonary-fibrosis-progression/description_lite.md +37 -0
- tasks/ml/mlebench/osic-pulmonary-fibrosis-progression/task.yaml +1 -0
- tasks/ml/mlebench/petfinder-pawpularity-score/description_lite.md +29 -0
- tasks/ml/mlebench/petfinder-pawpularity-score/task.yaml +3 -0
- tasks/ml/mlebench/plant-pathology-2020-fgvc7/description_lite.md +30 -0
- tasks/ml/mlebench/plant-pathology-2020-fgvc7/task.yaml +1 -0
- tasks/ml/mlebench/plant-pathology-2021-fgvc8/description_lite.md +28 -0
- tasks/ml/mlebench/plant-pathology-2021-fgvc8/task.yaml +1 -0
- tasks/ml/mlebench/predict-volcanic-eruptions-ingv-oe/description_lite.md +27 -0
- tasks/ml/mlebench/predict-volcanic-eruptions-ingv-oe/task.yaml +1 -0
- tasks/ml/mlebench/random-acts-of-pizza/description_lite.md +29 -0
- tasks/ml/mlebench/random-acts-of-pizza/task.yaml +1 -0
- tasks/ml/mlebench/ranzcr-clip-catheter-line-classification/description_lite.md +29 -0
- tasks/ml/mlebench/ranzcr-clip-catheter-line-classification/task.yaml +1 -0
- tasks/ml/mlebench/rsna-2022-cervical-spine-fracture-detection/description_lite.md +28 -0
- tasks/ml/mlebench/rsna-2022-cervical-spine-fracture-detection/task.yaml +1 -0
- tasks/ml/mlebench/rsna-breast-cancer-detection/description_lite.md +73 -0
- tasks/ml/mlebench/rsna-breast-cancer-detection/task.yaml +1 -0
- tasks/ml/mlebench/rsna-miccai-brain-tumor-radiogenomic-classification/description_lite.md +29 -0
- tasks/ml/mlebench/rsna-miccai-brain-tumor-radiogenomic-classification/task.yaml +1 -0
- tasks/ml/mlebench/seti-breakthrough-listen/description_lite.md +28 -0
- tasks/ml/mlebench/seti-breakthrough-listen/task.yaml +3 -0
- tasks/ml/mlebench/siim-covid19-detection/description_lite.md +29 -0
- tasks/ml/mlebench/siim-covid19-detection/task.yaml +1 -0
- tasks/ml/mlebench/siim-isic-melanoma-classification/description_lite.md +29 -0
- tasks/ml/mlebench/siim-isic-melanoma-classification/task.yaml +1 -0
- tasks/ml/mlebench/smartphone-decimeter-2022/description_lite.md +35 -0
- tasks/ml/mlebench/smartphone-decimeter-2022/task.yaml +1 -0
- tasks/ml/mlebench/spooky-author-identification/description_lite.md +29 -0
- tasks/ml/mlebench/spooky-author-identification/task.yaml +1 -0
- tasks/ml/mlebench/stanford-covid-vaccine/description_lite.md +29 -0
- tasks/ml/mlebench/stanford-covid-vaccine/task.yaml +1 -0
- tasks/ml/mlebench/statoil-iceberg-classifier-challenge/description_lite.md +30 -0
- tasks/ml/mlebench/statoil-iceberg-classifier-challenge/task.yaml +1 -0
- tasks/ml/mlebench/tabular-playground-series-dec-2021/description_lite.md +28 -0
- tasks/ml/mlebench/tabular-playground-series-dec-2021/task.yaml +1 -0
- tasks/ml/mlebench/tabular-playground-series-may-2022/description_lite.md +28 -0
- tasks/ml/mlebench/tabular-playground-series-may-2022/task.yaml +1 -0
- tasks/ml/mlebench/tensorflow-speech-recognition-challenge/description_lite.md +28 -0
- tasks/ml/mlebench/tensorflow-speech-recognition-challenge/task.yaml +1 -0
- tasks/ml/mlebench/tensorflow2-question-answering/description_lite.md +31 -0
- tasks/ml/mlebench/tensorflow2-question-answering/task.yaml +1 -0
- tasks/ml/mlebench/text-normalization-challenge-english-language/description_lite.md +31 -0
- tasks/ml/mlebench/text-normalization-challenge-english-language/task.yaml +1 -0
- tasks/ml/mlebench/text-normalization-challenge-russian-language/description_lite.md +28 -0
- tasks/ml/mlebench/text-normalization-challenge-russian-language/task.yaml +1 -0
- tasks/ml/mlebench/tgs-salt-identification-challenge/description_lite.md +29 -0
- tasks/ml/mlebench/tgs-salt-identification-challenge/task.yaml +1 -0
- tasks/ml/mlebench/the-icml-2013-whale-challenge-right-whale-redux/description_lite.md +27 -0
- tasks/ml/mlebench/the-icml-2013-whale-challenge-right-whale-redux/task.yaml +1 -0
- tasks/ml/mlebench/tweet-sentiment-extraction/description_lite.md +29 -0
- tasks/ml/mlebench/tweet-sentiment-extraction/task.yaml +1 -0
- tasks/ml/mlebench/us-patent-phrase-to-phrase-matching/description_lite.md +29 -0
- tasks/ml/mlebench/us-patent-phrase-to-phrase-matching/task.yaml +1 -0
- tasks/ml/mlebench/uw-madison-gi-tract-image-segmentation/description_lite.md +33 -0
- tasks/ml/mlebench/uw-madison-gi-tract-image-segmentation/task.yaml +1 -0
- tasks/ml/mlebench/ventilator-pressure-prediction/description_lite.md +29 -0
- tasks/ml/mlebench/ventilator-pressure-prediction/task.yaml +1 -0
- tasks/ml/mlebench/vesuvius-challenge-ink-detection/description_lite.md +28 -0
- tasks/ml/mlebench/vesuvius-challenge-ink-detection/task.yaml +1 -0
- tasks/ml/mlebench/vinbigdata-chest-xray-abnormalities-detection/description_lite.md +29 -0
- tasks/ml/mlebench/vinbigdata-chest-xray-abnormalities-detection/task.yaml +1 -0
- tasks/ml/mlebench/whale-categorization-playground/description_lite.md +29 -0
- tasks/ml/mlebench/whale-categorization-playground/task.yaml +1 -0
- tasks/opt_solver/_shared/task_defaults.yaml +2 -0
- tasks/opt_solver/_tools/prepare_math_opt_solver_tasks.py +154 -0
- tasks/opt_solver/circle-packing/description_lite.md +30 -0
- tasks/opt_solver/circle-packing/evaluator.py +192 -0
- tasks/opt_solver/circle-packing/task.yaml +24 -0
- tasks/opt_solver/circle-packing/validation/invalid_solution.json +5 -0
- tasks/opt_solver/circle-packing/validation/valid_solution.json +10 -0
- tasks/opt_solver/kttsp/description_lite.md +7 -0
- tasks/opt_solver/kttsp/evaluator.py +277 -0
- tasks/opt_solver/kttsp/task.yaml +17 -0
- tasks/opt_solver/ratio-minimization/description_lite.md +41 -0
- tasks/opt_solver/ratio-minimization/evaluator.py +119 -0
- tasks/opt_solver/ratio-minimization/task.yaml +18 -0
- tasks/opt_solver/uncertainty-ineq/description_lite.md +36 -0
- tasks/opt_solver/uncertainty-ineq/evaluator.py +179 -0
- tasks/opt_solver/uncertainty-ineq/task.yaml +15 -0
- tasks/sci_modeling_bench/README.md +64 -0
- tasks/sci_modeling_bench/_shared/common.py +177 -0
- tasks/sci_modeling_bench/_shared/evaluator.py +625 -0
- tasks/sci_modeling_bench/_shared/prepare_data.py +492 -0
- tasks/sci_modeling_bench/_shared/query_budget.py +193 -0
- tasks/sci_modeling_bench/drugmatrix-chloride-ranking/description_lite.md +24 -0
- tasks/sci_modeling_bench/drugmatrix-chloride-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/drugmatrix-creatinine-ranking/description_lite.md +24 -0
- tasks/sci_modeling_bench/drugmatrix-creatinine-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/drugmatrix-mch-ranking/description_lite.md +25 -0
- tasks/sci_modeling_bench/drugmatrix-mch-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/drugmatrix-mchc-ranking/description_lite.md +26 -0
- tasks/sci_modeling_bench/drugmatrix-mchc-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/drugmatrix-phosphorus-ranking/description_lite.md +23 -0
- tasks/sci_modeling_bench/drugmatrix-phosphorus-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/drugmatrix-sodium-ranking/description_lite.md +26 -0
- tasks/sci_modeling_bench/drugmatrix-sodium-ranking/task.yaml +40 -0
- tasks/sci_modeling_bench/gfp-ranking/description_lite.md +44 -0
- tasks/sci_modeling_bench/gfp-ranking/task.yaml +48 -0
- tasks/sci_modeling_bench/hopper-controller-ranking/description_lite.md +41 -0
- tasks/sci_modeling_bench/hopper-controller-ranking/task.yaml +48 -0
- tasks/sci_modeling_bench/superconductor-ranking/description_lite.md +40 -0
- tasks/sci_modeling_bench/superconductor-ranking/task.yaml +48 -0
- tasks/sci_modeling_bench/tfbind10-pho4-black-box/description_lite.md +46 -0
- tasks/sci_modeling_bench/tfbind10-pho4-black-box/task.yaml +47 -0
- tasks/sci_modeling_bench/tfbind8-black-box/description_lite.md +40 -0
- tasks/sci_modeling_bench/tfbind8-black-box/task.yaml +50 -0
- tasks/sci_modeling_bench/utr-mrl-ranking/description_lite.md +44 -0
- tasks/sci_modeling_bench/utr-mrl-ranking/task.yaml +48 -0
scienceflow/__init__.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Copyright (C) 2026. Huawei Technologies Co., Ltd. All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# This program is free software; you can redistribute it and/or modify it under
|
|
4
|
+
# the terms of the MIT license.
|
|
5
|
+
#
|
|
6
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
7
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
8
|
+
# PARTICULAR PURPOSE. See the MIT License for more details.
|
|
9
|
+
#
|
|
10
|
+
# The name of Huawei and the contributors may not be used to endorse or promote
|
|
11
|
+
# products derived from this software without specific prior written permission.
|
|
12
|
+
|
|
13
|
+
"""ScienceFlow scientific-agent package."""
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"""Lazy public surface for ScienceFlow's domain-specific agent extensions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from importlib import import_module
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
_EXPORTS = {
|
|
9
|
+
"AgentCallbackPorts": ("scienceflow.agent.core.ports.callback_ports", "AgentCallbackPorts"),
|
|
10
|
+
"ScienceAgent": ("scienceflow.agent.core.runtime.agent", "ScienceAgent"),
|
|
11
|
+
"_DEFAULT_SYSTEM": ("scienceflow.agent.prompts.system_prompt", "_DEFAULT_SYSTEM"),
|
|
12
|
+
"_default_system_prompt": (
|
|
13
|
+
"scienceflow.agent.prompts.system_prompt",
|
|
14
|
+
"_default_system_prompt",
|
|
15
|
+
),
|
|
16
|
+
"_extract_python_code_from_assistant_text": (
|
|
17
|
+
"scienceflow.agent.prompts.write_coaching",
|
|
18
|
+
"_extract_python_code_from_assistant_text",
|
|
19
|
+
),
|
|
20
|
+
"_bash_command_parallel_safe": (
|
|
21
|
+
"scienceflow.runtime.safety.policy.agent_policies.bash_utils",
|
|
22
|
+
"_bash_command_parallel_safe",
|
|
23
|
+
),
|
|
24
|
+
"_embedded_failure_user_message": (
|
|
25
|
+
"scienceflow.runtime.safety.policy.agent_policies.bash_utils",
|
|
26
|
+
"_embedded_failure_user_message",
|
|
27
|
+
),
|
|
28
|
+
"_looks_like_quick_test_solution_run": (
|
|
29
|
+
"scienceflow.runtime.safety.policy.agent_policies.bash_utils",
|
|
30
|
+
"_looks_like_quick_test_solution_run",
|
|
31
|
+
),
|
|
32
|
+
"_looks_like_write_placeholder_mimicry": (
|
|
33
|
+
"scienceflow.runtime.safety.policy.agent_policies.bash_utils",
|
|
34
|
+
"_looks_like_write_placeholder_mimicry",
|
|
35
|
+
),
|
|
36
|
+
"_WS_LOG_RECOVERY_CAP": (
|
|
37
|
+
"scienceflow.foundation.config.runtime.agent_constants",
|
|
38
|
+
"_WS_LOG_RECOVERY_CAP",
|
|
39
|
+
),
|
|
40
|
+
"_WS_LOG_USER_CAP": ("scienceflow.foundation.config.runtime.agent_constants", "_WS_LOG_USER_CAP"),
|
|
41
|
+
"_WS_LOG_BODY_CAP": (
|
|
42
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
43
|
+
"_WS_LOG_BODY_CAP",
|
|
44
|
+
),
|
|
45
|
+
"_WS_LOG_MAX_LINES": (
|
|
46
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
47
|
+
"_WS_LOG_MAX_LINES",
|
|
48
|
+
),
|
|
49
|
+
"_WS_LOG_TOOL_CALL_SINGLE_CAP": (
|
|
50
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
51
|
+
"_WS_LOG_TOOL_CALL_SINGLE_CAP",
|
|
52
|
+
),
|
|
53
|
+
"_WS_LOG_TOOL_RESULT_CAP": (
|
|
54
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
55
|
+
"_WS_LOG_TOOL_RESULT_CAP",
|
|
56
|
+
),
|
|
57
|
+
"format_tool_call_lines_for_interaction_log": (
|
|
58
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
59
|
+
"format_tool_call_lines_for_interaction_log",
|
|
60
|
+
),
|
|
61
|
+
"format_tool_result_for_interaction_log": (
|
|
62
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
63
|
+
"format_tool_result_for_interaction_log",
|
|
64
|
+
),
|
|
65
|
+
"tool_result_text_for_interaction_log": (
|
|
66
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
67
|
+
"tool_result_text_for_interaction_log",
|
|
68
|
+
),
|
|
69
|
+
"truncate_for_interaction_log": (
|
|
70
|
+
"scienceflow.runtime.observability.agent_io.interaction_log",
|
|
71
|
+
"truncate_for_interaction_log",
|
|
72
|
+
),
|
|
73
|
+
"InteractionLogPolicy": (
|
|
74
|
+
"scienceflow.runtime.observability.agent_io.interaction_log_policy",
|
|
75
|
+
"InteractionLogPolicy",
|
|
76
|
+
),
|
|
77
|
+
"resolve_interaction_log_policy": (
|
|
78
|
+
"scienceflow.runtime.observability.agent_io.interaction_log_policy",
|
|
79
|
+
"resolve_interaction_log_policy",
|
|
80
|
+
),
|
|
81
|
+
"_compress_tool_call_for_memory": (
|
|
82
|
+
"scienceflow.research.state.knowledge.memory.agent.memory_utils",
|
|
83
|
+
"_compress_tool_call_for_memory",
|
|
84
|
+
),
|
|
85
|
+
"_tool_call_args_from_tc": (
|
|
86
|
+
"scienceflow.research.state.knowledge.memory.agent.memory_utils",
|
|
87
|
+
"_tool_call_args_from_tc",
|
|
88
|
+
),
|
|
89
|
+
"inject_thought_into_tool_params": (
|
|
90
|
+
"scienceflow.research.state.knowledge.memory.agent.memory_utils",
|
|
91
|
+
"inject_thought_into_tool_params",
|
|
92
|
+
),
|
|
93
|
+
"create_tool_collection": (
|
|
94
|
+
"scienceflow.runtime.safety.execution.agent_runtime.tool_composition",
|
|
95
|
+
"create_tool_collection",
|
|
96
|
+
),
|
|
97
|
+
"clear_embedded_full_run_result": (
|
|
98
|
+
"scienceflow.runtime.safety.policy.execution_policy",
|
|
99
|
+
"clear_embedded_full_run_result",
|
|
100
|
+
),
|
|
101
|
+
"ensure_full_execution": (
|
|
102
|
+
"scienceflow.runtime.safety.policy.execution_policy",
|
|
103
|
+
"ensure_full_execution",
|
|
104
|
+
),
|
|
105
|
+
"write_embedded_full_run_result": (
|
|
106
|
+
"scienceflow.runtime.safety.policy.execution_policy",
|
|
107
|
+
"write_embedded_full_run_result",
|
|
108
|
+
),
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
__all__ = list(_EXPORTS)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def __getattr__(name: str) -> Any:
|
|
115
|
+
if name not in _EXPORTS:
|
|
116
|
+
raise AttributeError(name)
|
|
117
|
+
module_name, attribute = _EXPORTS[name]
|
|
118
|
+
value = getattr(import_module(module_name), attribute)
|
|
119
|
+
globals()[name] = value
|
|
120
|
+
return value
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Core agent runtime and port contracts."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Agent host and callback ports."""
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Copyright (C) 2026. Huawei Technologies Co., Ltd. All rights reserved.
|
|
2
|
+
|
|
3
|
+
"""Typed callback capabilities injected at the ScienceAgent composition edge."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass, replace
|
|
8
|
+
from typing import Any, Protocol
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CandidateArchivePort(Protocol):
|
|
12
|
+
def __call__(
|
|
13
|
+
self,
|
|
14
|
+
*,
|
|
15
|
+
agent: Any,
|
|
16
|
+
tool_name: str,
|
|
17
|
+
args: dict[str, Any],
|
|
18
|
+
tool_result: Any,
|
|
19
|
+
) -> Any: ...
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class StageCapturePort(Protocol):
|
|
23
|
+
def __call__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
agent: Any,
|
|
27
|
+
args: dict[str, Any],
|
|
28
|
+
tool_result: Any,
|
|
29
|
+
) -> Any: ...
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class MetricInterpretationPort(Protocol):
|
|
33
|
+
def __call__(
|
|
34
|
+
self,
|
|
35
|
+
*,
|
|
36
|
+
agent: Any,
|
|
37
|
+
stdout: str,
|
|
38
|
+
script_label: str,
|
|
39
|
+
) -> Any: ...
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class TextOnlyDecisionPort(Protocol):
|
|
43
|
+
def __call__(
|
|
44
|
+
self,
|
|
45
|
+
*,
|
|
46
|
+
agent: Any,
|
|
47
|
+
assistant_text: str,
|
|
48
|
+
round_idx: int,
|
|
49
|
+
max_steps: int,
|
|
50
|
+
) -> Any: ...
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ContextLimitEstraPort(Protocol):
|
|
54
|
+
def __call__(
|
|
55
|
+
self,
|
|
56
|
+
*,
|
|
57
|
+
agent: Any,
|
|
58
|
+
round_idx: int,
|
|
59
|
+
max_steps: int,
|
|
60
|
+
omitted: int,
|
|
61
|
+
) -> Any: ...
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class ContextCompactObserver(Protocol):
|
|
65
|
+
def __call__(self, *, phase: str, **payload: Any) -> Any: ...
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@dataclass(frozen=True, slots=True)
|
|
69
|
+
class AgentCallbackPorts:
|
|
70
|
+
"""Narrow callback capabilities; absent capabilities are explicitly ``None``."""
|
|
71
|
+
|
|
72
|
+
candidate_archive: CandidateArchivePort | None = None
|
|
73
|
+
stage_capture: StageCapturePort | None = None
|
|
74
|
+
metric_interpretation: MetricInterpretationPort | None = None
|
|
75
|
+
text_only_decision: TextOnlyDecisionPort | None = None
|
|
76
|
+
context_limit_estra: ContextLimitEstraPort | None = None
|
|
77
|
+
context_compact_observer: ContextCompactObserver | None = None
|
|
78
|
+
|
|
79
|
+
def with_overrides(self, **updates: Any) -> AgentCallbackPorts:
|
|
80
|
+
return replace(self, **updates)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
_LEGACY_CALLBACK_ATTRIBUTES = {
|
|
84
|
+
"candidate_archive": "_lnr_candidate_archive_callback",
|
|
85
|
+
"stage_capture": "_lnr_stage_capture_callback",
|
|
86
|
+
"metric_interpretation": "_lnr_metric_output_interpretation_callback",
|
|
87
|
+
"text_only_decision": "_lnr_text_only_callback",
|
|
88
|
+
"context_limit_estra": "_context_limit_estra_callback",
|
|
89
|
+
"context_compact_observer": "_context_compact_event_callback",
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def callback_ports_for(agent: Any) -> AgentCallbackPorts:
|
|
94
|
+
ports = getattr(agent, "callback_ports", None)
|
|
95
|
+
return ports if isinstance(ports, AgentCallbackPorts) else AgentCallbackPorts()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def install_callback_ports(agent: Any, ports: AgentCallbackPorts) -> None:
|
|
99
|
+
installer = getattr(agent, "configure_callback_ports", None)
|
|
100
|
+
if callable(installer):
|
|
101
|
+
installer(ports)
|
|
102
|
+
return
|
|
103
|
+
agent.callback_ports = ports
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def resolve_agent_callback(agent: Any, capability: str) -> Any | None:
|
|
107
|
+
"""Resolve a typed port, with a read-only legacy fallback during migration."""
|
|
108
|
+
|
|
109
|
+
ports = callback_ports_for(agent)
|
|
110
|
+
callback = getattr(ports, capability)
|
|
111
|
+
if callable(callback):
|
|
112
|
+
return callback
|
|
113
|
+
legacy_name = _LEGACY_CALLBACK_ATTRIBUTES[capability]
|
|
114
|
+
legacy_callback = getattr(agent, legacy_name, None)
|
|
115
|
+
return legacy_callback if callable(legacy_callback) else None
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
__all__ = [
|
|
119
|
+
"AgentCallbackPorts",
|
|
120
|
+
"CandidateArchivePort",
|
|
121
|
+
"ContextCompactObserver",
|
|
122
|
+
"ContextLimitEstraPort",
|
|
123
|
+
"MetricInterpretationPort",
|
|
124
|
+
"StageCapturePort",
|
|
125
|
+
"TextOnlyDecisionPort",
|
|
126
|
+
"callback_ports_for",
|
|
127
|
+
"install_callback_ports",
|
|
128
|
+
"resolve_agent_callback",
|
|
129
|
+
]
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""Typed capabilities consumed by the ScienceFlow agent session."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from functools import partial
|
|
7
|
+
from typing import Any, Awaitable, Callable, Protocol
|
|
8
|
+
|
|
9
|
+
from inquirycraft.tools import ToolResult
|
|
10
|
+
|
|
11
|
+
from scienceflow.agent.policies import routing
|
|
12
|
+
from scienceflow.agent.prompts import system_prompt
|
|
13
|
+
from scienceflow.research.control import agent_runtime_state
|
|
14
|
+
from scienceflow.runtime.observability import agent_tool_feedback
|
|
15
|
+
from scienceflow.research.quality import embedded_fullrun
|
|
16
|
+
from scienceflow.runtime.safety.execution.agent_runtime import edit_guard
|
|
17
|
+
from scienceflow.runtime.safety.execution.agent_runtime.tool_bundle_policy import (
|
|
18
|
+
normalize_tool_calls_for_execution,
|
|
19
|
+
)
|
|
20
|
+
from scienceflow.research.solver.lnr.orchestration import agent_hooks
|
|
21
|
+
from scienceflow.research.state.workspace.adapters import path_hygiene
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PrepareToolFeedbackPort(Protocol):
|
|
25
|
+
def __call__(
|
|
26
|
+
self,
|
|
27
|
+
tool_name: str,
|
|
28
|
+
args: dict[str, Any],
|
|
29
|
+
tool_result: ToolResult,
|
|
30
|
+
*,
|
|
31
|
+
guard_coaching: str = "",
|
|
32
|
+
) -> str: ...
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
WorkspaceCheckpointPort = Callable[[str, ToolResult], None]
|
|
36
|
+
NormalizeToolInputPort = Callable[[str, dict[str, Any]], dict[str, Any]]
|
|
37
|
+
RewriteToolResultPort = Callable[[ToolResult], ToolResult]
|
|
38
|
+
ExecuteToolPort = Callable[[str, dict[str, Any]], Awaitable[ToolResult]]
|
|
39
|
+
RecordReadPort = Callable[[str], None]
|
|
40
|
+
RoundIndexPort = Callable[[int], None]
|
|
41
|
+
RoundCompletePort = Callable[[list[str] | None], None]
|
|
42
|
+
NoArgumentPort = Callable[[], None]
|
|
43
|
+
BuildSystemMessagesPort = Callable[[], list[Any]]
|
|
44
|
+
ToolChoicePort = Callable[[int, str | None], str]
|
|
45
|
+
NormalizeCallsPort = Callable[[list[Any]], Any]
|
|
46
|
+
EmbeddedToolResultPort = Callable[[dict[str, Any], ToolResult], Awaitable[Any]]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass(frozen=True, slots=True)
|
|
50
|
+
class AgentHostPorts:
|
|
51
|
+
"""Narrow, explicit host capabilities used by the IQ runtime adapter."""
|
|
52
|
+
|
|
53
|
+
workspace_checkpoint: WorkspaceCheckpointPort
|
|
54
|
+
normalize_tool_input_paths: NormalizeToolInputPort
|
|
55
|
+
rewrite_tool_result_paths: RewriteToolResultPort
|
|
56
|
+
execute_tool_with_edit_guard: ExecuteToolPort
|
|
57
|
+
record_read_for_edit_guard: RecordReadPort
|
|
58
|
+
prepare_tool_feedback_for_memory: PrepareToolFeedbackPort
|
|
59
|
+
log_iteration_header: RoundIndexPort
|
|
60
|
+
pop_and_log_thought: Callable[[dict[str, Any]], None]
|
|
61
|
+
fresh_workspace_hint: RoundIndexPort
|
|
62
|
+
periodic_round_injection: RoundIndexPort
|
|
63
|
+
round_complete: RoundCompletePort
|
|
64
|
+
sync_resource_state_summary: NoArgumentPort
|
|
65
|
+
write_productivity_snapshot: NoArgumentPort
|
|
66
|
+
build_system_messages: BuildSystemMessagesPort
|
|
67
|
+
tool_choice_for_main_loop: ToolChoicePort
|
|
68
|
+
normalize_repl_file_change_calls: NormalizeCallsPort
|
|
69
|
+
normalize_tool_calls: NormalizeCallsPort
|
|
70
|
+
maybe_write_bare_run_tail_snapshot: EmbeddedToolResultPort
|
|
71
|
+
maybe_embedded_full_run_after_quick_test: EmbeddedToolResultPort
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def compose_agent_host_ports(host: Any) -> AgentHostPorts:
|
|
75
|
+
"""Bind real domain owners once at the ScienceAgent composition boundary."""
|
|
76
|
+
|
|
77
|
+
return AgentHostPorts(
|
|
78
|
+
workspace_checkpoint=partial(
|
|
79
|
+
path_hygiene._maybe_workspace_git_auto_checkpoint, host
|
|
80
|
+
),
|
|
81
|
+
normalize_tool_input_paths=partial(
|
|
82
|
+
path_hygiene._maybe_normalize_tool_input_paths, host
|
|
83
|
+
),
|
|
84
|
+
rewrite_tool_result_paths=partial(
|
|
85
|
+
path_hygiene._maybe_rewrite_tool_result_paths, host
|
|
86
|
+
),
|
|
87
|
+
execute_tool_with_edit_guard=partial(
|
|
88
|
+
edit_guard._execute_tool_maybe_edit_guard, host
|
|
89
|
+
),
|
|
90
|
+
record_read_for_edit_guard=partial(
|
|
91
|
+
edit_guard._record_read_for_edit_guard, host
|
|
92
|
+
),
|
|
93
|
+
prepare_tool_feedback_for_memory=partial(
|
|
94
|
+
agent_tool_feedback._prepare_tool_feedback_for_memory, host
|
|
95
|
+
),
|
|
96
|
+
log_iteration_header=partial(agent_tool_feedback._log_iteration_header, host),
|
|
97
|
+
pop_and_log_thought=partial(agent_tool_feedback._pop_and_log_thought, host),
|
|
98
|
+
fresh_workspace_hint=partial(
|
|
99
|
+
agent_hooks._lnr_maybe_fresh_workspace_hint_first_round, host
|
|
100
|
+
),
|
|
101
|
+
periodic_round_injection=partial(
|
|
102
|
+
agent_hooks._lnr_maybe_periodic_inject_at_round_start, host
|
|
103
|
+
),
|
|
104
|
+
round_complete=partial(agent_hooks._lnr_on_round_complete, host),
|
|
105
|
+
sync_resource_state_summary=partial(
|
|
106
|
+
routing._sync_resource_state_summary_slot, host
|
|
107
|
+
),
|
|
108
|
+
write_productivity_snapshot=partial(
|
|
109
|
+
agent_runtime_state._write_productivity_snapshot, host
|
|
110
|
+
),
|
|
111
|
+
build_system_messages=partial(system_prompt._build_system_messages, host),
|
|
112
|
+
tool_choice_for_main_loop=partial(routing._tool_choice_for_main_loop, host),
|
|
113
|
+
normalize_repl_file_change_calls=partial(
|
|
114
|
+
routing._normalize_repl_file_change_tool_calls, host
|
|
115
|
+
),
|
|
116
|
+
normalize_tool_calls=partial(normalize_tool_calls_for_execution, host),
|
|
117
|
+
maybe_write_bare_run_tail_snapshot=partial(
|
|
118
|
+
embedded_fullrun._maybe_write_bare_run_tail_snapshot, host
|
|
119
|
+
),
|
|
120
|
+
maybe_embedded_full_run_after_quick_test=partial(
|
|
121
|
+
embedded_fullrun._maybe_embedded_full_run_after_quick_test, host
|
|
122
|
+
),
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
__all__ = ["AgentHostPorts", "compose_agent_host_ports"]
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"""ScienceFlow policies adapted to InquiryCraft's post-commit lifecycle."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import inspect
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from inquirycraft.runtime import (
|
|
9
|
+
RuntimeContext,
|
|
10
|
+
ToolCommitDecision,
|
|
11
|
+
ToolCommitObservation,
|
|
12
|
+
)
|
|
13
|
+
from inquirycraft.tools import ToolOutputReducerRegistry, ToolResult, coerce_tool_result
|
|
14
|
+
|
|
15
|
+
from scienceflow.agent.core.ports.callback_ports import resolve_agent_callback
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def scienceflow_output_reducers(host: Any) -> ToolOutputReducerRegistry:
|
|
19
|
+
"""Make IQ the single projection owner while preserving SF-visible feedback."""
|
|
20
|
+
|
|
21
|
+
registry = ToolOutputReducerRegistry()
|
|
22
|
+
|
|
23
|
+
def register(tool_name: str) -> None:
|
|
24
|
+
def reduce(*, args, result, **_):
|
|
25
|
+
guard = getattr(host, "_guard_manager", None)
|
|
26
|
+
coaching = (
|
|
27
|
+
guard.process_tool_result(tool_name, args, result) if guard else ""
|
|
28
|
+
)
|
|
29
|
+
visible = host._host_ports.prepare_tool_feedback_for_memory(
|
|
30
|
+
tool_name, args, result, guard_coaching=coaching
|
|
31
|
+
)
|
|
32
|
+
return visible, "scienceflow_feedback_v1"
|
|
33
|
+
|
|
34
|
+
registry.register(tool_name, reduce)
|
|
35
|
+
|
|
36
|
+
for tool in host.availableTools:
|
|
37
|
+
register(str(tool.name))
|
|
38
|
+
return registry
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ScienceFlowPostCommitAdapter:
|
|
42
|
+
"""Run domain callbacks from immutable, journaled tool evidence."""
|
|
43
|
+
|
|
44
|
+
def __init__(self, host: Any) -> None:
|
|
45
|
+
self.host = host
|
|
46
|
+
self._seen: set[tuple[str, str, int]] = set()
|
|
47
|
+
|
|
48
|
+
async def __call__(
|
|
49
|
+
self, observation: ToolCommitObservation, context: RuntimeContext
|
|
50
|
+
) -> ToolCommitDecision | None:
|
|
51
|
+
if observation.recovering and not observation.replayed:
|
|
52
|
+
return None
|
|
53
|
+
key = (
|
|
54
|
+
context.run_id,
|
|
55
|
+
str(observation.invocation.id),
|
|
56
|
+
observation.journal_attempt,
|
|
57
|
+
)
|
|
58
|
+
if key in self._seen:
|
|
59
|
+
return None
|
|
60
|
+
self._seen.add(key)
|
|
61
|
+
host = self.host
|
|
62
|
+
name = str(observation.invocation.name)
|
|
63
|
+
args = host._host_ports.normalize_tool_input_paths(
|
|
64
|
+
name, dict(observation.invocation.arguments)
|
|
65
|
+
)
|
|
66
|
+
args.pop("thought", None)
|
|
67
|
+
raw_result = coerce_tool_result(observation.raw_result)
|
|
68
|
+
await self._candidate_archive(name, args, raw_result)
|
|
69
|
+
if name != "bash":
|
|
70
|
+
return None
|
|
71
|
+
early = await host._host_ports.maybe_embedded_full_run_after_quick_test(
|
|
72
|
+
args, raw_result
|
|
73
|
+
)
|
|
74
|
+
if early is not None:
|
|
75
|
+
return self._terminate(str(early), "embedded_full_run")
|
|
76
|
+
await host._host_ports.maybe_write_bare_run_tail_snapshot(args, raw_result)
|
|
77
|
+
stage_callback = resolve_agent_callback(host, "stage_capture")
|
|
78
|
+
if not self._stage_ready(raw_result, stage_callback):
|
|
79
|
+
return None
|
|
80
|
+
stage_output = stage_callback(agent=host, args=args, tool_result=raw_result)
|
|
81
|
+
if inspect.isawaitable(stage_output):
|
|
82
|
+
stage_output = await stage_output
|
|
83
|
+
self._refresh_stage_id(stage_callback, context)
|
|
84
|
+
if stage_output:
|
|
85
|
+
return self._terminate(str(stage_output), "stage_capture")
|
|
86
|
+
return None
|
|
87
|
+
|
|
88
|
+
async def _candidate_archive(
|
|
89
|
+
self, name: str, args: dict[str, Any], result: ToolResult
|
|
90
|
+
) -> None:
|
|
91
|
+
callback = resolve_agent_callback(self.host, "candidate_archive")
|
|
92
|
+
if not callable(callback):
|
|
93
|
+
return
|
|
94
|
+
try:
|
|
95
|
+
value = callback(
|
|
96
|
+
agent=self.host,
|
|
97
|
+
tool_name=name,
|
|
98
|
+
args=args,
|
|
99
|
+
tool_result=result,
|
|
100
|
+
)
|
|
101
|
+
if inspect.isawaitable(value):
|
|
102
|
+
await value
|
|
103
|
+
except Exception as exc:
|
|
104
|
+
self.host._log_info(
|
|
105
|
+
"[long-horizon-flow] candidate artifact archive callback failed: %s",
|
|
106
|
+
exc,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
def _stage_ready(self, result: ToolResult, callback: Any) -> bool:
|
|
110
|
+
host = self.host
|
|
111
|
+
owner = getattr(callback, "__self__", None)
|
|
112
|
+
if isinstance(getattr(owner, "pending_text_stage_commit", None), dict):
|
|
113
|
+
return False
|
|
114
|
+
artifact = str(getattr(host, "_lnr_candidate_artifact_rel", "") or "").strip()
|
|
115
|
+
artifact_ready = bool(
|
|
116
|
+
getattr(host, "_lnr_stage_capture_on_candidate_artifact", False)
|
|
117
|
+
and artifact
|
|
118
|
+
and (host._workspace_dir / artifact).exists()
|
|
119
|
+
)
|
|
120
|
+
return bool(
|
|
121
|
+
callable(callback)
|
|
122
|
+
and not host._embedded_full_run_enabled
|
|
123
|
+
and not result.error
|
|
124
|
+
and (getattr(host, "_lnr_snapshot_ok", False) or artifact_ready)
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
@staticmethod
|
|
128
|
+
def _refresh_stage_id(callback: Any, context: RuntimeContext) -> None:
|
|
129
|
+
owner = getattr(callback, "__self__", None)
|
|
130
|
+
snapshots = getattr(owner, "stage_snapshots", ())
|
|
131
|
+
latest = None
|
|
132
|
+
fallback_stage_id = ""
|
|
133
|
+
if isinstance(snapshots, dict) and snapshots:
|
|
134
|
+
fallback_stage_id = str(next(reversed(snapshots)))
|
|
135
|
+
latest = snapshots[fallback_stage_id]
|
|
136
|
+
elif snapshots:
|
|
137
|
+
latest = snapshots[-1]
|
|
138
|
+
next_stage = getattr(owner, "_next_stage_id_for_logging", None)
|
|
139
|
+
if callable(next_stage):
|
|
140
|
+
stage_id = str(next_stage() or "draft")
|
|
141
|
+
elif latest is not None:
|
|
142
|
+
stage_id = str(
|
|
143
|
+
getattr(latest, "stage_id", "") or fallback_stage_id or "draft"
|
|
144
|
+
)
|
|
145
|
+
else:
|
|
146
|
+
return
|
|
147
|
+
lineage = getattr(owner, "_lineage_uid_prefix", None)
|
|
148
|
+
lineage_id = str(lineage() or "") if callable(lineage) else ""
|
|
149
|
+
node = getattr(owner, "_stage_node_uid", None)
|
|
150
|
+
node_uid = (
|
|
151
|
+
str(node(stage_id, lineage_id=lineage_id) or "") if callable(node) else ""
|
|
152
|
+
)
|
|
153
|
+
context.metadata["stage_id"] = stage_id
|
|
154
|
+
context.metadata["lineage_id"] = lineage_id
|
|
155
|
+
context.metadata["node_uid"] = node_uid
|
|
156
|
+
host = getattr(callback, "__self__", None)
|
|
157
|
+
agent = getattr(host, "_resource_main_agent_ref", None)
|
|
158
|
+
if agent is not None:
|
|
159
|
+
agent._scienceflow_stage_id = stage_id
|
|
160
|
+
agent._scienceflow_lineage_id = lineage_id
|
|
161
|
+
agent._scienceflow_node_uid = node_uid
|
|
162
|
+
|
|
163
|
+
@staticmethod
|
|
164
|
+
def _terminate(output: str, route: str) -> ToolCommitDecision:
|
|
165
|
+
return ToolCommitDecision(
|
|
166
|
+
action="terminate_session",
|
|
167
|
+
output=output,
|
|
168
|
+
reason=f"scienceflow_{route}",
|
|
169
|
+
route=route,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
__all__ = ["ScienceFlowPostCommitAdapter", "scienceflow_output_reducers"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Agent runtime implementation and lifecycle policy."""
|