Architecture roadmap¶
Enterprise maturity model for CAE Copilot adoption. Canonical status matrix: status.md.
Two layers:
- Stages 1–3 — business and engineering maturity (this page, top sections)
- v1–v4 — implementation changelog (appendix below)
Enterprise maturity model¶
| Stage | Business goal | Engineer goal | Stack (target) | Status |
|---|---|---|---|---|
| 1 — Data Foundation | Governed Rocky manual corpus | Find manual section with page citation | PyMuPDF → Qdrant; manifest metadata (cae_product, doc_type) |
Done (v26r1 MVP) |
| 2 — Trusted Agent Layer | Documentation copilot + DEM helpers | Cited answers, script drafts, engineer orchestrates | LangGraph, RAG, tools, eval | Done |
| 3 — Live CAE integration | Optional vendor API / job control | Run/monitor Rocky from copilot (license required) | COM/API, k8s Jobs — future adapter work | Deferred |
flowchart LR
S1[Stage1_DataFoundation] --> S2[Stage2_TrustedAgent]
S2 --> S3[Stage3_SolverOrchestration]
Stage 1 — Data Foundation¶
Problem addressed: AI deployed on top of unstructured chaos (duplicate PDFs, outdated standards, broken tables).
Business outcome: A governed knowledge layer before any agent goes live. Supports AI-First Redesign (TO-BE workflow) instead of automating bad AS-IS click paths.
Engineer outcome: Retrieve the current requirement with a citation — not a plausible paragraph from the wrong document version.
Stack (target):
| Component | Role |
|---|---|
| Unstructured.io | PDF/GOST parsing, table extraction |
| Qdrant | Narrative chunks (post-normalization) |
| Hybrid search | Vector + metadata filters (doc_type, material, version) |
| Metadata contracts | Source doc ID, effective date, doc_type |
Fast-track adoption: Start in a sandbox with a simplified security model and a bounded document set — prove value before full enterprise InfoSec cycle.
Implemented today: Rocky v26r1 PDF ingest via scripts/ingest.py + manifest,
parent-child chunking, Qdrant vector store, metadata filters. Not yet:
Unstructured.io pipeline, structured material catalog API, BM25 + vector fusion.
See Data-First.
Stage 2 — Trusted Agent Layer¶
Problem addressed: Black-box AI — answers without sources, arithmetic in the LLM.
Business outcome: Traceable assistance suitable for engineering compliance workflows. Human-in-the-Loop: engineer remains orchestrator; AI prepares drafts and runs validated calculations.
Engineer outcome: Question → cited retrieval OR deterministic tool result → structured report. Engineer reviews before the answer enters a design record.
Stack (shipped — v1–v3):
| Component | Role |
|---|---|
| LangGraph | Intent routing, conditional edges, retry loops |
| Qdrant + sentence-transformers | RAG with parent-child chunks |
| Pure Python tools | Deterministic engineering calculations |
| Pydantic | Tool argument validation + retry (max 3) |
| FastAPI + Streamlit | API/UI split over HTTP |
| Eval suite | Golden Q&A, citation hit rate |
Model-agnostic: CAEC_LLM_PROVIDER supports OpenRouter, OpenAI, Anthropic;
local models (Qwen, YandexGPT-class) via compatible API base URL — reduces vendor
lock-in and supports on-prem deployment.
See data flow, runtime view, principles.
Stage 3 — Solver Orchestration¶
Status: Deferred — design only. Not part of current product positioning.
Problem addressed: Extending the workflow to long-running CAE jobs without blocking the agent or creating a new black box.
Business outcome: Orchestrated solver runs with audit trail — not "AI runs FEA autonomously."
Engineer outcome: Submit job → monitor job_id → review parsed results with
logged assumptions. Human approves before results enter the report.
Stack (planned):
| Component | Role |
|---|---|
| Docker | Isolated solver containers |
| Celery + Redis or k8s Jobs | Async task queue |
| File storage | Input decks and result files |
| Solver Agent | Skill-spec orchestrator — see solver-agent-skill.md |
Long-running jobs must not block the LangGraph request thread:
sequenceDiagram
actor U as Engineer
participant LG as LangGraph
participant FS as File storage
participant Queue as Task queue
participant Docker as Solver container
U->>LG: Run static analysis on this beam model
LG->>LG: Validate inputs via Tools
LG->>FS: Store input deck
LG->>Queue: submit_job(job_id)
LG->>U: Job started. ID: 123
Note over Queue,Docker: Async execution
Queue->>Docker: Run solver
Docker->>FS: Write results
Queue->>LG: job_id 123 done
LG->>FS: Parse max stress, displacement
LG->>U: Report with human_review flag
Do not use specific commercial product names in portfolio or marketing copy until working prototypes exist.
Target architecture (Stage 3 vision)¶
Status: Planned — not current deployment.
graph TD
User((Engineer)) --> UI[Streamlit UI]
UI --> API[FastAPI]
API --> State[(CAEState)]
State --> Router{Router}
Router --> RAG[RAG node]
Router --> Tools[Tools node]
Router --> Solver[Solver node]
RAG <--> Qdrant[(Qdrant)]
Tools --> PyTools[Python tools]
Solver --> DockerSolver[Docker solvers]
RAG --> Report[Report node]
Tools --> Report
Solver --> Report
Report --> API
Current MVP implements Router → RAG (knowledge/setup/scripting) | Tools (calculation) | Report (unknown) → Report. Router is a conditional edge, not a graph node.
Implementation history (v1–v4)¶
Technical changelog mapped to maturity stages.
v1 — Agent skeleton (done) → Stage 2¶
CAEStateTypedDict as single source of truth- Intent node (keyword + optional LLM)
- Router (conditional edge) → RAG (knowledge/setup/scripting) | Tools (calculation) | Report (unknown)
- FastAPI
POST /ask,GET /health,GET /tools - Unit tests without API key or Qdrant
v2 — Knowledge base (done) → Stage 1 + 2¶
- Qdrant vector store with in-memory fallback
- Parent-child chunking and metadata (
doc_type,material) scripts/ingest.pyCLI- Citations in report output
- Local compose:
make dev-stack+make ingest
v3 — Engineering tools (done) → Stage 2¶
- Three DEM helper tools (particle count, unit convert, timestep heuristic)
- LLM tool-calling with validation retry (max 3 attempts)
- Regex fallback for offline / CI
- Streamlit UI via HTTP client (no graph imports in UI)
v4 — External tool integration (deferred) → Stage 3¶
Same scope as Stage 3 above. Full spec: solver-agent-skill.md.
Post-MVP backlog¶
| Item | Priority | Stage | Notes |
|---|---|---|---|
| Unstructured.io ingestion pipeline | High | 1 | PDF/GOST table extraction |
| Structured material catalog API | High | 1 | Data-First numeric lookup |
| First prod deploy + DNS/TLS | — | 2 | Done — deployment |
| Expand eval to 15–20 golden cases | High | 2 | 14 cases today; pdm run eval |
| LangSmith / datasets faithfulness eval | Medium | 2 | [eval] extras planned; run_eval.py is rule-based only |
| Solver Agent prototype | Medium | 3 | Deferred |
| LangSmith tracing in CI smoke | Medium | 2 | CAEC_ENABLE_TRACING |
| Telegram / multi-channel UI | Low | 2 | API-first design supports later |
Related¶
- Status — canonical maturity and phase matrix
- Data-First — RAG vs Tools boundary
- Solver agent skill — Stage 3 agent spec
- Requirements — scope and anti-goals
- Principles — design rules