| from __future__ import annotations |
|
|
| import argparse |
| import json |
| from pathlib import Path |
|
|
| from .agent import BiomniReActAgent |
| from .config import AgentConfig |
| from .schema import TaskSpec |
|
|
|
|
| def load_task(path: Path, workspace_override: Path | None = None) -> TaskSpec: |
| payload = json.loads(path.read_text(encoding="utf-8")) |
| workspace = workspace_override or Path(payload.get("workspace", "runs/default")) |
| outputs = [] |
| for raw in payload.get("expected_outputs", []): |
| output = Path(raw) |
| outputs.append(output if output.is_absolute() else workspace / output) |
| return TaskSpec( |
| name=payload["name"], |
| objective=payload["objective"], |
| workspace=workspace, |
| expected_outputs=outputs, |
| constraints=list(payload.get("constraints", [])), |
| metadata={str(key): str(value) for key, value in payload.get("metadata", {}).items()}, |
| ) |
|
|
|
|
| def main() -> None: |
| parser = argparse.ArgumentParser(description="Run a Biomni-ReAct task.") |
| parser.add_argument("--task", required=True, type=Path, help="Path to a JSON task specification.") |
| parser.add_argument("--workspace", type=Path, help="Override the task workspace.") |
| parser.add_argument("--model", help="Override BIOMNI_REACT_MODEL.") |
| parser.add_argument("--top-k", type=int, help="Number of resources to retrieve.") |
| args = parser.parse_args() |
|
|
| config = AgentConfig() |
| if args.model: |
| config.model = args.model |
| if args.top_k: |
| config.retrieval_top_k = args.top_k |
|
|
| task = load_task(args.task, args.workspace) |
| result = BiomniReActAgent(config=config).run(task) |
| print(json.dumps({"success": result.success, "error": result.error, "summary": str(result.artifact_paths["summary"])}, indent=2)) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|