# francismdpro/laya_test_bench architecture

> Architecture diagram of the GitHub repository francismdpro/laya_test_bench, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/francismdpro/laya_test_bench
- Repository: https://github.com/francismdpro/laya_test_bench

## Overview

Laya Test Bench is a small CLI and Flask-based web app for running typed questions against JSON states using the external Laya decision engine. The main workflow is to load or edit a `{state, questions}` input, validate it, call Laya once for predictions, then format and display decisions, probability distributions, routing, and timing. The web app also lists, reads, writes, and deletes JSON files. Source excerpts are partial, so the graph omits uncertain internal UI/API wiring beyond documented and visible calls.

Main entry points: [`app_laya.py`](https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py) (Flask app), [`laya_run.py`](https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py) (CLI runner), [`01_meteo.json`](https://github.com/francismdpro/laya_test_bench/blob/main/01_meteo.json) (Domain examples), [`questions.json`](https://github.com/francismdpro/laya_test_bench/blob/main/questions.json) (JSON inputs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_cli["CLI runner<br/>[laya_run.py]"]
  node_webapp["Flask app<br/>[app_laya.py]"]
  node_webui["Editor and results UI<br/>[app_laya.py]"]
end

subgraph group_execution["Prediction execution"]
  node_cli_input["CLI input loader<br/>[laya_run.py]"]
  node_web_validation["Payload validation<br/>[app_laya.py]"]
  node_router["Laya Router"]
  node_cli_format["CLI result formatter<br/>[laya_run.py]"]
  node_web_results["Web result display<br/>[app_laya.py]"]
end

subgraph group_inputs["Input files"]
  node_json_files["JSON inputs<br/>[questions.json]"]
  node_sample_meteo["Domain examples<br/>[01_meteo.json]"]
end

node_user(("User"))
node_browser(("Web browser"))
node_checkpoints[("Laya checkpoints")]

node_user -->|"runs command"| node_cli
node_cli -->|"loads input"| node_cli_input
node_cli_input -->|"reads JSON"| node_json_files
node_cli_input -->|"returns data"| node_cli
node_cli -->|"predicts"| node_router
node_router -.->|"loads model"| node_checkpoints
node_router -->|"returns predictions"| node_cli_format
node_cli_format -->|"prints results"| node_user
node_browser -->|"edits and runs"| node_webui
node_webui -->|"calls API"| node_webapp
node_webapp -->|"lists and edits"| node_json_files
node_webapp -->|"validates payload"| node_web_validation
node_web_validation -->|"returns data"| node_webapp
node_webapp -->|"predicts"| node_router
node_router -->|"returns predictions"| node_webapp
node_webapp -->|"supplies result"| node_web_results
node_web_results -->|"renders results"| node_webui
node_sample_meteo -.->|"example input"| node_cli_input
node_sample_meteo -.->|"example file"| node_webapp

click node_cli "https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py"
click node_webapp "https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py"
click node_webui "https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py"
click node_cli_input "https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py"
click node_web_validation "https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py"
click node_cli_format "https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py"
click node_web_results "https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py"
click node_json_files "https://github.com/francismdpro/laya_test_bench/blob/main/questions.json"
click node_sample_meteo "https://github.com/francismdpro/laya_test_bench/blob/main/01_meteo.json"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_webapp,node_webui,node_user,node_browser toneBlue
class node_cli_input,node_web_validation,node_router,node_cli_format,node_web_results,node_checkpoints toneAmber
class node_json_files,node_sample_meteo toneMint
```

## Components

### User interfaces

- [CLI runner](https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py): `laya_run.py`
- [Flask app](https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py): `app_laya.py`
- [Editor and results UI](https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py): `app_laya.py`

### Prediction execution

- [CLI input loader](https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py): `laya_run.py`
- [Payload validation](https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py): `app_laya.py`
- **Laya Router**
- [CLI result formatter](https://github.com/francismdpro/laya_test_bench/blob/main/laya_run.py): `laya_run.py`
- [Web result display](https://github.com/francismdpro/laya_test_bench/blob/main/app_laya.py): `app_laya.py`

### Input files

- [JSON inputs](https://github.com/francismdpro/laya_test_bench/blob/main/questions.json): `questions.json`
- [Domain examples](https://github.com/francismdpro/laya_test_bench/blob/main/01_meteo.json): `01_meteo.json`

### Other components

- **User**
- **Web browser**
- **Laya checkpoints**

## Connections

- User → CLI runner: runs command
- CLI runner → CLI input loader: loads input
- CLI input loader → JSON inputs: reads JSON
- CLI input loader → CLI runner: returns data
- CLI runner → Laya Router: predicts
- Laya Router → Laya checkpoints: loads model
- Laya Router → CLI result formatter: returns predictions
- CLI result formatter → User: prints results
- Web browser → Editor and results UI: edits and runs
- Editor and results UI → Flask app: calls API
- Flask app → JSON inputs: lists and edits
- Flask app → Payload validation: validates payload
- Payload validation → Flask app: returns data
- Flask app → Laya Router: predicts
- Laya Router → Flask app: returns predictions
- Flask app → Web result display: supplies result
- Web result display → Editor and results UI: renders results
- Domain examples → CLI input loader: example input
- Domain examples → Flask app: example file
