Spaces:
Sleeping
Sleeping
| title: NeuralCAD | |
| emoji: ⚙️ | |
| colorFrom: blue | |
| colorTo: indigo | |
| sdk: docker | |
| app_port: 7860 | |
| # NeuralCAD — Multi-Agent CAD Design | |
| A multi-agent AI system that converts natural language descriptions of mechanical parts into CNC-machinable 3D models (STEP/STL). Four specialized AI agents collaborate with you in a shared chat to design, engineer, validate, and generate CadQuery code. | |
| ## How It Works | |
| ``` | |
| User ──→ Chat Interface ──→ Agent Orchestrator | |
| │ | |
| ┌───────────────┼───────────────┐ | |
| │ │ │ | |
| Design Agent Engineering CNC Agent | |
| (form/shape) Agent (manufacturability) | |
| │ (specs/dims) │ | |
| └───────────────┼───────────────┘ | |
| │ | |
| CAD Coder Agent | |
| (CadQuery code) | |
| │ | |
| Execute in Sandbox | |
| │ | |
| 3D Solid (B-rep) | |
| ╱ ╲ | |
| CNC Validator Exporter | |
| (machinability (STEP + STL) | |
| checks) | |
| ``` | |
| ## Agents | |
| | Agent | Role | Expertise | | |
| |-------|------|-----------| | |
| | **Design Agent** | Industrial Designer | Form, aesthetics, ergonomics, shape proposals | | |
| | **Engineering Agent** | Mechanical Engineer | Dimensions, tolerances, materials, fastener specs | | |
| | **CNC Agent** | Manufacturing Advisor | Tool access, wall thickness, axis requirements, cost | | |
| | **CAD Coder** | CadQuery Programmer | Generates valid CadQuery Python code on demand | | |
| ## Quick Start | |
| ```bash | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| # Run the web app (mock backend, no API key needed) | |
| python -m server.web --port 5000 | |
| # Open http://localhost:5000 in your browser | |
| ``` | |
| ### With LLM Backends | |
| ```bash | |
| # Gemini (free tier) | |
| export GOOGLE_API_KEY=... | |
| # Select GEMINI in the web UI backend toggle | |
| # Claude (recommended for quality) | |
| export ANTHROPIC_API_KEY=sk-ant-... | |
| # Select CLAUDE in the web UI backend toggle | |
| # GPT-4o | |
| export OPENAI_API_KEY=sk-... | |
| ``` | |
| ### CLI Pipeline (Direct) | |
| ```bash | |
| # Mock backend | |
| python -m core.pipeline "A mounting bracket with four M6 holes" | |
| # With Claude | |
| python -m core.pipeline "A flanged bearing housing" --backend anthropic | |
| ``` | |
| ## Architecture | |
| ``` | |
| NeuralCAD/ | |
| ├── agents/ # Multi-agent orchestration | |
| │ ├── definitions.py # Agent roles, colors, personas | |
| │ ├── orchestrator.py # Single-call + Mock orchestrators | |
| │ ├── crew_orchestrator.py # CrewAI multi-call orchestrator | |
| │ ├── prompts.py # System prompts, routing, JSON parsing | |
| │ ├── design_state.py # Design decision accumulator | |
| │ └── llm_adapter.py # CrewAI LLM adapter | |
| ├── core/ # CAD generation pipeline | |
| │ ├── backends.py # LLM backends (Mock, Anthropic, OpenAI, Gemini) | |
| │ ├── pipeline.py # Text-to-CNC orchestrator + CLI | |
| │ ├── executor.py # Sandboxed CadQuery execution + export | |
| │ ├── validator.py # CNC manufacturability checker | |
| │ └── cadquery_prompts.py # CadQuery system prompt + few-shot examples | |
| ├── server/ # Web + MCP servers | |
| │ ├── web.py # FastAPI app, static serving | |
| │ ├── routes.py # Chat API endpoints | |
| │ └── mcp.py # MCP server (Claude Desktop / Claude Code) | |
| ├── web/ | |
| │ └── index.html # Frontend: Three.js viewer + chat panel | |
| └── tests/ # Test suite | |
| ``` | |
| ### Orchestration Modes | |
| | Backend | Mode | API Calls/Turn | Use Case | | |
| |---------|------|----------------|----------| | |
| | Mock | Template-based | 0 | UI development, demos | | |
| | Gemini | Single-call | 1 | Free tier, rate-limited | | |
| | Anthropic | CrewAI multi-call | 2-4 | Best quality | | |
| | OpenAI | CrewAI multi-call | 2-4 | Best quality | | |
| ### Chat API | |
| **POST /api/chat** — Multi-agent chat turn | |
| ```json | |
| { | |
| "message": "Make it 60mm wide with M4 base mounting", | |
| "history": [{"role": "user", "content": "I need a servo bracket"}], | |
| "mentions": [], | |
| "backend": "mock" | |
| } | |
| ``` | |
| **POST /api/report** — Generate design report from conversation | |
| **GET /api/agents** — List available agents and metadata | |
| ## Features | |
| - **Multi-agent chat** — 4 specialist agents collaborate on part design | |
| - **@mention system** — Direct messages to specific agents (`@design`, `@engineering`, `@cnc`, `@cad`) | |
| - **3D preview** — Real-time STL rendering with Three.js (orbit, zoom, pan) | |
| - **Design state tracking** — Accumulates decisions across turns (localStorage persistence) | |
| - **CNC validation** — Checks wall thickness, pocket ratios, tool access, axis requirements | |
| - **Model gallery** — Browse and reload previously generated models | |
| - **STEP + STL export** — Download CAM-ready files | |
| - **MCP server** — Use from Claude Desktop or Claude Code | |
| ## MCP Server | |
| ```bash | |
| # Connect to Claude Code | |
| claude mcp add text-to-cnc python3 -m server.mcp | |
| # Run standalone (SSE for remote integrations) | |
| python -m server.mcp --transport sse --port 8000 | |
| ``` | |
| ### MCP Tools | |
| | Tool | Description | | |
| |------|-------------| | |
| | `generate_cnc_model` | Text to CadQuery code to 3D solid to STEP/STL | | |
| | `validate_cnc_model` | Run manufacturability checks on CadQuery code | | |
| | `execute_cadquery_code` | Execute arbitrary CadQuery code | | |
| | `chat_turn` | Multi-agent chat turn | | |
| | `list_models` | List generated models | | |
| ## Testing | |
| ```bash | |
| # All tests | |
| python -m pytest | |
| # Pure logic tests only (no CadQuery needed) | |
| python -m pytest -m "not requires_cadquery" | |
| # Integration tests | |
| python -m pytest -m requires_cadquery | |
| # Verbose | |
| python -m pytest -v | |
| ``` | |
| ## Docker | |
| ```bash | |
| docker compose up --build | |
| # Open http://localhost:7860 | |
| ``` | |
| ## Key Research | |
| - **Text-to-CadQuery** (2025) — LLM generates CadQuery code directly | |
| - **GenCAD** (2024) — Transformer + diffusion for image to CAD | |
| - **NURBGen** (2025) — NURBS-based B-rep from text via LLM | |