Files
Atomizer/PROJECT_SUMMARY.md

475 lines
16 KiB
Markdown
Raw Normal View History

# Atomizer - Project Summary
**Last Updated**: 2025-11-15
**Repository**: https://github.com/Anto01/Atomizer (Private)
**Branch**: main (5 commits)
---
## 🎯 Project Vision
Atomizer is an advanced optimization platform for Siemens NX Simcenter that combines:
- **LLM-driven configuration** via conversational interface (MCP)
- **Superior optimization** using Optuna (TPE, Gaussian Process surrogates)
- **Real-time monitoring** with interactive dashboards
- **Flexible architecture** with pluggable result extractors
- **NXOpen integration** for seamless NX automation
**Goal**: Create a general-purpose FEA optimization tool more powerful and flexible than NX's built-in optimizer.
---
## 📂 Repository Structure
```
C:\Users\antoi\Documents\Atomaste\Atomizer\
├── .git/ # Git repository
├── .gitignore # Python, NX, optimization files
├── LICENSE # Proprietary license
├── README.md # Main documentation
├── GITHUB_SETUP.md # GitHub push instructions
├── DEVELOPMENT.md # Development workflow guide
├── PROJECT_SUMMARY.md # This file
├── pyproject.toml # Python package config
├── requirements.txt # Pip dependencies
├── config/ # Configuration templates
│ ├── nx_config.json.template # NX paths (NX 2412)
│ └── optimization_config_template.json # Optimization setup
├── mcp_server/ # MCP Server (LLM interface)
│ ├── __init__.py
│ ├── tools/ # MCP tool implementations
│ │ └── __init__.py # Tool registry
│ ├── schemas/ # JSON validation schemas
│ └── prompts/
│ ├── system_prompt.md # LLM instructions (complete)
│ └── examples/ # Few-shot examples
├── optimization_engine/ # Core optimization logic
│ ├── __init__.py
│ └── result_extractors/ # Pluggable metric extractors
│ └── __init__.py # Base class + registry
├── nx_journals/ # NXOpen scripts
│ ├── __init__.py
│ └── utils/ # Helper functions
├── dashboard/ # Web UI (planned)
│ ├── frontend/ # React app
│ └── backend/ # FastAPI server
├── docs/
│ ├── NXOPEN_RESOURCES.md # NXOpen reference guide
│ └── configuration.md # (planned)
├── tests/ # Unit tests
└── examples/ # Example projects
```
---
## 🔑 Key Technologies
### Core Stack
- **Python 3.10** (conda environment: `atomizer`)
- **Siemens NX 2412** with NX Nastran solver
- **Optuna 3.5+** for optimization
- **pyNastran 1.4+** for OP2/F06 parsing
- **Pandas 2.0+** for data management
### MCP & Dashboard
- **MCP Protocol** for LLM integration
- **FastAPI** for backend server
- **WebSockets** for real-time updates
- **React + TypeScript** for frontend (planned)
- **Plotly.js** for 3D visualizations
### Development Tools
- **pytest** for testing
- **black** for code formatting
- **ruff** for linting
- **Git** for version control
---
## 🏗️ Architecture Overview
### Three-Tier Design
```
┌─────────────────────────────────────────────────────────┐
│ TIER 1: UI Layer │
│ ┌─────────────────────┐ ┌──────────────────────────┐ │
│ │ Web Dashboard │ │ LLM Chat Interface │ │
│ │ (React + Plotly) │ │ (MCP Client) │ │
│ └─────────────────────┘ └──────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↕ HTTP/WebSocket
┌─────────────────────────────────────────────────────────┐
│ TIER 2: MCP Server │
│ ┌──────────────────────────────────────────────────┐ │
│ │ • Model Discovery (parse .sim files) │ │
│ │ • Config Builder (generate optimization.json) │ │
│ │ • Optimizer Control (start/stop/monitor) │ │
│ │ • Result Analyzer (extract metrics) │ │
│ │ • NXOpen API Wrapper (file-based bridge) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↕ File I/O + Subprocess
┌─────────────────────────────────────────────────────────┐
│ TIER 3: Execution Layer │
│ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ NX Core │ │ Optuna │ │ Custom Scripts │ │
│ │ (NXOpen) │ │ Engine │ │ (Parsing/Analysis) │ │
│ └──────────┘ └──────────┘ └────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
### File-Based Communication Pattern
- **MCP Server** ↔ **NX Journals**: JSON request/response files
- **Optimization Engine** ↔ **NX**: Expression files (.exp)
- **Results**: CSV (history.csv) + SQLite (optuna_study.db)
---
## 🧩 Reusable Components from P04/Atomizer
The following modules from your existing Atomizer project can be adapted:
| P04 Module | New Location | Adaptation Needed |
|-----------|--------------|-------------------|
| `code/multi_optimizer.py` | `optimization_engine/multi_optimizer.py` | Minimal - Optuna logic is general |
| `code/config_loader.py` | `optimization_engine/config_loader.py` | Extend for extractor plugins |
| `code/surrogate_optimizer.py` | `optimization_engine/surrogate_optimizer.py` | Direct copy |
| `code/journal_NX_Update_and_Solve.py` | `nx_journals/update_and_solve.py` | Generalize for any .sim file |
| `code/zernike_Post_Script_NX.py` | `optimization_engine/result_extractors/zernike.py` | Convert to plugin class |
| `code/nx_post_each_iter.py` | `nx_journals/post_process.py` | Use extractor registry |
**Key Insight**: The optimization engine core (Optuna, history management, CSV/DB) works as-is. Main changes are in result extraction (pluggable) and NX interaction (generalized).
---
## 🛠️ MCP Tools (Planned)
### Model Discovery
- **`discover_fea_model`**: Parse .sim files → extract solutions, expressions, FEM info
- **`search_nxopen_docs`**: Fetch Siemens NXOpen API documentation
### Optimization Control
- **`build_optimization_config`**: Natural language → optimization_config.json
- **`start_optimization`**: Launch optimization run
- **`query_optimization_status`**: Get current iteration metrics
### Result Analysis
- **`extract_results`**: Parse OP2/F06/XDB → stress, displacement, mass, etc.
- **`run_nx_journal`**: Execute custom NXOpen scripts
---
## 📚 NXOpen Development Strategy
### Resource Hierarchy
1. **Official Siemens NXOpen API** - Authoritative reference
2. **NXOpenTSE** - Patterns & best practices (reference only, not dependency)
3. **Atomizer-specific conventions** - Our implementation
### NXOpenTSE Integration
- **GitHub**: https://github.com/theScriptingEngineer/nxopentse
- **Docs**: https://nxopentsedocumentation.thescriptingengineer.com/
- **Usage**: Reference for learning, NOT for copying code
- **Benefits**:
- See proven design patterns
- Learn error handling approaches
- Understand NX-specific gotchas
- Discover lesser-known APIs
### Code Generation Workflow (via MCP)
1. Check official API for method signatures
2. Reference NXOpenTSE for usage patterns
3. Adapt to Atomizer's architecture
4. Add error handling and attribution comments
**See**: `docs/NXOPEN_RESOURCES.md` for complete guide
---
## 🔄 Development Phases (Recommended Order)
### ✅ Phase 0: Foundation (COMPLETE)
- [x] Project structure created
- [x] Git repository initialized
- [x] GitHub remote configured (Anto01/Atomizer)
- [x] Documentation framework
- [x] NXOpen resources documented
- [x] MCP system prompt complete
### 🎯 Phase 1: MCP Server Foundation (NEXT)
- [ ] Implement `discover_fea_model` tool
- [ ] Create .sim file parser
- [ ] Build expression extractor
- [ ] Test with real .sim files
- [ ] Validate JSON schema
### 🔧 Phase 2: Optimization Engine Port
- [ ] Copy Atomizer's `multi_optimizer.py`
- [ ] Adapt `config_loader.py` for extractors
- [ ] Create pluggable result extractor system
- [ ] Implement Nastran OP2 extractor
- [ ] Implement NX mass properties extractor
### 🔌 Phase 3: NXOpen Bridge
- [ ] Build file-based NXOpen API wrapper
- [ ] Create generic journal dispatcher
- [ ] Implement expression update journal
- [ ] Implement solve simulation journal
- [ ] Test with NX 2412
### 🎨 Phase 4: Dashboard UI
- [ ] React frontend skeleton
- [ ] FastAPI backend with WebSocket
- [ ] Real-time iteration monitoring
- [ ] Plotly visualizations
- [ ] Config editor UI
### 🚀 Phase 5: Integration & Testing
- [ ] End-to-end workflow testing
- [ ] LLM prompt refinement
- [ ] Error handling improvements
- [ ] Performance optimization
- [ ] User documentation
---
## 📝 Current Git Status
**Repository**: https://github.com/Anto01/Atomizer
**Visibility**: Private
**Branch**: main
**Commits**: 5
### Commit History
```
f359d4e - chore: Update NX version to 2412
14d2b67 - docs: Add NXOpen resources guide and MCP system prompt
d1cbeb7 - Rebrand project from nx-optimaster to Atomizer
2201aee - docs: Add GitHub setup and development guides
aa3dafb - Initial commit: NX OptiMaster project structure
```
### Files Tracked (15)
- `.gitignore`
- `LICENSE`
- `README.md`
- `GITHUB_SETUP.md`
- `DEVELOPMENT.md`
- `PROJECT_SUMMARY.md` (this file)
- `pyproject.toml`
- `requirements.txt`
- `config/nx_config.json.template`
- `config/optimization_config_template.json`
- `mcp_server/__init__.py`
- `mcp_server/tools/__init__.py`
- `optimization_engine/__init__.py`
- `optimization_engine/result_extractors/__init__.py`
- `nx_journals/__init__.py`
- `mcp_server/prompts/system_prompt.md`
- `docs/NXOPEN_RESOURCES.md`
---
## 🚀 Quick Start Commands
### Clone Repository (Different Machine)
```bash
git clone https://github.com/Anto01/Atomizer.git
cd Atomizer
```
### Set Up Python Environment
```bash
# Create conda environment
conda create -n atomizer python=3.10
conda activate atomizer
# Install dependencies
pip install -e .
# Install dev tools (optional)
pip install -e ".[dev]"
# Install MCP (when ready)
pip install -e ".[mcp]"
```
### Configure NX Path
```bash
# Copy template
cp config/nx_config.json.template config/nx_config.json
# Edit config/nx_config.json:
# - Set nx_executable to your NX 2412 path
# - Set python_env to your atomizer conda environment
```
### Git Workflow
```bash
# Create feature branch
git checkout -b feature/model-discovery
# Make changes, commit
git add .
git commit -m "feat: implement FEA model discovery tool"
# Push to GitHub
git push -u origin feature/model-discovery
# Merge to main (after review)
git checkout main
git merge feature/model-discovery
git push origin main
```
---
## 🎯 Next Immediate Steps
**When you're ready to start coding**, choose one of these entry points:
### Option A: MCP Model Discovery (Recommended First)
**Goal**: Get LLM to parse .sim files and extract expressions
**Tasks**:
1. Create `mcp_server/tools/model_discovery.py`
2. Implement .sim file parsing logic
3. Extract expression names and values
4. Return structured JSON for LLM
5. Test with your P04 .sim files
**Benefit**: Establishes MCP pattern, immediately useful
### Option B: Port Optimization Engine
**Goal**: Get core optimization working independently
**Tasks**:
1. Copy `multi_optimizer.py`, `config_loader.py` from P04
2. Adapt for general use (remove Zernike-specific code)
3. Update import paths
4. Create simple test case
5. Verify Optuna integration works
**Benefit**: Core functionality ready, can test optimization without MCP
### Option C: NXOpen Bridge
**Goal**: Get NX automation working via file-based communication
**Tasks**:
1. Create `nx_journals/api_dispatcher.py`
2. Implement JSON request/response pattern
3. Test expression updates
4. Test .sim file loading
5. Document NXOpen patterns
**Benefit**: NX integration ready for optimization loop
---
## 📊 Key Design Decisions
### 1. **Why File-Based Communication?**
- NXOpen requires NX GUI process
- MCP server runs in separate Python environment
- Files are robust, inspectable, version-controllable
- Proven pattern from P04 Atomizer
### 2. **Why Pluggable Result Extractors?**
- Different FEA problems need different metrics
- Zernike analysis is specific to optical surfaces
- General tool needs stress, thermal, modal, etc.
- Easy to add new extractors without changing core
### 3. **Why MCP vs. Direct UI?**
- Natural language is faster than JSON editing
- LLM can suggest reasonable parameter bounds
- Conversational debugging ("why did this fail?")
- Future: voice commands, multi-modal input
### 4. **Why Dual Persistence (CSV + SQLite)?**
- CSV: Human-readable, Excel-compatible, git-friendly
- SQLite: Fast queries, Optuna requirement
- Sync on each iteration for crash recovery
---
## 🔗 Important Links
### GitHub
- **Repository**: https://github.com/Anto01/Atomizer
- **Issues**: GitHub Issues (private repository)
### Documentation
- **Official NXOpen API**: https://docs.sw.siemens.com/en-US/doc/209349590/
- **NXOpenTSE**: https://nxopentsedocumentation.thescriptingengineer.com/
- **Optuna**: https://optuna.readthedocs.io/
- **pyNastran**: https://github.com/SteveDoyle2/pyNastran
### Local Documentation
- **NXOpen Resources**: `docs/NXOPEN_RESOURCES.md`
- **MCP System Prompt**: `mcp_server/prompts/system_prompt.md`
- **Development Guide**: `DEVELOPMENT.md`
- **GitHub Setup**: `GITHUB_SETUP.md`
---
## 💡 Key Insights for Success
1. **Start Small**: Implement one MCP tool at a time, test thoroughly
2. **Reference P04**: Your existing Atomizer is 80% of the solution
3. **Use NXOpenTSE**: Learn patterns, don't copy code
4. **Test Early**: Use real .sim files from day one
5. **Document as You Go**: Future you will thank present you
6. **Commit Often**: Small, focused commits are easier to debug
---
## 🏁 Success Criteria
**Phase 1 Complete When**:
- LLM can parse a .sim file and list expressions
- User can ask "what parameters can I optimize?"
- System responds with structured list
**Phase 2 Complete When**:
- Can run optimization without LLM (manual config.json)
- Optuna suggests parameters
- Results saved to history.csv
**Phase 3 Complete When**:
- NX journals can update expressions via file commands
- Solver runs automatically
- Results extracted to CSV
**Phase 4 Complete When**:
- Dashboard shows real-time iteration updates
- User can monitor without opening NX
- Plots update automatically
**Full System Complete When**:
- User says: "Optimize bracket.sim to reduce stress"
- LLM configures optimization
- NX runs iterations automatically
- Dashboard shows progress
- User gets optimized design
---
**Project Status**: Foundation complete, ready for development
**Next Action**: Choose entry point (A, B, or C above) and start coding
**Estimated Timeline**: 12-16 weeks for full system (part-time)
---
**Last Updated**: 2025-11-15
**Maintained By**: Antoine (Anto01)
**Built With**: Claude Code 🤖