feat: Add dashboard chat integration and MCP server

Major changes:
- Dashboard: WebSocket-based chat with session management
- Dashboard: New chat components (ChatPane, ChatInput, ModeToggle)
- Dashboard: Enhanced UI with parallel coordinates chart
- MCP Server: New atomizer-tools server for Claude integration
- Extractors: Enhanced Zernike OPD extractor
- Reports: Improved report generator

New studies (configs and scripts only):
- M1 Mirror: Cost reduction campaign studies
- Simple Beam, Simple Bracket, UAV Arm studies

Note: Large iteration data (2_iterations/, best_design_archive/)
excluded via .gitignore - kept on local Gitea only.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-13 15:53:55 -05:00
parent 69c0d76b50
commit 73a7b9d9f1
1680 changed files with 144922 additions and 723 deletions

View File

@@ -0,0 +1,58 @@
{
"study_name": "training_data_export_test",
"sim_file": "examples/Models/Circular Plate/Circular_Plate.sim",
"fem_file": "examples/Models/Circular Plate/Circular_Plate_fem1.fem",
"design_variables": [
{
"name": "thickness",
"expression_name": "thickness",
"min": 2.0,
"max": 8.0
},
{
"name": "radius",
"expression_name": "radius",
"min": 80.0,
"max": 120.0
}
],
"objectives": [
{
"name": "max_stress",
"type": "minimize",
"extractor": {
"type": "result_parameter",
"parameter_name": "Max Von Mises Stress"
}
},
{
"name": "mass",
"type": "minimize",
"extractor": {
"type": "expression",
"expression_name": "mass"
}
}
],
"constraints": [
{
"name": "stress_limit",
"type": "less_than",
"value": 300.0,
"extractor": {
"type": "result_parameter",
"parameter_name": "Max Von Mises Stress"
}
}
],
"optimization": {
"algorithm": "NSGA-II",
"n_trials": 10,
"population_size": 4
},
"training_data_export": {
"enabled": true,
"export_dir": "atomizer_field_training_data/test_study_001"
},
"version": "1.0"
}

View File

@@ -0,0 +1,17 @@
"""Run optimization for training data export test."""
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
from optimization_engine.core.runner import OptimizationRunner
def main():
"""Run the optimization."""
config_path = Path(__file__).parent / "1_setup" / "workflow_config.json"
runner = OptimizationRunner(config_path)
runner.run()
if __name__ == "__main__":
main()