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.
Files changed (156) hide show
  1. alchemist_nrel-0.3.0/MANIFEST.in +40 -0
  2. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/PKG-INFO +57 -40
  3. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/README.md +55 -39
  4. alchemist_nrel-0.3.0/RELEASE_NOTES_v0.3.0.md +154 -0
  5. alchemist_nrel-0.3.0/alchemist-web/eslint.config.js +23 -0
  6. alchemist_nrel-0.3.0/alchemist-web/index.html +13 -0
  7. alchemist_nrel-0.3.0/alchemist-web/package-lock.json +7788 -0
  8. alchemist_nrel-0.3.0/alchemist-web/package.json +52 -0
  9. alchemist_nrel-0.3.0/alchemist-web/postcss.config.js +6 -0
  10. alchemist_nrel-0.3.0/alchemist-web/public/NEW_ICON.ico +0 -0
  11. alchemist_nrel-0.3.0/alchemist-web/public/NEW_ICON.png +0 -0
  12. alchemist_nrel-0.3.0/alchemist-web/public/NEW_LOGO_DARK.png +0 -0
  13. alchemist_nrel-0.3.0/alchemist-web/public/NEW_LOGO_LIGHT.png +0 -0
  14. alchemist_nrel-0.3.0/alchemist-web/public/vite.svg +1 -0
  15. alchemist_nrel-0.3.0/alchemist-web/src/App.css +42 -0
  16. alchemist_nrel-0.3.0/alchemist-web/src/App.tsx +461 -0
  17. alchemist_nrel-0.3.0/alchemist-web/src/api/client.ts +64 -0
  18. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/acquisition.ts +19 -0
  19. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/experiments.ts +96 -0
  20. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/models.ts +46 -0
  21. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/sessions.ts +85 -0
  22. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/variables.ts +157 -0
  23. alchemist_nrel-0.3.0/alchemist-web/src/api/endpoints/visualizations.ts +103 -0
  24. alchemist_nrel-0.3.0/alchemist-web/src/api/types.ts +345 -0
  25. alchemist_nrel-0.3.0/alchemist-web/src/assets/react.svg +1 -0
  26. alchemist_nrel-0.3.0/alchemist-web/src/components/AddPointDialog.tsx +210 -0
  27. alchemist_nrel-0.3.0/alchemist-web/src/components/AuditLockDialog.tsx +47 -0
  28. alchemist_nrel-0.3.0/alchemist-web/src/components/PendingSuggestionsPanel.tsx +84 -0
  29. alchemist_nrel-0.3.0/alchemist-web/src/components/SessionMetadata.tsx +54 -0
  30. alchemist_nrel-0.3.0/alchemist-web/src/components/SessionMetadataDialog.tsx +143 -0
  31. alchemist_nrel-0.3.0/alchemist-web/src/components/api.ts +23 -0
  32. alchemist_nrel-0.3.0/alchemist-web/src/components/session-components.md +98 -0
  33. alchemist_nrel-0.3.0/alchemist-web/src/components/ui/CollapsibleSection.tsx +49 -0
  34. alchemist_nrel-0.3.0/alchemist-web/src/components/ui/FormField.tsx +111 -0
  35. alchemist_nrel-0.3.0/alchemist-web/src/components/ui/SegmentedButton.tsx +46 -0
  36. alchemist_nrel-0.3.0/alchemist-web/src/components/ui/TabView.tsx +60 -0
  37. alchemist_nrel-0.3.0/alchemist-web/src/components/ui/index.ts +7 -0
  38. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/CalibrationCurve.tsx +209 -0
  39. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ContourPlot.tsx +570 -0
  40. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ContourPlotSimple.tsx +21 -0
  41. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/HyperparametersDisplay.tsx +42 -0
  42. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/MetricsPlot.tsx +142 -0
  43. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/ParityPlot.tsx +174 -0
  44. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/QQPlot.tsx +221 -0
  45. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/VisualizationsPanel.tsx +190 -0
  46. alchemist_nrel-0.3.0/alchemist-web/src/components/visualizations/index.ts +10 -0
  47. alchemist_nrel-0.3.0/alchemist-web/src/features/acquisition/AcquisitionPanel.tsx +644 -0
  48. alchemist_nrel-0.3.0/alchemist-web/src/features/acquisition/index.ts +4 -0
  49. alchemist_nrel-0.3.0/alchemist-web/src/features/experiments/ExperimentsPanel.tsx +193 -0
  50. alchemist_nrel-0.3.0/alchemist-web/src/features/experiments/InitialDesignPanel.tsx +191 -0
  51. alchemist_nrel-0.3.0/alchemist-web/src/features/models/GPRPanel.tsx +428 -0
  52. alchemist_nrel-0.3.0/alchemist-web/src/features/models/README.md +130 -0
  53. alchemist_nrel-0.3.0/alchemist-web/src/features/models/index.ts +4 -0
  54. alchemist_nrel-0.3.0/alchemist-web/src/features/monitoring/MonitoringDashboard.tsx +189 -0
  55. alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariableForm.tsx +310 -0
  56. alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariableList.tsx +116 -0
  57. alchemist_nrel-0.3.0/alchemist-web/src/features/variables/VariablesPanel.tsx +126 -0
  58. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useAcquisition.ts +54 -0
  59. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useDeleteVariable.ts +28 -0
  60. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useExperiments.ts +87 -0
  61. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useFileOperations.ts +36 -0
  62. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useModels.ts +54 -0
  63. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useSessions.ts +174 -0
  64. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useVariables.ts +57 -0
  65. alchemist_nrel-0.3.0/alchemist-web/src/hooks/api/useVisualizations.ts +123 -0
  66. alchemist_nrel-0.3.0/alchemist-web/src/hooks/useTheme.tsx +34 -0
  67. alchemist_nrel-0.3.0/alchemist-web/src/index.css +121 -0
  68. alchemist_nrel-0.3.0/alchemist-web/src/lib/utils.ts +44 -0
  69. alchemist_nrel-0.3.0/alchemist-web/src/main.tsx +10 -0
  70. alchemist_nrel-0.3.0/alchemist-web/src/providers/QueryProvider.tsx +43 -0
  71. alchemist_nrel-0.3.0/alchemist-web/src/providers/VisualizationProvider.tsx +53 -0
  72. alchemist_nrel-0.3.0/alchemist-web/tailwind.config.js +53 -0
  73. alchemist_nrel-0.3.0/alchemist-web/tsconfig.app.json +28 -0
  74. alchemist_nrel-0.3.0/alchemist-web/tsconfig.json +7 -0
  75. alchemist_nrel-0.3.0/alchemist-web/tsconfig.node.json +26 -0
  76. alchemist_nrel-0.3.0/alchemist-web/vite.config.ts +21 -0
  77. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/__init__.py +14 -7
  78. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/botorch_acquisition.py +14 -6
  79. alchemist_nrel-0.3.0/alchemist_core/audit_log.py +594 -0
  80. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/experiment_manager.py +69 -5
  81. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/botorch_model.py +6 -4
  82. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/sklearn_model.py +44 -6
  83. alchemist_nrel-0.3.0/alchemist_core/session.py +1195 -0
  84. alchemist_nrel-0.3.0/alchemist_core/utils/doe.py +200 -0
  85. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/PKG-INFO +57 -40
  86. alchemist_nrel-0.3.0/alchemist_nrel.egg-info/SOURCES.txt +145 -0
  87. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/entry_points.txt +1 -0
  88. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/requires.txt +1 -0
  89. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/top_level.txt +1 -0
  90. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/main.py +19 -3
  91. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/requests.py +71 -0
  92. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/responses.py +144 -0
  93. alchemist_nrel-0.3.0/api/routers/experiments.py +266 -0
  94. alchemist_nrel-0.3.0/api/routers/sessions.py +465 -0
  95. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/visualizations.py +10 -5
  96. alchemist_nrel-0.3.0/api/services/session_store.py +447 -0
  97. alchemist_nrel-0.3.0/api/static/NEW_ICON.ico +0 -0
  98. alchemist_nrel-0.3.0/api/static/NEW_ICON.png +0 -0
  99. alchemist_nrel-0.3.0/api/static/NEW_LOGO_DARK.png +0 -0
  100. alchemist_nrel-0.3.0/api/static/NEW_LOGO_LIGHT.png +0 -0
  101. alchemist_nrel-0.3.0/api/static/assets/api-vcoXEqyq.js +1 -0
  102. alchemist_nrel-0.3.0/api/static/assets/index-C0_glioA.js +4084 -0
  103. alchemist_nrel-0.3.0/api/static/assets/index-CB4V1LI5.css +1 -0
  104. alchemist_nrel-0.3.0/api/static/index.html +14 -0
  105. alchemist_nrel-0.3.0/api/static/vite.svg +1 -0
  106. alchemist_nrel-0.3.0/build_hooks.py +118 -0
  107. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/pyproject.toml +8 -3
  108. alchemist_nrel-0.3.0/run_api.py +55 -0
  109. alchemist_nrel-0.3.0/setup.py +23 -0
  110. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/gpr_panel.py +7 -2
  111. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/notifications.py +197 -10
  112. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/ui.py +1117 -68
  113. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/variables_setup.py +47 -2
  114. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/visualizations.py +60 -3
  115. alchemist_nrel-0.2.1/alchemist_core/session.py +0 -603
  116. alchemist_nrel-0.2.1/alchemist_nrel.egg-info/SOURCES.txt +0 -61
  117. alchemist_nrel-0.2.1/api/routers/experiments.py +0 -154
  118. alchemist_nrel-0.2.1/api/routers/sessions.py +0 -146
  119. alchemist_nrel-0.2.1/api/services/session_store.py +0 -291
  120. alchemist_nrel-0.2.1/tests/test_core_data.py +0 -177
  121. alchemist_nrel-0.2.1/tests/test_event_system.py +0 -336
  122. alchemist_nrel-0.2.1/tests/test_logging.py +0 -70
  123. alchemist_nrel-0.2.1/tests/test_session_api.py +0 -209
  124. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/LICENSE +0 -0
  125. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/__init__.py +0 -0
  126. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/base_acquisition.py +0 -0
  127. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/acquisition/skopt_acquisition.py +0 -0
  128. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/config.py +0 -0
  129. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/__init__.py +0 -0
  130. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/data/search_space.py +0 -0
  131. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/events.py +0 -0
  132. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/__init__.py +0 -0
  133. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/ax_model.py +0 -0
  134. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/models/base_model.py +0 -0
  135. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_core/utils/__init__.py +0 -0
  136. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/alchemist_nrel.egg-info/dependency_links.txt +0 -0
  137. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/__init__.py +0 -0
  138. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/dependencies.py +0 -0
  139. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/example_client.py +0 -0
  140. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/middleware/__init__.py +0 -0
  141. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/middleware/error_handlers.py +0 -0
  142. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/models/__init__.py +0 -0
  143. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/__init__.py +0 -0
  144. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/acquisition.py +0 -0
  145. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/models.py +0 -0
  146. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/routers/variables.py +0 -0
  147. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/api/services/__init__.py +0 -0
  148. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/main.py +0 -0
  149. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/setup.cfg +0 -0
  150. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/__init__.py +0 -0
  151. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/acquisition_panel.py +0 -0
  152. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/custom_widgets.py +0 -0
  153. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/experiment_logger.py +0 -0
  154. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/pool_viz.py +0 -0
  155. {alchemist_nrel-0.2.1 → alchemist_nrel-0.3.0}/ui/ui_utils.py +0 -0
  156. {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.2.1
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/logo.png" alt="ALchemist" width="50%" />
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
- ### Web Application (Recommended)
100
+ ### Installation
92
101
 
93
- **Development Mode:**
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
- # Option 2: Automated start
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
- **Production Mode:**
106
+ **1. Create a new environment:**
105
107
  ```bash
106
- # Build and run
107
- scripts\build_production.bat # Windows
108
- ./scripts/build_production.sh # Linux/Mac
108
+ conda create -n alchemist-env python=3.11
109
+ conda activate alchemist-env
110
+ ```
109
111
 
110
- # Start production server
111
- python run_api.py --production
112
+ **2. Install ALchemist:**
112
113
 
113
- # Access at: http://localhost:8000
114
+ *Option A: From PyPI (recommended):*
115
+ ```bash
116
+ pip install alchemist-nrel
114
117
  ```
115
118
 
116
- **Docker Deployment:**
119
+ *Option B: From GitHub:*
117
120
  ```bash
118
- # Build frontend first
119
- cd alchemist-web && npm run build && cd ..
121
+ pip install git+https://github.com/NREL/ALchemist.git
122
+ ```
120
123
 
121
- # Run with Docker Compose
122
- cd docker
123
- docker-compose up --build
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
- ### Python Package Installation
131
+ All dependencies are specified in `pyproject.toml` and will be installed automatically.
127
132
 
128
- Requirements: Python 3.9 or higher
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
- We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage your Python environments.
135
+ ### Running ALchemist
131
136
 
132
- **1. Create a new environment:**
137
+ **Web Application (Recommended):**
133
138
  ```bash
134
- conda create -n alchemist-env python=3.12
135
- conda activate alchemist-env
139
+ alchemist-web
140
+ # Opens at http://localhost:8000
136
141
  ```
137
142
 
138
- **2. Install ALchemist:**
139
-
140
- *Option A: Install directly from GitHub:*
143
+ **Desktop Application:**
141
144
  ```bash
142
- python -m pip install git+https://github.com/NREL/ALchemist.git
145
+ alchemist
146
+ # Launches CustomTkinter GUI
143
147
  ```
144
148
 
145
- *Option B: Clone and install (recommended for development):*
149
+ **Development Mode (Frontend Developers):**
146
150
  ```bash
147
- git clone https://github.com/NREL/ALchemist.git
148
- cd ALchemist
149
- python -m pip install -e .
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
- All dependencies are specified in `pyproject.toml` and will be installed automatically.
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/logo.png" alt="ALchemist" width="50%" />
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
- ### Web Application (Recommended)
41
+ ### Installation
34
42
 
35
- **Development Mode:**
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
- # Option 2: Automated start
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
- **Production Mode:**
47
+ **1. Create a new environment:**
47
48
  ```bash
48
- # Build and run
49
- scripts\build_production.bat # Windows
50
- ./scripts/build_production.sh # Linux/Mac
49
+ conda create -n alchemist-env python=3.11
50
+ conda activate alchemist-env
51
+ ```
51
52
 
52
- # Start production server
53
- python run_api.py --production
53
+ **2. Install ALchemist:**
54
54
 
55
- # Access at: http://localhost:8000
55
+ *Option A: From PyPI (recommended):*
56
+ ```bash
57
+ pip install alchemist-nrel
56
58
  ```
57
59
 
58
- **Docker Deployment:**
60
+ *Option B: From GitHub:*
59
61
  ```bash
60
- # Build frontend first
61
- cd alchemist-web && npm run build && cd ..
62
+ pip install git+https://github.com/NREL/ALchemist.git
63
+ ```
62
64
 
63
- # Run with Docker Compose
64
- cd docker
65
- docker-compose up --build
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
- ### Python Package Installation
72
+ All dependencies are specified in `pyproject.toml` and will be installed automatically.
69
73
 
70
- Requirements: Python 3.9 or higher
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
- We recommend using [Anaconda](https://www.anaconda.com/products/distribution) to manage your Python environments.
76
+ ### Running ALchemist
73
77
 
74
- **1. Create a new environment:**
78
+ **Web Application (Recommended):**
75
79
  ```bash
76
- conda create -n alchemist-env python=3.12
77
- conda activate alchemist-env
80
+ alchemist-web
81
+ # Opens at http://localhost:8000
78
82
  ```
79
83
 
80
- **2. Install ALchemist:**
81
-
82
- *Option A: Install directly from GitHub:*
84
+ **Desktop Application:**
83
85
  ```bash
84
- python -m pip install git+https://github.com/NREL/ALchemist.git
86
+ alchemist
87
+ # Launches CustomTkinter GUI
85
88
  ```
86
89
 
87
- *Option B: Clone and install (recommended for development):*
90
+ **Development Mode (Frontend Developers):**
88
91
  ```bash
89
- git clone https://github.com/NREL/ALchemist.git
90
- cd ALchemist
91
- python -m pip install -e .
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
- All dependencies are specified in `pyproject.toml` and will be installed automatically.
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>