alchemist-nrel 0.2.1__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- alchemist_nrel-0.3.0/MANIFEST.in +40 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/PKG-INFO +57 -40
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/README.md +55 -39
- alchemist_nrel-0.3.0/RELEASE_NOTES_v0.3.0.md +154 -0
- alchemist_nrel-0.3.0/alchemist-web/eslint.config.js +23 -0
- alchemist_nrel-0.3.0/alchemist-web/index.html +13 -0
- alchemist_nrel-0.3.0/alchemist-web/package-lock.json +7788 -0
- alchemist_nrel-0.3.0/alchemist-web/package.json +52 -0
- alchemist_nrel-0.3.0/alchemist-web/postcss.config.js +6 -0
- alchemist_nrel-0.3.0/alchemist-web/public/NEW_ICON.ico +0 -0
- alchemist_nrel-0.3.0/alchemist-web/public/NEW_ICON.png +0 -0
- alchemist_nrel-0.3.0/alchemist-web/public/NEW_LOGO_DARK.png +0 -0
- alchemist_nrel-0.3.0/alchemist-web/public/NEW_LOGO_LIGHT.png +0 -0
- alchemist_nrel-0.3.0/alchemist-web/public/vite.svg +1 -0
- alchemist_nrel-0.3.0/alchemist-web/src/App.css +42 -0
- alchemist_nrel-0.3.0/alchemist-web/src/App.tsx +461 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/client.ts +64 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/acquisition.ts +19 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/experiments.ts +96 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/models.ts +46 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/sessions.ts +85 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/variables.ts +157 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/visualizations.ts +103 -0
- alchemist_nrel-0.3.0/alchemist-web/src/api/types.ts +345 -0
- alchemist_nrel-0.3.0/alchemist-web/src/assets/react.svg +1 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/AddPointDialog.tsx +210 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/AuditLockDialog.tsx +47 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/PendingSuggestionsPanel.tsx +84 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/SessionMetadata.tsx +54 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/SessionMetadataDialog.tsx +143 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/api.ts +23 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/session-components.md +98 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/ui/CollapsibleSection.tsx +49 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/ui/FormField.tsx +111 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/ui/SegmentedButton.tsx +46 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/ui/TabView.tsx +60 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/ui/index.ts +7 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/CalibrationCurve.tsx +209 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ContourPlot.tsx +570 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ContourPlotSimple.tsx +21 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/HyperparametersDisplay.tsx +42 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/MetricsPlot.tsx +142 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ParityPlot.tsx +174 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/QQPlot.tsx +221 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/VisualizationsPanel.tsx +190 -0
- alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/index.ts +10 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/acquisition/AcquisitionPanel.tsx +644 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/acquisition/index.ts +4 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/experiments/ExperimentsPanel.tsx +193 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/experiments/InitialDesignPanel.tsx +191 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/models/GPRPanel.tsx +428 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/models/README.md +130 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/models/index.ts +4 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/monitoring/MonitoringDashboard.tsx +189 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariableForm.tsx +310 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariableList.tsx +116 -0
- alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariablesPanel.tsx +126 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useAcquisition.ts +54 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useDeleteVariable.ts +28 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useExperiments.ts +87 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useFileOperations.ts +36 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useModels.ts +54 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useSessions.ts +174 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useVariables.ts +57 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useVisualizations.ts +123 -0
- alchemist_nrel-0.3.0/alchemist-web/src/hooks/useTheme.tsx +34 -0
- alchemist_nrel-0.3.0/alchemist-web/src/index.css +121 -0
- alchemist_nrel-0.3.0/alchemist-web/src/lib/utils.ts +44 -0
- alchemist_nrel-0.3.0/alchemist-web/src/main.tsx +10 -0
- alchemist_nrel-0.3.0/alchemist-web/src/providers/QueryProvider.tsx +43 -0
- alchemist_nrel-0.3.0/alchemist-web/src/providers/VisualizationProvider.tsx +53 -0
- alchemist_nrel-0.3.0/alchemist-web/tailwind.config.js +53 -0
- alchemist_nrel-0.3.0/alchemist-web/tsconfig.app.json +28 -0
- alchemist_nrel-0.3.0/alchemist-web/tsconfig.json +7 -0
- alchemist_nrel-0.3.0/alchemist-web/tsconfig.node.json +26 -0
- alchemist_nrel-0.3.0/alchemist-web/vite.config.ts +21 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/__init__.py +14 -7
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/botorch_acquisition.py +14 -6
- alchemist_nrel-0.3.0/alchemist_core/audit_log.py +594 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/experiment_manager.py +69 -5
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/botorch_model.py +6 -4
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/sklearn_model.py +44 -6
- alchemist_nrel-0.3.0/alchemist_core/session.py +1195 -0
- alchemist_nrel-0.3.0/alchemist_core/utils/doe.py +200 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/PKG-INFO +57 -40
- alchemist_nrel-0.3.0/alchemist_nrel.egg-info/SOURCES.txt +145 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/entry_points.txt +1 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/requires.txt +1 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/top_level.txt +1 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/main.py +19 -3
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/requests.py +71 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/responses.py +144 -0
- alchemist_nrel-0.3.0/api/routers/experiments.py +266 -0
- alchemist_nrel-0.3.0/api/routers/sessions.py +465 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/visualizations.py +10 -5
- alchemist_nrel-0.3.0/api/services/session_store.py +447 -0
- alchemist_nrel-0.3.0/api/static/NEW_ICON.ico +0 -0
- alchemist_nrel-0.3.0/api/static/NEW_ICON.png +0 -0
- alchemist_nrel-0.3.0/api/static/NEW_LOGO_DARK.png +0 -0
- alchemist_nrel-0.3.0/api/static/NEW_LOGO_LIGHT.png +0 -0
- alchemist_nrel-0.3.0/api/static/assets/api-vcoXEqyq.js +1 -0
- alchemist_nrel-0.3.0/api/static/assets/index-C0_glioA.js +4084 -0
- alchemist_nrel-0.3.0/api/static/assets/index-CB4V1LI5.css +1 -0
- alchemist_nrel-0.3.0/api/static/index.html +14 -0
- alchemist_nrel-0.3.0/api/static/vite.svg +1 -0
- alchemist_nrel-0.3.0/build_hooks.py +118 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/pyproject.toml +8 -3
- alchemist_nrel-0.3.0/run_api.py +55 -0
- alchemist_nrel-0.3.0/setup.py +23 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/gpr_panel.py +7 -2
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/notifications.py +197 -10
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/ui.py +1117 -68
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/variables_setup.py +47 -2
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/visualizations.py +60 -3
- alchemist_nrel-0.2.1/alchemist_core/session.py +0 -603
- alchemist_nrel-0.2.1/alchemist_nrel.egg-info/SOURCES.txt +0 -61
- alchemist_nrel-0.2.1/api/routers/experiments.py +0 -154
- alchemist_nrel-0.2.1/api/routers/sessions.py +0 -146
- alchemist_nrel-0.2.1/api/services/session_store.py +0 -291
- alchemist_nrel-0.2.1/tests/test_core_data.py +0 -177
- alchemist_nrel-0.2.1/tests/test_event_system.py +0 -336
- alchemist_nrel-0.2.1/tests/test_logging.py +0 -70
- alchemist_nrel-0.2.1/tests/test_session_api.py +0 -209
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/LICENSE +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/base_acquisition.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/skopt_acquisition.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/config.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/search_space.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/events.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/ax_model.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/base_model.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/utils/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/dependency_links.txt +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/dependencies.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/example_client.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/middleware/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/middleware/error_handlers.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/acquisition.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/models.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/variables.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/services/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/main.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/setup.cfg +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/__init__.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/acquisition_panel.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/custom_widgets.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/experiment_logger.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/pool_viz.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/ui_utils.py +0 -0
- {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/utils.py +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# MANIFEST.in - Include additional files in source distribution (sdist)
|
|
2
|
+
|
|
3
|
+
# Include documentation
|
|
4
|
+
include README.md
|
|
5
|
+
include LICENSE
|
|
6
|
+
include RELEASE_BUILD_GUIDE.md
|
|
7
|
+
include RELEASE_NOTES_*.md
|
|
8
|
+
|
|
9
|
+
# Include build hook
|
|
10
|
+
include build_hooks.py
|
|
11
|
+
|
|
12
|
+
# Include frontend source (for building from sdist) - but NOT node_modules or build artifacts
|
|
13
|
+
recursive-include alchemist-web/src *
|
|
14
|
+
recursive-include alchemist-web/public *
|
|
15
|
+
include alchemist-web/package.json
|
|
16
|
+
include alchemist-web/package-lock.json
|
|
17
|
+
include alchemist-web/tsconfig.json
|
|
18
|
+
include alchemist-web/tsconfig.*.json
|
|
19
|
+
include alchemist-web/vite.config.ts
|
|
20
|
+
include alchemist-web/tailwind.config.js
|
|
21
|
+
include alchemist-web/postcss.config.js
|
|
22
|
+
include alchemist-web/eslint.config.js
|
|
23
|
+
include alchemist-web/index.html
|
|
24
|
+
|
|
25
|
+
# Include run scripts
|
|
26
|
+
include run_api.py
|
|
27
|
+
include main.py
|
|
28
|
+
|
|
29
|
+
# Exclude unnecessary files from sdist
|
|
30
|
+
global-exclude __pycache__
|
|
31
|
+
global-exclude *.py[co]
|
|
32
|
+
global-exclude .DS_Store
|
|
33
|
+
global-exclude node_modules
|
|
34
|
+
recursive-exclude tests *
|
|
35
|
+
recursive-exclude docs *
|
|
36
|
+
recursive-exclude memory *
|
|
37
|
+
recursive-exclude .github *
|
|
38
|
+
recursive-exclude alchemist-web/node_modules *
|
|
39
|
+
recursive-exclude alchemist-web/dist *
|
|
40
|
+
recursive-exclude alchemist-web/.vite *
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: alchemist-nrel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Active learning and optimization toolkit for chemical and materials research
|
|
5
5
|
Author-email: Caleb Coatney <caleb.coatney@nrel.gov>
|
|
6
6
|
License: BSD-3-Clause
|
|
@@ -42,6 +42,7 @@ Requires-Dist: fastapi>=0.109.0
|
|
|
42
42
|
Requires-Dist: uvicorn[standard]>=0.27.0
|
|
43
43
|
Requires-Dist: pydantic>=2.5.0
|
|
44
44
|
Requires-Dist: python-multipart>=0.0.6
|
|
45
|
+
Requires-Dist: requests
|
|
45
46
|
Provides-Extra: test
|
|
46
47
|
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
47
48
|
Requires-Dist: pytest-cov>=4.0.0; extra == "test"
|
|
@@ -56,7 +57,7 @@ Requires-Dist: httpx>=0.25.0; extra == "dev"
|
|
|
56
57
|
Requires-Dist: requests>=2.31.0; extra == "dev"
|
|
57
58
|
Dynamic: license-file
|
|
58
59
|
|
|
59
|
-
<img src="docs/assets/
|
|
60
|
+
<img src="docs/assets/NEW_LOGO_LIGHT.png" alt="ALchemist" width="50%" />
|
|
60
61
|
|
|
61
62
|
**ALchemist: Active Learning Toolkit for Chemical and Materials Research**
|
|
62
63
|
|
|
@@ -81,75 +82,91 @@ ALchemist accelerates discovery and optimization by combining:
|
|
|
81
82
|
- **Probabilistic surrogate modeling:** Gaussian process regression via BoTorch or scikit-optimize backends.
|
|
82
83
|
- **Advanced acquisition strategies:** Efficient sampling using qEI, qPI, qUCB, and qNegIntegratedPosteriorVariance.
|
|
83
84
|
- **Modern web interface:** React-based UI with FastAPI backend for seamless active learning workflows.
|
|
85
|
+
- **Autonomous optimization:** Human-out-of-the-loop optimization for real-time process control.
|
|
84
86
|
- **Experiment tracking:** CSV logging, reproducible random seeds, and error tracking.
|
|
85
87
|
- **Extensibility:** Abstract interfaces for models and acquisition functions enable future backend and workflow expansion.
|
|
86
88
|
|
|
89
|
+
### Use Cases
|
|
90
|
+
|
|
91
|
+
- **Interactive Optimization**: Desktop GUI or web UI for manual experiment design
|
|
92
|
+
- **Programmatic Workflows**: Python Session API for scripts and notebooks
|
|
93
|
+
- **Autonomous Operation**: REST API for real-time process control (reactors, synthesis, etc.)
|
|
94
|
+
- **Remote Collaboration**: Web-based interface accessible from any device
|
|
95
|
+
|
|
87
96
|
---
|
|
88
97
|
|
|
89
98
|
## 🧭 Quick Start
|
|
90
99
|
|
|
91
|
-
###
|
|
100
|
+
### Installation
|
|
92
101
|
|
|
93
|
-
**
|
|
94
|
-
```bash
|
|
95
|
-
# Option 1: Manual start
|
|
96
|
-
python run_api.py # Terminal 1: Backend (port 8000)
|
|
97
|
-
cd alchemist-web && npm run dev # Terminal 2: Frontend (port 5173)
|
|
102
|
+
**Requirements:** Python 3.11 or higher
|
|
98
103
|
|
|
99
|
-
|
|
100
|
-
scripts\dev_start.bat # Windows
|
|
101
|
-
./scripts/dev_start.sh # Linux/Mac
|
|
102
|
-
```
|
|
104
|
+
We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage your Python environments.
|
|
103
105
|
|
|
104
|
-
**
|
|
106
|
+
**1. Create a new environment:**
|
|
105
107
|
```bash
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
conda create -n alchemist-env python=3.11
|
|
109
|
+
conda activate alchemist-env
|
|
110
|
+
```
|
|
109
111
|
|
|
110
|
-
|
|
111
|
-
python run_api.py --production
|
|
112
|
+
**2. Install ALchemist:**
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
*Option A: From PyPI (recommended):*
|
|
115
|
+
```bash
|
|
116
|
+
pip install alchemist-nrel
|
|
114
117
|
```
|
|
115
118
|
|
|
116
|
-
|
|
119
|
+
*Option B: From GitHub:*
|
|
117
120
|
```bash
|
|
118
|
-
|
|
119
|
-
|
|
121
|
+
pip install git+https://github.com/NREL/ALchemist.git
|
|
122
|
+
```
|
|
120
123
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
*Option C: Development install (for contributors):*
|
|
125
|
+
```bash
|
|
126
|
+
git clone https://github.com/NREL/ALchemist.git
|
|
127
|
+
cd ALchemist
|
|
128
|
+
pip install -e .
|
|
124
129
|
```
|
|
125
130
|
|
|
126
|
-
|
|
131
|
+
All dependencies are specified in `pyproject.toml` and will be installed automatically.
|
|
127
132
|
|
|
128
|
-
|
|
133
|
+
**Note:** The web UI is pre-built and included in the package. You do **not** need Node.js/npm to use ALchemist unless you're developing the frontend.
|
|
129
134
|
|
|
130
|
-
|
|
135
|
+
### Running ALchemist
|
|
131
136
|
|
|
132
|
-
**
|
|
137
|
+
**Web Application (Recommended):**
|
|
133
138
|
```bash
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
alchemist-web
|
|
140
|
+
# Opens at http://localhost:8000
|
|
136
141
|
```
|
|
137
142
|
|
|
138
|
-
**
|
|
139
|
-
|
|
140
|
-
*Option A: Install directly from GitHub:*
|
|
143
|
+
**Desktop Application:**
|
|
141
144
|
```bash
|
|
142
|
-
|
|
145
|
+
alchemist
|
|
146
|
+
# Launches CustomTkinter GUI
|
|
143
147
|
```
|
|
144
148
|
|
|
145
|
-
|
|
149
|
+
**Development Mode (Frontend Developers):**
|
|
146
150
|
```bash
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
151
|
+
# Terminal 1: Backend with hot-reload
|
|
152
|
+
python run_api.py
|
|
153
|
+
|
|
154
|
+
# Terminal 2: Frontend with hot-reload
|
|
155
|
+
cd alchemist-web
|
|
156
|
+
npm install # First time only
|
|
157
|
+
npm run dev
|
|
158
|
+
# Opens at http://localhost:5173
|
|
150
159
|
```
|
|
151
160
|
|
|
152
|
-
|
|
161
|
+
**Docker Deployment:**
|
|
162
|
+
```bash
|
|
163
|
+
docker pull ghcr.io/nrel/alchemist:latest
|
|
164
|
+
docker run -p 8000:8000 ghcr.io/nrel/alchemist:latest
|
|
165
|
+
|
|
166
|
+
# Or build from source:
|
|
167
|
+
cd docker
|
|
168
|
+
docker-compose up --build
|
|
169
|
+
```
|
|
153
170
|
|
|
154
171
|
For step-by-step instructions, see the [Getting Started](https://nrel.github.io/ALchemist/) section of the documentation.
|
|
155
172
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<img src="docs/assets/
|
|
1
|
+
<img src="docs/assets/NEW_LOGO_LIGHT.png" alt="ALchemist" width="50%" />
|
|
2
2
|
|
|
3
3
|
**ALchemist: Active Learning Toolkit for Chemical and Materials Research**
|
|
4
4
|
|
|
@@ -23,75 +23,91 @@ ALchemist accelerates discovery and optimization by combining:
|
|
|
23
23
|
- **Probabilistic surrogate modeling:** Gaussian process regression via BoTorch or scikit-optimize backends.
|
|
24
24
|
- **Advanced acquisition strategies:** Efficient sampling using qEI, qPI, qUCB, and qNegIntegratedPosteriorVariance.
|
|
25
25
|
- **Modern web interface:** React-based UI with FastAPI backend for seamless active learning workflows.
|
|
26
|
+
- **Autonomous optimization:** Human-out-of-the-loop optimization for real-time process control.
|
|
26
27
|
- **Experiment tracking:** CSV logging, reproducible random seeds, and error tracking.
|
|
27
28
|
- **Extensibility:** Abstract interfaces for models and acquisition functions enable future backend and workflow expansion.
|
|
28
29
|
|
|
30
|
+
### Use Cases
|
|
31
|
+
|
|
32
|
+
- **Interactive Optimization**: Desktop GUI or web UI for manual experiment design
|
|
33
|
+
- **Programmatic Workflows**: Python Session API for scripts and notebooks
|
|
34
|
+
- **Autonomous Operation**: REST API for real-time process control (reactors, synthesis, etc.)
|
|
35
|
+
- **Remote Collaboration**: Web-based interface accessible from any device
|
|
36
|
+
|
|
29
37
|
---
|
|
30
38
|
|
|
31
39
|
## 🧭 Quick Start
|
|
32
40
|
|
|
33
|
-
###
|
|
41
|
+
### Installation
|
|
34
42
|
|
|
35
|
-
**
|
|
36
|
-
```bash
|
|
37
|
-
# Option 1: Manual start
|
|
38
|
-
python run_api.py # Terminal 1: Backend (port 8000)
|
|
39
|
-
cd alchemist-web && npm run dev # Terminal 2: Frontend (port 5173)
|
|
43
|
+
**Requirements:** Python 3.11 or higher
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
scripts\dev_start.bat # Windows
|
|
43
|
-
./scripts/dev_start.sh # Linux/Mac
|
|
44
|
-
```
|
|
45
|
+
We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage your Python environments.
|
|
45
46
|
|
|
46
|
-
**
|
|
47
|
+
**1. Create a new environment:**
|
|
47
48
|
```bash
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
conda create -n alchemist-env python=3.11
|
|
50
|
+
conda activate alchemist-env
|
|
51
|
+
```
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
python run_api.py --production
|
|
53
|
+
**2. Install ALchemist:**
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
*Option A: From PyPI (recommended):*
|
|
56
|
+
```bash
|
|
57
|
+
pip install alchemist-nrel
|
|
56
58
|
```
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
*Option B: From GitHub:*
|
|
59
61
|
```bash
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
pip install git+https://github.com/NREL/ALchemist.git
|
|
63
|
+
```
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
*Option C: Development install (for contributors):*
|
|
66
|
+
```bash
|
|
67
|
+
git clone https://github.com/NREL/ALchemist.git
|
|
68
|
+
cd ALchemist
|
|
69
|
+
pip install -e .
|
|
66
70
|
```
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
All dependencies are specified in `pyproject.toml` and will be installed automatically.
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
**Note:** The web UI is pre-built and included in the package. You do **not** need Node.js/npm to use ALchemist unless you're developing the frontend.
|
|
71
75
|
|
|
72
|
-
|
|
76
|
+
### Running ALchemist
|
|
73
77
|
|
|
74
|
-
**
|
|
78
|
+
**Web Application (Recommended):**
|
|
75
79
|
```bash
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
alchemist-web
|
|
81
|
+
# Opens at http://localhost:8000
|
|
78
82
|
```
|
|
79
83
|
|
|
80
|
-
**
|
|
81
|
-
|
|
82
|
-
*Option A: Install directly from GitHub:*
|
|
84
|
+
**Desktop Application:**
|
|
83
85
|
```bash
|
|
84
|
-
|
|
86
|
+
alchemist
|
|
87
|
+
# Launches CustomTkinter GUI
|
|
85
88
|
```
|
|
86
89
|
|
|
87
|
-
|
|
90
|
+
**Development Mode (Frontend Developers):**
|
|
88
91
|
```bash
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
# Terminal 1: Backend with hot-reload
|
|
93
|
+
python run_api.py
|
|
94
|
+
|
|
95
|
+
# Terminal 2: Frontend with hot-reload
|
|
96
|
+
cd alchemist-web
|
|
97
|
+
npm install # First time only
|
|
98
|
+
npm run dev
|
|
99
|
+
# Opens at http://localhost:5173
|
|
92
100
|
```
|
|
93
101
|
|
|
94
|
-
|
|
102
|
+
**Docker Deployment:**
|
|
103
|
+
```bash
|
|
104
|
+
docker pull ghcr.io/nrel/alchemist:latest
|
|
105
|
+
docker run -p 8000:8000 ghcr.io/nrel/alchemist:latest
|
|
106
|
+
|
|
107
|
+
# Or build from source:
|
|
108
|
+
cd docker
|
|
109
|
+
docker-compose up --build
|
|
110
|
+
```
|
|
95
111
|
|
|
96
112
|
For step-by-step instructions, see the [Getting Started](https://nrel.github.io/ALchemist/) section of the documentation.
|
|
97
113
|
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Release Notes - ALchemist v0.3.0
|
|
2
|
+
|
|
3
|
+
**Release Date:** November 24, 2025
|
|
4
|
+
**Type:** Production Release
|
|
5
|
+
**Status:** Stable
|
|
6
|
+
|
|
7
|
+
## 🎉 Highlights
|
|
8
|
+
|
|
9
|
+
ALchemist v0.3.0 is now **production-ready** and fully deployable! This release marks a significant milestone with complete packaging, Docker support, and simplified installation for end users.
|
|
10
|
+
|
|
11
|
+
## ✨ New Features
|
|
12
|
+
|
|
13
|
+
### Production-Ready Packaging
|
|
14
|
+
- **Pre-built Web UI**: Web interface is now bundled in the Python wheel - no Node.js required for end users!
|
|
15
|
+
- **Single-command Installation**: `pip install alchemist-nrel` now includes everything needed to run both desktop and web apps
|
|
16
|
+
- **Entry Points**: Two command-line tools after installation:
|
|
17
|
+
- `alchemist` - Launch desktop GUI (CustomTkinter)
|
|
18
|
+
- `alchemist-web` - Launch web application (React + FastAPI)
|
|
19
|
+
|
|
20
|
+
### Docker Support
|
|
21
|
+
- **Production-ready Dockerfile**: Optimized multi-stage build
|
|
22
|
+
- **Docker Compose configuration**: One-command deployment
|
|
23
|
+
- **Health checks**: Automated container health monitoring
|
|
24
|
+
- **Volume mounting**: Persistent data for logs and cache
|
|
25
|
+
|
|
26
|
+
### Enhanced Web UI
|
|
27
|
+
- **Production mode**: Optimized build with minification and code splitting
|
|
28
|
+
- **Static file serving**: FastAPI now serves React build artifacts efficiently
|
|
29
|
+
- **Development mode preserved**: Hot-reload still available for frontend developers
|
|
30
|
+
|
|
31
|
+
## 🔧 Technical Improvements
|
|
32
|
+
|
|
33
|
+
### Build System
|
|
34
|
+
- **Custom build hooks**: Automatic React UI compilation during `python -m build`
|
|
35
|
+
- **Smart static file handling**: Supports both development and production workflows
|
|
36
|
+
- **Clean git history**: Build artifacts excluded from repository
|
|
37
|
+
|
|
38
|
+
### API Improvements
|
|
39
|
+
- **Flexible CORS**: Environment variable configuration for production domains
|
|
40
|
+
- **Static file priority**: Checks `api/static/` first (production), falls back to `alchemist-web/dist/` (development)
|
|
41
|
+
- **Better logging**: Informative messages about static file serving
|
|
42
|
+
|
|
43
|
+
### Configuration
|
|
44
|
+
- **Version synchronization**: v0.3.0 across all components (pyproject.toml, package.json, API)
|
|
45
|
+
- **Simplified MANIFEST.in**: Excludes node_modules from source distributions
|
|
46
|
+
- **Production flags**: `--production` mode for optimized serving
|
|
47
|
+
|
|
48
|
+
## 📦 Installation & Deployment
|
|
49
|
+
|
|
50
|
+
### For End Users (No Node.js Required!)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Install from PyPI (coming soon)
|
|
54
|
+
pip install alchemist-nrel
|
|
55
|
+
|
|
56
|
+
# Or install from GitHub
|
|
57
|
+
pip install git+https://github.com/NREL/ALchemist.git
|
|
58
|
+
|
|
59
|
+
# Run the web application
|
|
60
|
+
alchemist-web
|
|
61
|
+
|
|
62
|
+
# Or run the desktop application
|
|
63
|
+
alchemist
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### For NREL Server Deployment
|
|
67
|
+
|
|
68
|
+
**Option 1: Docker (Recommended)**
|
|
69
|
+
```bash
|
|
70
|
+
docker pull ghcr.io/nrel/alchemist:v0.3.0
|
|
71
|
+
docker run -p 8000:8000 ghcr.io/nrel/alchemist:v0.3.0
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Option 2: Docker Compose**
|
|
75
|
+
```bash
|
|
76
|
+
cd docker
|
|
77
|
+
docker-compose up -d
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Option 3: Direct Python**
|
|
81
|
+
```bash
|
|
82
|
+
pip install alchemist-nrel
|
|
83
|
+
alchemist-web --production
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### For Developers
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Clone and install in editable mode
|
|
90
|
+
git clone https://github.com/NREL/ALchemist.git
|
|
91
|
+
cd ALchemist
|
|
92
|
+
pip install -e .
|
|
93
|
+
|
|
94
|
+
# Frontend development with hot-reload
|
|
95
|
+
cd alchemist-web
|
|
96
|
+
npm install
|
|
97
|
+
npm run dev # Terminal 1
|
|
98
|
+
|
|
99
|
+
# Backend with auto-reload
|
|
100
|
+
python run_api.py # Terminal 2
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 🐛 Bug Fixes
|
|
104
|
+
|
|
105
|
+
- Fixed static file serving to use correct path for pip-installed packages
|
|
106
|
+
- Corrected CORS configuration to include localhost:8000 for production mode
|
|
107
|
+
- Fixed MANIFEST.in to exclude node_modules from source distributions
|
|
108
|
+
- Resolved Dockerfile CMD to use entry point instead of direct uvicorn call
|
|
109
|
+
|
|
110
|
+
## 🔄 Breaking Changes
|
|
111
|
+
|
|
112
|
+
None! This release is fully backward compatible with v0.2.x.
|
|
113
|
+
|
|
114
|
+
## 📝 Migration Guide
|
|
115
|
+
|
|
116
|
+
If upgrading from v0.2.x:
|
|
117
|
+
1. Uninstall old version: `pip uninstall alchemist-nrel`
|
|
118
|
+
2. Install new version: `pip install alchemist-nrel`
|
|
119
|
+
3. (Optional) Update your Docker images to use v0.3.0 tag
|
|
120
|
+
|
|
121
|
+
## 🚀 What's Next
|
|
122
|
+
|
|
123
|
+
### Planned for v0.3.1
|
|
124
|
+
- PyPI publishing automation
|
|
125
|
+
- Additional acquisition strategies
|
|
126
|
+
- Enhanced documentation
|
|
127
|
+
|
|
128
|
+
### Future Releases
|
|
129
|
+
- Multi-objective optimization
|
|
130
|
+
- Advanced DoE methods
|
|
131
|
+
- PySide6 desktop UI migration
|
|
132
|
+
|
|
133
|
+
## 🙏 Acknowledgments
|
|
134
|
+
|
|
135
|
+
This work is supported by the U.S. Department of Energy's Bioenergy Technologies Office (BETO) through the ChemCatBio Consortium.
|
|
136
|
+
|
|
137
|
+
## 📄 License
|
|
138
|
+
|
|
139
|
+
BSD 3-Clause License
|
|
140
|
+
|
|
141
|
+
## 🔗 Links
|
|
142
|
+
|
|
143
|
+
- **GitHub**: https://github.com/NREL/ALchemist
|
|
144
|
+
- **Documentation**: https://nrel.github.io/ALchemist/
|
|
145
|
+
- **Issues**: https://github.com/NREL/ALchemist/issues
|
|
146
|
+
- **NREL Software Record**: SWR-25-102
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
For detailed installation and deployment instructions, see:
|
|
151
|
+
- `README.md` - General overview and quick start
|
|
152
|
+
- `memory/RELEASE_BUILD_GUIDE.md` - Build system details
|
|
153
|
+
- `memory/DOCKER.md` - Docker deployment guide
|
|
154
|
+
- `memory/PRODUCTION_DEPLOYMENT.md` - Production configuration
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
+
import tseslint from 'typescript-eslint'
|
|
6
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
7
|
+
|
|
8
|
+
export default defineConfig([
|
|
9
|
+
globalIgnores(['dist']),
|
|
10
|
+
{
|
|
11
|
+
files: ['**/*.{ts,tsx}'],
|
|
12
|
+
extends: [
|
|
13
|
+
js.configs.recommended,
|
|
14
|
+
tseslint.configs.recommended,
|
|
15
|
+
reactHooks.configs['recommended-latest'],
|
|
16
|
+
reactRefresh.configs.vite,
|
|
17
|
+
],
|
|
18
|
+
languageOptions: {
|
|
19
|
+
ecmaVersion: 2020,
|
|
20
|
+
globals: globals.browser,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
])
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en" class="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/NEW_ICON.png" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>ALchemist - Active Learning Toolkit</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="root"></div>
|
|
11
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|