Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
071a251
Add pluggable execution backend for Parsl, EnsembleLauncher, and Glob…
tdpham2 May 4, 2026
4878740
Fix unreachable code in aurora_parsl and EnsembleLauncher shutdown state
tdpham2 May 4, 2026
a8feddb
Update Globus config
tdpham2 May 14, 2026
3144c6a
Add inline structure for file transferring between local and globus r…
tdpham2 May 14, 2026
e032fb8
Add async job tracking for Globus Compute MCP tools
tdpham2 May 14, 2026
ae7963d
Modified the EL backend implemenations, and added a EL backend test
harikrishna1410 May 21, 2026
1febc5a
Add CGFastMCP backend framework, EL client-only mode, and pickle fix
harikrishna1410 May 22, 2026
28432be
Merge pull request #127 from argonne-lcf/dev-globus_HT
tdpham2 Jun 1, 2026
d60a1e1
Fix PR #127 blockers: silent failure, decorator IndexError, hard EL i…
tdpham2 Jun 1, 2026
4387d13
Add JobTracker persistence and Globus task UUID round-trip
tdpham2 Jun 1, 2026
1b76032
Extend CGFastMCP: tracker kwargs, pre-submit hook, schema_fanout_tool
tdpham2 Jun 1, 2026
04bcc8a
Add remote_structure_directory schemas, GC executor recovery, XANES p…
tdpham2 Jun 1, 2026
aaef2a9
Add Globus Transfer manager and MCP file-staging tools
tdpham2 Jun 1, 2026
d2b3b2d
Reintegrate MACE MCP transport, persistence, and Globus Transfer on C…
tdpham2 Jun 1, 2026
b7ac17c
Add academy module: distributed multi-agent screening via Academy
tdpham2 Jun 1, 2026
b3cc242
Fix bugs in HPC execution layer
tdpham2 Jun 1, 2026
27fff5d
Migrate XANES and gRASPA MCP servers to CGFastMCP
tdpham2 Jun 1, 2026
d28274c
Add pluggable execution backend for Parsl, EnsembleLauncher, and Glob…
tdpham2 May 4, 2026
db2a41c
Fix unreachable code in aurora_parsl and EnsembleLauncher shutdown state
tdpham2 May 4, 2026
39f28a1
Update Globus config
tdpham2 May 14, 2026
b13fc53
Add inline structure for file transferring between local and globus r…
tdpham2 May 14, 2026
b605ec0
Add async job tracking for Globus Compute MCP tools
tdpham2 May 14, 2026
35a2d65
Modified the EL backend implemenations, and added a EL backend test
harikrishna1410 May 21, 2026
212a054
Add CGFastMCP backend framework, EL client-only mode, and pickle fix
harikrishna1410 May 22, 2026
6422b61
Fix PR #127 blockers: silent failure, decorator IndexError, hard EL i…
tdpham2 Jun 1, 2026
a8a3a87
Add JobTracker persistence and Globus task UUID round-trip
tdpham2 Jun 1, 2026
78c9c33
Extend CGFastMCP: tracker kwargs, pre-submit hook, schema_fanout_tool
tdpham2 Jun 1, 2026
2d6a283
Add remote_structure_directory schemas, GC executor recovery, XANES p…
tdpham2 Jun 1, 2026
f1863d3
Add Globus Transfer manager and MCP file-staging tools
tdpham2 Jun 1, 2026
890acaa
Reintegrate MACE MCP transport, persistence, and Globus Transfer on C…
tdpham2 Jun 1, 2026
ee3d727
Add academy module: distributed multi-agent screening via Academy
tdpham2 Jun 1, 2026
e3ac8b0
Fix bugs in HPC execution layer
tdpham2 Jun 1, 2026
2d25f89
Migrate XANES and gRASPA MCP servers to CGFastMCP
tdpham2 Jun 1, 2026
bc54083
Forward HPC env vars to MCP stdio subprocess + document EL config
tdpham2 Jun 2, 2026
e85c675
Silence LocalBackend worker stdout under stdio MCP transport
tdpham2 Jun 4, 2026
84c87dd
Add smoke and demo scripts for execution backends
tdpham2 Jun 4, 2026
a31c148
Add Crux (ALCF) support to Parsl and EnsembleLauncher backends
tdpham2 Jun 5, 2026
2dc37c8
Ensure MACE worker creates output directories
JinchuLi2002 Jun 9, 2026
dfa9950
Fix schema fanout batch return annotation
JinchuLi2002 Jun 9, 2026
aad6fae
Ignore local run and model artifacts
JinchuLi2002 Jun 9, 2026
9d1b20a
Cover schema fanout and MACE output path fixes
JinchuLi2002 Jun 9, 2026
acc8a3b
Create parent directory for generated coordinate files
JinchuLi2002 Jun 9, 2026
42b15a0
Read version from chemgraphagent distribution
JinchuLi2002 Jun 9, 2026
7880562
Parameterize Aurora Parsl worker setup
JinchuLi2002 Jun 9, 2026
591dba7
Clarify MACE model path schema descriptions
JinchuLi2002 Jun 9, 2026
534a292
Add HPC JSON inspection MCP tool
JinchuLi2002 Jun 9, 2026
bf433ae
Add Academy canonical event observability
JinchuLi2002 Jun 9, 2026
ccecdd8
feat(chemgraph): add local workflow tracing
JinchuLi2002 Jun 9, 2026
ab8c0ef
feat(chemgraph): support terminal tools in single-agent graph
JinchuLi2002 Jun 9, 2026
d6f22d2
refactor(academy): reshape persistent agent runtime
JinchuLi2002 Jun 9, 2026
778e94c
feat(academy): add MACE screening campaign example
JinchuLi2002 Jun 9, 2026
0b8197b
feat(cli): wire dashboard and Academy commands
JinchuLi2002 Jun 9, 2026
96241d7
feat(models): support OpenAI-compatible Argo user metadata
JinchuLi2002 Jun 9, 2026
f4992f6
chore(academy): add redis optional dependency
JinchuLi2002 Jun 9, 2026
d8a7868
refactor(academy): rename operator console dashboard launcher
JinchuLi2002 Jun 9, 2026
c89f45e
Merge remote-tracking branch 'origin/dev-globus' into merge-dev-globus
JinchuLi2002 Jun 9, 2026
527acb9
refactor(academy): merge peer request action into send_message
JinchuLi2002 Jun 9, 2026
457351e
refactor(mcp): move in-process FastMCP adapter out of Academy
JinchuLi2002 Jun 10, 2026
186d013
refactor(academy): remove unused run artifacts
JinchuLi2002 Jun 10, 2026
a431bf0
refactor(academy): extract dashboard launcher templates
JinchuLi2002 Jun 10, 2026
b71c441
refactor(academy): run wakeups through chemgraph turn primitive
JinchuLi2002 Jun 10, 2026
77425b2
refactor(academy): trim agent status snapshots
JinchuLi2002 Jun 10, 2026
8772c7c
refactor(academy): remove stale cleanup targets
JinchuLi2002 Jun 10, 2026
11f896d
refactor(agent): route single-agent workflows through run_turn
JinchuLi2002 Jun 10, 2026
5e64525
fix(academy): avoid stdlib shadowing in profiles
JinchuLi2002 Jun 10, 2026
23dab00
fix(dashboard): show daemon workflow turns
JinchuLi2002 Jun 10, 2026
c529682
refactor(models): share LLM endpoint settings
JinchuLi2002 Jun 10, 2026
f67b340
chore(academy): remove stale built-in listings
JinchuLi2002 Jun 10, 2026
2cee93a
chore(academy): remove console script entrypoints
JinchuLi2002 Jun 10, 2026
7e5f91b
refactor(academy): launch campaign MCP tools as servers
JinchuLi2002 Jun 10, 2026
de0a79d
refactor(academy): generalize exchange registration
JinchuLi2002 Jun 10, 2026
99f073d
fix(agent): emit llm decision events for tool calls
JinchuLi2002 Jun 10, 2026
83bcd7a
fix(mcp): isolate hpc backend workers
JinchuLi2002 Jun 10, 2026
4441d98
refactor(academy): move packaged campaigns out of examples
JinchuLi2002 Jun 10, 2026
f5d2f4d
feat(cli): --trace-dir option for traditional dashboard view
JinchuLi2002 Jun 10, 2026
41a3f22
docs(example-002): add sanitized e2e guide
JinchuLi2002 Jun 11, 2026
64c467c
refactor(agent): restore per-workflow graphs; move run_turn to agent/…
JinchuLi2002 Jun 11, 2026
b5183c4
chore(agent): drop unused turn re-exports from llm_agent
JinchuLi2002 Jun 11, 2026
f1593ab
revert(agent): restore llm_agent.py to pre-academy shape
JinchuLi2002 Jun 11, 2026
bcf072d
refactor(agent): extract dashboard event callbacks into agent/events.py
JinchuLi2002 Jun 11, 2026
789920e
feat(agent): add minimum on_event and terminal_tool_names hooks for a…
JinchuLi2002 Jun 11, 2026
60817d1
Fix Parsl pickling of MCP server callables launched via "python -m"
tdpham2 Jun 11, 2026
99ef6f3
Cleanly shut down Parsl DFK in ParslBackend.shutdown
tdpham2 Jun 11, 2026
9be7740
Make Parsl worker_init configurable across HPC system configs
tdpham2 Jun 11, 2026
396a528
Add Crux support and worker-env forwarding to Parsl agent demo
tdpham2 Jun 11, 2026
ff4aa14
Add Crux support to Parsl + EnsembleLauncher smoke harness
tdpham2 Jun 11, 2026
4bca7d9
fix(events): always emit llm_decision so dashboard renders single-LLM…
JinchuLi2002 Jun 11, 2026
cbe6094
fix(mcp): isolate MACE worker in a subprocess to dodge Parsl hang on …
JinchuLi2002 Jun 12, 2026
e9dd903
Pick a multi-node-safe MPI flavour per HPC system for EnsembleLauncher
tdpham2 Jun 12, 2026
92108b1
Serialize MACE model loads across both threads and processes
tdpham2 Jun 12, 2026
cb3e197
Revert "fix(mcp): isolate MACE worker in a subprocess to dodge Parsl …
JinchuLi2002 Jun 12, 2026
bef9d87
Revert "fix(mcp): isolate hpc backend workers"
JinchuLi2002 Jun 12, 2026
ca1019c
docs(example-002): switch MACE path to in-process run_ase
JinchuLi2002 Jun 12, 2026
8043fe9
fix static sync location
harikrishna1410 Jun 13, 2026
317204b
chore(campaigns): rename campaign.json to campaign.jsonc to match con…
JinchuLi2002 Jun 15, 2026
4e6556d
feat(academy): per-agent allowed_tools whitelist on top of mcp_servers
JinchuLi2002 Jun 15, 2026
25565d0
docs(example-002): document http(s)_proxy env vars for compute-node M…
JinchuLi2002 Jun 15, 2026
648b536
fix(tools): create output_results_file parent dir in run_ase_core
JinchuLi2002 Jun 15, 2026
04f1dbf
fix(academy): materialise shared_run resource directories at startup
JinchuLi2002 Jun 15, 2026
a2e27a9
added a one off logging to run_ase_core
harikrishna1410 Jun 15, 2026
f56713d
added ppn to task spec in demo el
harikrishna1410 Jun 15, 2026
aefed79
added try except block in demo chemistry
Jun 15, 2026
4622823
refactor(academy/dashboard): bundle UAN relay script into chemgraph
JinchuLi2002 Jun 16, 2026
d3f3d41
Merge pull request #131 from JinchuLi2002/dev-globus
tdpham2 Jun 16, 2026
64d087a
added -ppn and --ngpus_per_process to mcp demos
harikrishna1410 Jun 16, 2026
09f972b
added a counter in cg mcp to make task_ids unique
harikrishna1410 Jun 17, 2026
507d518
adding some temp cg config dor argo
Jun 17, 2026
c8bb170
Gate MACE inline-structure transport to no-shared-filesystem backends
tdpham2 Jun 17, 2026
4aead3e
Gate MACE inline-structure transport to no-shared-filesystem backends
tdpham2 Jun 17, 2026
1c05436
Drop full_output read-back from MACE worker
tdpham2 Jun 17, 2026
60b4225
Drop full_output read-back from MACE worker
tdpham2 Jun 17, 2026
debdab4
moved el orchestrator to a subprocess
harikrishna1410 Jun 17, 2026
b43d390
added logging in el backend
harikrishna1410 Jun 17, 2026
3feedcd
added better cleanup of el subprocess
Jun 17, 2026
a069520
Guard stdout during EnsembleLauncher teardown
tdpham2 Jun 18, 2026
f639aa4
Guard stdout during EnsembleLauncher teardown
tdpham2 Jun 18, 2026
855be82
Merge remote-tracking branch 'origin/dev-globus-hpc' into el_test
tdpham2 Jun 18, 2026
7ec8dec
Merge pull request #133 from argonne-lcf/el_test
tdpham2 Jun 18, 2026
6741d2e
Merge remote-tracking branch 'origin/dev-globus' into dev-globus-hpc
tdpham2 Jun 18, 2026
932e4c8
Revert hardcoded argo model/base_url in Parsl agent demo
tdpham2 Jun 18, 2026
f3d036b
Remove machine-specific Crux SystemConfig tests
tdpham2 Jun 18, 2026
3434915
Skip TestELBackend when ensemble_launcher is unavailable
tdpham2 Jun 18, 2026
3a541a4
Merge pull request #132 from argonne-lcf/dev-globus-hpc
tdpham2 Jun 18, 2026
b5cac8b
fix(academy): honour [academy] optional-dep contract via lazy re-exports
JinchuLi2002 Jun 18, 2026
d293cea
fix(agent): restore calculator-context wiring lost in revert f1593ab
JinchuLi2002 Jun 18, 2026
72c8f13
Merge pull request #134 from JinchuLi2002/pr120-fixes
tdpham2 Jun 19, 2026
893285d
Remove dead single_agent_architector workflow and fix pre-merge blockers
tdpham2 Jun 18, 2026
bc04f2b
Fix eval ground-truth extraction and structured-output judge
tdpham2 Jun 30, 2026
2810c0e
Remove bundled ground_truth.json from package data
tdpham2 Jun 30, 2026
20c5a78
Remove default ground_truth.json
tdpham2 Jun 30, 2026
125020e
Add run_ase and run_graspa as backend-portable demo tools
tdpham2 Jul 1, 2026
ddbbd7f
Merge pull request #120 from argonne-lcf/dev-globus
tdpham2 Jul 1, 2026
85ef2b5
Track root config.toml (align with main)
tdpham2 Jul 1, 2026
e8d259e
Remove evaluation files from main
tdpham2 Jul 1, 2026
933ad2e
Fix CI test failures and ruff lint errors
tdpham2 Jul 2, 2026
b35e864
Fix Windows stack overflow from duplicate serialize_state
tdpham2 Jul 2, 2026
7cd962a
Merge pull request #138 from argonne-lcf/dev-fix-eval
tdpham2 Jul 2, 2026
b10180a
Update multi-agent graph to have human-in-the-loop default to False
tdpham2 Jul 7, 2026
0c7a339
Fix relative path resolution in tool file readers
reowszer Jul 8, 2026
68c434a
Resolve relative paths in MCP tool file readers
reowszer Jul 15, 2026
aeafb6f
Fix human-interrupt tests for human_supervised=False default
keceli Jul 19, 2026
8b9f83c
Harden agent/job-tracker/MCP + add academy/HPC CI coverage
keceli Jul 19, 2026
c39b08e
Bump version to 0.6.0
keceli Jul 19, 2026
8a24ddd
Merge pull request #142 from reowszer/dev-fix-path-resolution
keceli Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,33 @@ jobs:
- name: Run tests
run: |
python -m pytest tests/ -v -k "not tblite"

# Exercises the distributed/HPC feature set: the Academy multi-agent module
# and the parsl / globus-compute execution backends. These tests use mocks and
# local subprocesses (no real HPC cluster, Globus endpoint, or LLM), so they
# run in CI. Live tests remain gated behind --run-globus-compute / --run-llm
# and are not enabled here.
test-extras:
needs: lint
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies (academy + execution backends)
run: |
python -m pip install --upgrade pip
pip install -e ".[academy,parsl,globus_compute]"

- name: Run academy + backend tests
run: |
python -m pytest tests/ -v -k "not tblite"
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,14 @@ opencode.json
chemgraph_mcp_logs/
vllm/
logs/
runs/
**/*.model
error_log.txt
.env
test.csv
nwchem/
nwchem.nwi
nwchem.nwo
config.toml
vib*.traj

# Kubernetes secrets (keep secrets.yaml.template, ignore actual secrets)
Expand Down
115 changes: 115 additions & 0 deletions config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
[general]
model = "argo:gpt-4o"
workflow = "single_agent"
output = "state"
structured = true
report = true
thread = 1
recursion_limit = 20
human_supervised = false
verbose = false

[logging]
level = "WARNING"
file = "./chemgraph.log"
console = true
format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

[features]
enable_experimental = false
enable_cache = true
cache_dir = "./cache"
cache_expiry = 24

[security]
validate_keys = true
rate_limit = true
max_requests_per_minute = 60

[mcp]
# url = "http://localhost:9003/mcp/" # For streamable_http transport
# command = "" # For stdio transport (full shell command)
# server_name = "ChemGraph General Tools" # Display name for the MCP connection

[eval]
default_profile = "standard"

[api.openai]
base_url = "https://apps.inside.anl.gov/argoapi/api/v1/resource/chat/"
timeout = 30
argo_user = ""

[api.groq]
base_url = "https://api.groq.com/openai/v1"
timeout = 30

[api.anthropic]
base_url = "https://api.anthropic.com"
timeout = 30

[api.google]
base_url = "https://generativelanguage.googleapis.com/v1beta"
timeout = 30

[api.alcf]
base_url = "https://inference-api.alcf.anl.gov/resource_server/sophia/vllm/v1"
timeout = 30

[api.local]
base_url = "http://localhost:11434"
timeout = 60

[chemistry.optimization]
method = "BFGS"
fmax = 0.05
steps = 200

[chemistry.frequencies]
displacement = 0.01
nprocs = 1

[chemistry.calculators]
default = "mace_mp"
fallback = "emt"

[output.files]
directory = "./chemgraph_output"
pattern = "{timestamp}_{query_hash}"
formats = [ "xyz", "json", "html",]

[output.visualization]
enable_3d = true
viewer = "py3dmol"
dpi = 300

[advanced.agent]
custom_system_prompt = ""
max_memory_tokens = 8000
enable_function_calling = true

[advanced.parallel]
enable_parallel = false
num_workers = 2

[environments.development]
model = "gpt-4o-mini"
verbose = true
enable_cache = false

[environments.production]
model = "gpt-4o"
verbose = false
enable_cache = true
rate_limit = true

[environments.testing]
model = "gpt-4o-mini"
verbose = true
enable_cache = false

[eval.profiles.standard]
workflow_types = [ "single_agent",]
judge_model = "gpt4o"
recursion_limit = 50
structured_output = true
max_queries = 0
35 changes: 35 additions & 0 deletions examples/academy/example-002-mace-ensemble-screening/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Example 002: MACE Ensemble Screening

This example demonstrates five persistent ChemGraph Academy logical agents
running under MPI:

```text
coordinator-agent
structure-agent-a
structure-agent-b
mace-agent
assessment-agent
```

The coordinator delegates 20 SMILES candidates, structure agents generate XYZ
files, the MACE agent runs an ensemble energy screen, and the assessment agent
summarizes readiness/ranking evidence.

The campaign assets are packaged under:

```text
src/chemgraph/academy/campaigns/example-002-mace-ensemble-screening/
```

Run it by campaign name:

```bash
chemgraph academy run-compute \
--system aurora \
--run-id aurora-mace-ensemble-screening-001 \
--campaign mace-ensemble-screening-20 \
--lm-user <argo-user>
```

See `notes.md` for the high-level architecture notes. The internal E2E user
guide is intentionally not stored in this public example directory.
Loading
Loading